mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	On x86, ifuncmain6pie failed with: [hjl@gnu-cfl-2 build-i686-linux]$ ./elf/ifuncmain6pie --direct ./elf/ifuncmain6pie: IFUNC symbol 'foo' referenced in '/export/build/gnu/tools-build/glibc-32bit/build-i686-linux/elf/ifuncmod6.so' is defined in the executable and creates an unsatisfiable circular dependency. [hjl@gnu-cfl-2 build-i686-linux]$ readelf -rW elf/ifuncmod6.so | grep foo 00003ff4 00000706 R_386_GLOB_DAT 0000400c foo_ptr 00003ff8 00000406 R_386_GLOB_DAT 00000000 foo 0000400c 00000401 R_386_32 00000000 foo [hjl@gnu-cfl-2 build-i686-linux]$ Remove non-JUMP_SLOT relocations against foo in ifuncmod6.so, which trigger the circular IFUNC dependency, and build ifuncmain6pie with -Wl,-z,lazy.
		
			
				
	
	
		
			20 lines
		
	
	
		
			229 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			229 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Test STT_GNU_IFUNC symbol reference in a shared library.  */
 | |
| 
 | |
| extern int foo (void);
 | |
| 
 | |
| typedef int (*foo_p) (void);
 | |
| 
 | |
| extern foo_p foo_ptr;
 | |
| 
 | |
| foo_p
 | |
| get_foo_p (void)
 | |
| {
 | |
|   return foo_ptr;
 | |
| }
 | |
| 
 | |
| int
 | |
| call_foo (void)
 | |
| {
 | |
|   return foo ();
 | |
| }
 |