mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 02:03:35 +08:00
7137d682eb
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 ();
|
|
}
|