[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/18841] New: Data relocations with IFUNC symbols can lead to segf
From: |
amonakov at gmail dot com |
Subject: |
[Bug ld/18841] New: Data relocations with IFUNC symbols can lead to segfault |
Date: |
Mon, 17 Aug 2015 22:22:29 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=18841
Bug ID: 18841
Summary: Data relocations with IFUNC symbols can lead to
segfault
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: amonakov at gmail dot com
CC: hjl.tools at gmail dot com
Target Milestone: ---
In the following testcase, libfoo.so is compiled so that it has GLOB_DAT
relocations against 'foo' and 'zoo', in that order (with BFD linker), which
leads to failure at dynamic linking time. Renaming 'zoo' to 'z' with the
preprocessor avoids the segfault (the relocations happen to be emitted in the
opposite order). Gold linker appears to always sort the relocations
"properly".
cat <<EOF >foo.c
void foo() __attribute__((ifunc("resolve_foo")));
static void foo_impl() {}
void test()
{
void (*pg)(void) = foo;
pg();
}
static void* resolve_foo()
{
extern void zoo(void);
void (*pz)(void) = zoo;
pz();
return foo_impl;
}
EOF
cat <<EOF >main.c
void zoo(){}
void test(void);
int main()
{
test();
return 0;
}
EOF
cat <<'EOF' >Makefile
test: main; ./main
main: libfoo.so
lib%.so: %.c; $(CC) $(CFLAGS) -fPIC -shared -o $@ $<
main: LDLIBS=-L. -lfoo
main: LDFLAGS=-Wl,-rpath,.
EOF
$ make -B CFLAGS=-fuse-ld=gold
cc -fuse-ld=gold -fPIC -shared -o libfoo.so foo.c
cc -fuse-ld=gold -Wl,-rpath,. main.c libfoo.so -L. -lfoo -o main
./main
$ make -B CFLAGS=-fuse-ld=bfd
cc -fuse-ld=bfd -fPIC -shared -o libfoo.so foo.c
cc -fuse-ld=bfd -Wl,-rpath,. main.c libfoo.so -L. -lfoo -o main
./main
Makefile:2: recipe for target 'test' failed
make: *** [test] Segmentation fault
$ make -B CFLAGS=-fuse-ld=bfd\ -Dzoo=z
cc -fuse-ld=bfd -Dzoo=z -fPIC -shared -o libfoo.so foo.c
cc -fuse-ld=bfd -Dzoo=z -Wl,-rpath,. main.c libfoo.so -L. -lfoo -o main
./main
$
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug ld/18841] New: Data relocations with IFUNC symbols can lead to segfault,
amonakov at gmail dot com <=
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, hjl.tools at gmail dot com, 2015/08/17
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, amodra at gmail dot com, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, cvs-commit at gcc dot gnu.org, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, hjl.tools at gmail dot com, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, amonakov at gmail dot com, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, hjl.tools at gmail dot com, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, hjl.tools at gmail dot com, 2015/08/18
- [Bug ld/18841] Data relocations with IFUNC symbols can lead to segfault, cvs-commit at gcc dot gnu.org, 2015/08/18