https://sourceware.org/bugzilla/show_bug.cgi?id=18841

--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
This usage is ill defined. Small changes change the run-time
behavior:

1. Use -O2 causes it to pass with ld:

[hjl@gnu-6 pr18841]$ make 
gcc -B./ -O2 -g   -c -o main.o main.c
gcc -B./ -O2 -g -fpic   -c -o foo.o foo.c
gcc -B./  -shared -o libfoo.so foo.o
gcc -B./  -o main main.o libfoo.so -Wl,-R.
./main
[hjl@gnu-6 pr18841]$ 

2. Make pz file scope causes it to fail with gold and ld:

[hjl@gnu-6 pr18841-bad]$ cat foo.c
void foo() __attribute__((ifunc("resolve_foo")));

static void foo_impl() {}

extern void zoo(void);
void (*pz)(void) = zoo;

void test()
{
  void (*pg)(void) = foo;
  pg();
}

static void* resolve_foo()
{
  pz();
  return foo_impl;
}
[hjl@gnu-6 pr18841-bad]$ make
gcc -B./ -fuse-ld=gold -g -fpic   -c -o foo.o foo.c
gcc -B./ -fuse-ld=gold  -shared -o libfoo.so foo.o
gcc -B./ -fuse-ld=gold  -o main main.o libfoo.so -Wl,-R.
./main
Makefile:17: recipe for target 'all' failed
make: *** [all] Segmentation fault
[hjl@gnu-6 pr18841-bad]$

-- 
You are receiving this mail because:
You are on the CC list for the bug.

_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to