mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +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
 |