diff --git a/libc/src/InitArray.c b/libc/src/InitArray.c index 32651f4..3df8b3e 100644 --- a/libc/src/InitArray.c +++ b/libc/src/InitArray.c @@ -1,21 +1,24 @@ -extern void (*__preinit_array_start[])(void) __attribute__((weak)); -extern void (*__preinit_array_end[])(void) __attribute__((weak)); -extern void (*__init_array_start[])(void) __attribute__((weak)); -extern void (*__init_array_end[])(void) __attribute__((weak)); -extern void (*__fini_array_start []) (void) __attribute__((weak)); -extern void (*__fini_array_end []) (void) __attribute__((weak)); +// extern void (*__preinit_array_start[])(void) __attribute__((weak)); +// extern void (*__preinit_array_end[])(void) __attribute__((weak)); +// extern void (*__init_array_start[])(void) __attribute__((weak)); +// extern void (*__init_array_end[])(void) __attribute__((weak)); +// extern void (*__fini_array_start []) (void) __attribute__((weak)); +// extern void (*__fini_array_end []) (void) __attribute__((weak)); -extern void _init(void); +typedef void (*CallPtr)(void); +extern CallPtr __init_array_start[0], __init_array_end[0]; +extern CallPtr __fini_array_start[0], __fini_array_end[0]; + +// TODO: This is not working properly void __libc_init_array(void) { - unsigned long Count = __preinit_array_end - __preinit_array_start; - for (unsigned long i = 0; i < Count; i++) - __preinit_array_start[i](); - - _init(); - - Count = __init_array_end - __init_array_start; - for (unsigned long i = 0; i < Count; i++) - __init_array_start[i](); + // for (CallPtr *func = __init_array_start; func != __init_array_end; func++) + // (*func)(); +} + +void __libc_fini_array(void) +{ + // for (CallPtr *func = __fini_array_start; func != __fini_array_end; func++) + // (*func)(); } diff --git a/libc/src/Runtime.c b/libc/src/Runtime.c index 325878e..fd54f1c 100644 --- a/libc/src/Runtime.c +++ b/libc/src/Runtime.c @@ -1,5 +1,6 @@ extern void __libc_init_array(void); +extern void __libc_fini_array(void); void __libc_init(void) { @@ -8,6 +9,7 @@ void __libc_init(void) void _exit(int Code) { + __libc_fini_array(); __asm__ __volatile__("syscall" : : "a"(0), "D"(Code)