summaryrefslogtreecommitdiff
path: root/lib/cxx_abi.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-07-10 11:31:46 +0800
commite90b72ec3082588b296956730bd2930cf8d5d671 (patch)
tree36ff6916af9b4176ea5a9662219d11e721f0b691 /lib/cxx_abi.cc
parent1767d390fbf3d0c65389de46caf0b6d43ef3b6ad (diff)
downloadlume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.gz
lume-e90b72ec3082588b296956730bd2930cf8d5d671.tar.xz
refactor: promote new architecture to repository root
Archive the deprecated implementation under lume-legacy, make the new kernel the default root-level build, and update repository entry points without changing kernel behavior.
Diffstat (limited to 'lib/cxx_abi.cc')
-rw-r--r--lib/cxx_abi.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/cxx_abi.cc b/lib/cxx_abi.cc
new file mode 100644
index 0000000..872b4a2
--- /dev/null
+++ b/lib/cxx_abi.cc
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/* Copyright (C) 2026 Richard Qin */
+
+/*
+ * cxx_abi.cc — Minimal C++ ABI stubs for freestanding kernel
+ *
+ * Provides symbols that the compiler/linker expects from the C++
+ * runtime library. All error paths are fatal (kernel_panic).
+ *
+ * Reference: docs/specs/cpp_runtime.md
+ */
+
+#include <lume/klog.h>
+
+/* Pure virtual function call trap.
+ * Generated by the compiler in vtable entries for pure virtual methods.
+ * Reaching this means a derived class failed to implement a pure virtual. */
+extern "C" void __cxa_pure_virtual()
+{
+ kernel_panic("pure virtual function call");
+}
+
+/* Global destructor registration.
+ * The kernel does not support global object destruction — all global
+ * objects use Placement New with explicit lifetime management.
+ * If the compiler emits a call to this, it indicates a code violation. */
+extern "C" int __cxa_atexit(void (*)(void*), void*, void*)
+{
+ kernel_panic("__cxa_atexit called in kernel");
+ return 0; // unreachable
+}
+
+/* DSO handle — required by __cxa_atexit ABI.
+ * The kernel is statically linked; this symbol just needs to exist. */
+extern "C" {
+void* __dso_handle __attribute__((visibility("hidden"))) = nullptr;
+}