bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/24458] New: Linker BFD 2.32 regression: __ehdr_start not useable


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.


reply via email to

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