#include <stdlib.h> | |
typedef void (*func_ptr) (void); | |
extern func_ptr __CTOR_LIST__[]; | |
extern func_ptr __DTOR_LIST__[]; | |
void | |
__do_global_dtors (void) | |
{ | |
static func_ptr *p = __DTOR_LIST__ + 1; | |
while (*p) | |
{ | |
(*(p)) (); | |
p++; | |
} | |
} | |
void | |
__do_global_ctors (void) | |
{ | |
unsigned long nptrs = (unsigned long) (ptrdiff_t) __CTOR_LIST__[0]; | |
unsigned long i; | |
if (nptrs == (unsigned long) -1) | |
{ | |
for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++); | |
} | |
for (i = nptrs; i >= 1; i--) | |
{ | |
__CTOR_LIST__[i] (); | |
} | |
atexit (__do_global_dtors); | |
} | |
static int initialized = 0; | |
void | |
__main (void) | |
{ | |
if (!initialized) | |
{ | |
initialized = 1; | |
__do_global_ctors (); | |
} | |
} |