|  | /* Initializer module for building the ELF shared C library.  This file and | 
|  | sofini.c do the work normally done by crtbeginS.o and crtendS.o, to wrap | 
|  | the `.ctors' and `.dtors' sections so the lists are terminated, and | 
|  | calling those lists of functions.  */ | 
|  |  | 
|  | #ifndef NO_CTORS_DTORS_SECTIONS | 
|  | # include <libc-internal.h> | 
|  | # include <stdlib.h> | 
|  |  | 
|  | static void (*const __CTOR_LIST__[1]) (void) | 
|  | __attribute__ ((used, section (".ctors"))) | 
|  | = { (void (*) (void)) -1 }; | 
|  | static void (*const __DTOR_LIST__[1]) (void) | 
|  | __attribute__ ((used, section (".dtors"))) | 
|  | = { (void (*) (void)) -1 }; | 
|  |  | 
|  | static inline void | 
|  | run_hooks (void (*const list[]) (void)) | 
|  | { | 
|  | while (*++list) | 
|  | (**list) (); | 
|  | } | 
|  |  | 
|  | /* This function will be called from _init in init-first.c.  */ | 
|  | void | 
|  | __libc_global_ctors (void) | 
|  | { | 
|  | /* Call constructor functions.  */ | 
|  | run_hooks (__CTOR_LIST__); | 
|  | } | 
|  |  | 
|  |  | 
|  | /* This function becomes the DT_FINI termination function | 
|  | for the C library.  */ | 
|  | void | 
|  | __libc_fini (void) | 
|  | { | 
|  | /* Call destructor functions.  */ | 
|  | run_hooks (__DTOR_LIST__); | 
|  | } | 
|  |  | 
|  | void (*_fini_ptr) (void) __attribute__ ((section (".fini_array"))) | 
|  | = &__libc_fini; | 
|  | #endif |