mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-28 23:34:53 +03:00 
			
		
		
		
	This supersedes the init_array sysdeps directory. It allows us to check for ELF_INITFINI in both C and assembler code, and skip DT_INIT and DT_FINI processing completely on newer architectures. A new header file is needed because <dl-machine.h> is incompatible with assembler code. <sysdep.h> is compatible with assembler code, but it cannot be included in all assembler files because on some architectures, it redefines register names, and some assembler files conflict with that. <elf-initfini.h> is replicated for legacy architectures which need DT_INIT/DT_FINI support. New architectures follow the generic default and disable it.
		
			
				
	
	
		
			34 lines
		
	
	
		
			957 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			957 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* Dummy crti file.
 | |
| 
 | |
|    In this configuration, crti.o and crtn.o are both empty because the
 | |
|    .init_array/.fini_array sections are used exclusively.
 | |
| 
 | |
|    Older ports cannot use this because even if the linker used to
 | |
|    build libc itself has .init_array support, we don't want to produce
 | |
|    a crt[in].o that presume a linker that new will be used to link
 | |
|    other things later.
 | |
| 
 | |
|    But new configurations without compatibility concerns for
 | |
|    toolchains without .init_array support can use this to avoid the
 | |
|    superfluous .init and .fini boilerplate code.  */
 | |
| 
 | |
| #include <elf-initfini.h>
 | |
| 
 | |
| #if ELF_INITFINI
 | |
| # error Cannot use default crti.S because it lacks _init code
 | |
| #endif
 | |
| 
 | |
| #ifdef PREINIT_FUNCTION
 | |
| 
 | |
| # if PREINIT_FUNCTION_WEAK
 | |
| #  error PREINIT_FUNCTION_WEAK is unsupported
 | |
| # endif
 | |
| 
 | |
| /* This arranges for PREINIT_FUNCTION to be called upon loading a library that
 | |
|    contains crti.o.  */
 | |
| 
 | |
| 	.section .init_array,"a",%init_array
 | |
| 	.dc.a PREINIT_FUNCTION
 | |
| 
 | |
| #endif
 |