[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/10205] New: STT_GNU_IFUNC definition doesn't work in executable
From: |
hjl dot tools at gmail dot com |
Subject: |
[Bug ld/10205] New: STT_GNU_IFUNC definition doesn't work in executable |
Date: |
27 May 2009 05:33:49 -0000 |
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?
address@hidden ifunc-2]$ cat prog.c
extern int foo (int);
int
main (void)
{
foo (-3);
return 0;
}
address@hidden 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");
address@hidden 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
address@hidden 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
address@hidden ifunc-2]$ ./static
address@hidden 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 ld/10205] New: STT_GNU_IFUNC definition doesn't work in executable,
hjl dot tools at gmail dot com <=