mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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
 |