STT_GNU_IFUNC definition doesn't work in executable. I have a glibc patch: http://sourceware.org/ml/libc-alpha/2009-05/msg00182.html
But it doesn't work with static executables. Should we allow STT_GNU_IFUNC definition in executable at all? [...@gnu-34 ifunc-2]$ cat prog.c extern int foo (int); int main (void) { foo (-3); return 0; } [...@gnu-34 ifunc-2]$ cat foo.c #include <stdio.h> int global = 1; static int minus_one (int x) { printf ("Hello minus_one: %d\n", x); return -1; } static int zero (int x) { printf ("Hello zero: %d\n", x); return 0; } void * foo_ifunc (void) __asm__ ("foo"); void * foo_ifunc (void) { return global ? minus_one : zero ; } __asm__(".type foo, %gnu_indirect_function"); [...@gnu-34 ifunc-2]$ make gcc -B./ -g -c -o prog.o prog.c gcc -B./ -g -c -o foo.o foo.c gcc -B./ -L. -nostdlib -nostartfiles -o dynamic \ -Wl,-dynamic-linker=/export/build/gnu/glibc-sse/build-x86_64-linux/elf/ld-linux-x86-64.so.2 \ -Wl,-z,combreloc \ /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crt1.o /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crti.o \ `gcc -B./ --print-file-name=crtbegin.o` \ prog.o foo.o -Wl,-rpath,. \ -Wl,-rpath=/export/build/gnu/glibc-sse/build-x86_64-linux:/export/build/gnu/glibc-sse/build-x86_64-linux/math \ /export/build/gnu/glibc-sse/build-x86_64-linux/elf/ld-linux-x86-64.so.2 \ /export/build/gnu/glibc-sse/build-x86_64-linux/libc.so.6 /export/build/gnu/glibc-sse/build-x86_64-linux/libc_nonshared.a \ -lgcc -lgcc_eh `gcc --print-file-name=crtend.o` \ /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crtn.o ./dynamic segfault [...@gnu-34 ifunc-2]$ make static gcc -B./ -static -nostdlib -nostartfiles -o static \ /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crt1.o /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crti.o \ `gcc -B./ --print-file-name=crtbegin.o` \ prog.o foo.o \ /export/build/gnu/glibc-sse/build-x86_64-linux/libc.a \ -lgcc -lgcc_eh \ /export/build/gnu/glibc-sse/build-x86_64-linux/libc.a \ `gcc -B./ --print-file-name=crtend.o` \ /export/build/gnu/glibc-sse/build-x86_64-linux/csu/crtn.o [...@gnu-34 ifunc-2]$ ./static [...@gnu-34 ifunc-2]$ -- Summary: STT_GNU_IFUNC definition doesn't work in executable Product: binutils Version: 2.20 (HEAD) Status: NEW Severity: normal Priority: P2 Component: ld AssignedTo: unassigned at sources dot redhat dot com ReportedBy: hjl dot tools at gmail dot com CC: bug-binutils at gnu dot org,nickc at redhat dot com http://sourceware.org/bugzilla/show_bug.cgi?id=10205 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils