|
From: | Arfrever.FTA at GMail dot Com |
Subject: | [Bug ld/24458] New: Linker BFD 2.32 regression: __ehdr_start not useable in shared libraries: "relocation R_X86_64_PC32 against undefined symbol `__ehdr_start' can not be used when making a shared object; recompile with -fPIC" |
Date: | Tue, 16 Apr 2019 20:05:47 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=24458 Bug ID: 24458 Summary: Linker BFD 2.32 regression: __ehdr_start not useable in shared libraries: "relocation R_X86_64_PC32 against undefined symbol `__ehdr_start' can not be used when making a shared object; recompile with -fPIC" Product: binutils Version: 2.32 Status: UNCONFIRMED Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: Arfrever.FTA at GMail dot Com Target Milestone: --- $ cat test.cpp extern char __ehdr_start; int main() { char x = __ehdr_start; } Linker BFD 2.31 prints some unrelated warnings, but works: $ g++ -fuse-ld=bfd -o test test.cpp /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info $ echo $? 0 $ g++ -fuse-ld=bfd -shared -fPIC -o test.so test.cpp /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info $ echo $? 0 Linker GOLD 2.31 works: $ g++ -fuse-ld=gold -o test test.cpp $ echo $? 0 $ g++ -fuse-ld=gold -shared -fPIC -o test.so test.cpp $ echo $? 0 Linker BFD 2.32 works for executables, but fails for shared libraries: $ g++ -fuse-ld=bfd -o test test.cpp $ echo $? 0 $ g++ -fuse-ld=bfd -shared -fPIC -o test.so test.cpp /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: /tmp/cc6cOEh1.o: relocation R_X86_64_PC32 against undefined symbol `__ehdr_start' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.bfd: final link failed: nonrepresentable section on output collect2: error: ld returned 1 exit status $ echo $? 1 Linker GOLD 2.32 works: $ g++ -fuse-ld=gold -o test test.cpp $ echo $? 0 $ g++ -fuse-ld=gold -shared -fPIC -o test.so test.cpp $ echo $? 0 Linker LLD 8.0.0 works: $ clang++ -fuse-ld=lld -o test test.cpp $ echo $? 0 $ clang++ -fuse-ld=lld -shared -fPIC -o test.so test.cpp $ echo $? 0 (__ehdr_start symbol is defined in glibc's static library. glibc 2.29 is built with GCC 8.3.0 and linker BFD 2.32.) -- You are receiving this mail because: You are on the CC list for the bug.
[Prev in Thread] | Current Thread | [Next in Thread] |