| #include <errno.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| /* |
| static void (*__CTOR_END__[1]) __P((void)) |
| __attribute__((section(".ctors"))) = { (void *)-1 }; |
| |
| static void (*__DTOR_END__[1]) __P((void)) |
| __attribute__((__unused__)) |
| __attribute__((section(".dtors"))) = { (void *)0 }; |
| */ |
| extern void (*__CTOR_END__[]) __P((void)); |
| static void __do_global_ctors_aux __P((void)); |
| |
| static void |
| __do_global_ctors_aux() |
| { |
| void (**p)(void) = __CTOR_END__ - 1; |
| |
| while (*p) |
| (**p--)(); |
| } |
| |
| static void dummy_init(void) __attribute__((section(".trash"))); |
| |
| void |
| dummy_init(void) |
| { |
| static smallint initialized; |
| static void (*volatile call__ctors)(void) = __do_global_ctors_aux; |
| /* |
| * Call global constructors. |
| * Arrange to call global destructors at exit. |
| */ |
| /* prevent function pointer constant propagation */ |
| __asm__ __volatile__ (".section .init"); |
| |
| if (!initialized) { |
| initialized = 1; |
| (*call__ctors)(); |
| } |
| __asm__ __volatile__ (".section .trash"); |
| |
| } |