| #include <errno.h> |
| #include <stdlib.h> |
| /* |
| static void (*__CTOR_LIST__[1]) __P((void)) |
| __attribute__((__unused__)) |
| __attribute__((section(".ctors"))) = { (void *)0 }; |
| |
| static void (*__DTOR_LIST__[1]) __P((void)) |
| __attribute__((section(".dtors"))) = { (void *)-1 }; |
| */ |
| extern void (*__DTOR_LIST__[]) __P((void)); |
| static void __do_global_dtors_aux __P((void)); |
| |
| static void |
| __do_global_dtors_aux() |
| { |
| void (**p)(void) = __DTOR_LIST__ + 1; |
| |
| while (*p) |
| (**p++)(); |
| } |
| |
| static void dummy_fini(void) __attribute__((section(".trash"))); |
| |
| void |
| dummy_fini(void) |
| { |
| static void (* volatile call__dtors)(void) = __do_global_dtors_aux; |
| /* |
| * Call global destructors. |
| */ |
| /* prevent function pointer constant propagation */ |
| __asm__ __volatile__ (".section .fini"); |
| (*call__dtors)(); |
| __asm__ __volatile__ (".section .trash"); |
| |
| } |