| #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 (); |
| } |
| } |