summaryrefslogtreecommitdiff
path: root/kernel/cxx/constructors.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cxx/constructors.cxx')
-rw-r--r--kernel/cxx/constructors.cxx18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/cxx/constructors.cxx b/kernel/cxx/constructors.cxx
new file mode 100644
index 0000000..8c21453
--- /dev/null
+++ b/kernel/cxx/constructors.cxx
@@ -0,0 +1,18 @@
+extern void (*_ctors_start[0])(void), (*_ctors_end[0])(void);
+extern void (*_dtors_start[0])(void), (*_dtors_end[0])(void);
+
+void init (void)
+{
+ for (void (**ctor)(void) = _ctors_start; ctor != _ctors_end; ctor++)
+ {
+ (*ctor)();
+ }
+}
+
+void fini (void)
+{
+ for (void (**dtor)(void) = _dtors_start; dtor != _dtors_end; dtor++)
+ {
+ (*dtor)();
+ }
+}