48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright (C) 2004 CodeSourcery, LLC
 | 
						|
 *
 | 
						|
 * Permission to use, copy, modify, and distribute this file
 | 
						|
 * for any purpose is hereby granted without fee, provided that
 | 
						|
 * the above copyright notice and this notice appears in all
 | 
						|
 * copies.
 | 
						|
 *
 | 
						|
 * This file is distributed WITHOUT ANY WARRANTY; without even the implied
 | 
						|
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 */
 | 
						|
 | 
						|
/* Handle ELF .{pre_init,init,fini}_array sections.  */
 | 
						|
#include <sys/types.h>
 | 
						|
 | 
						|
#ifdef HAVE_INITFINI_ARRAY
 | 
						|
 | 
						|
/* These magic symbols are provided by the linker.  */
 | 
						|
extern void (*__preinit_array_start []) (void) __attribute__((weak));
 | 
						|
extern void (*__preinit_array_end []) (void) __attribute__((weak));
 | 
						|
extern void (*__init_array_start []) (void) __attribute__((weak));
 | 
						|
extern void (*__init_array_end []) (void) __attribute__((weak));
 | 
						|
 | 
						|
#ifdef HAVE_INIT_FINI
 | 
						|
extern void _init (void);
 | 
						|
#endif
 | 
						|
 | 
						|
/* Iterate over all the init routines.  */
 | 
						|
void
 | 
						|
__libc_init_array (void)
 | 
						|
{
 | 
						|
  size_t count;
 | 
						|
  size_t i;
 | 
						|
 | 
						|
  count = __preinit_array_end - __preinit_array_start;
 | 
						|
  for (i = 0; i < count; i++)
 | 
						|
    __preinit_array_start[i] ();
 | 
						|
 | 
						|
#ifdef HAVE_INIT_FINI
 | 
						|
  _init ();
 | 
						|
#endif
 | 
						|
 | 
						|
  count = __init_array_end - __init_array_start;
 | 
						|
  for (i = 0; i < count; i++)
 | 
						|
    __init_array_start[i] ();
 | 
						|
}
 | 
						|
#endif
 |