bug-binutils
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]