feat: added support for constructors/desctructors

This commit is contained in:
2023-05-09 22:00:17 +02:00
parent be07ec78da
commit 7411fb55ea
6 changed files with 71 additions and 3 deletions

View File

@@ -0,0 +1,21 @@
//
// Created by rick on 9-5-23.
//
// Based upon https://wiki.osdev.org/Calling_Global_Constructors
typedef void (*func_ptr)(void);
extern func_ptr _init_array_start[0], _init_array_end[0];
extern func_ptr _fini_array_start[0], _fini_array_end[0];
void _init(void) {
for (func_ptr *func = _init_array_start; func != _init_array_end; func++)
(*func)();
}
void _fini(void) {
for (func_ptr *func = _fini_array_start; func != _fini_array_end; func++)
(*func)();
}
func_ptr _init_array_start[0] __attribute__ ((used, section(".init_array"), aligned(sizeof(func_ptr)))) = {};
func_ptr _fini_array_start[0] __attribute__ ((used, section(".fini_array"), aligned(sizeof(func_ptr)))) = {};