40 lines
		
	
	
		
			956 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			956 B
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (C) 2010 CodeSourcery, Inc.
 | |
|  *
 | |
|  * 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
 | |
| extern void (*__fini_array_start []) (void) __attribute__((weak));
 | |
| extern void (*__fini_array_end []) (void) __attribute__((weak));
 | |
| 
 | |
| #ifdef _HAVE_INIT_FINI
 | |
| extern void _fini (void);
 | |
| #endif
 | |
| 
 | |
| /* Run all the cleanup routines.  */
 | |
| void
 | |
| __libc_fini_array (void)
 | |
| {
 | |
|   size_t count;
 | |
|   size_t i;
 | |
|   
 | |
|   count = __fini_array_end - __fini_array_start;
 | |
|   for (i = count; i > 0; i--)
 | |
|     __fini_array_start[i-1] ();
 | |
| 
 | |
| #ifdef _HAVE_INIT_FINI
 | |
|   _fini ();
 | |
| #endif
 | |
| }
 | |
| #endif
 |