crtbegin.c 834 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <errno.h>
  2. #include <stdlib.h>
  3. /*
  4. static void (*__CTOR_LIST__[1]) __P((void))
  5. __attribute__((__unused__))
  6. __attribute__((section(".ctors"))) = { (void *)0 };
  7. static void (*__DTOR_LIST__[1]) __P((void))
  8. __attribute__((section(".dtors"))) = { (void *)-1 };
  9. */
  10. extern void (*__DTOR_LIST__[]) __P((void));
  11. static void __do_global_dtors_aux __P((void));
  12. static void
  13. __do_global_dtors_aux()
  14. {
  15. void (**p)(void) = __DTOR_LIST__ + 1;
  16. while (*p)
  17. (**p++)();
  18. }
  19. static void dummy_fini(void) __attribute__((section(".trash")));
  20. void
  21. dummy_fini(void)
  22. {
  23. static void (* volatile call__dtors)(void) = __do_global_dtors_aux;
  24. /*
  25. * Call global destructors.
  26. */
  27. /* prevent function pointer constant propagation */
  28. __asm__ __volatile__ (".section .fini");
  29. (*call__dtors)();
  30. __asm__ __volatile__ (".section .trash");
  31. }