[Bug 237068] /usr/local/bin/ld: BFD (GNU Binutils) 2.30 assertion fail elflink.c:2824

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun May 26 20:08:47 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237068

--- Comment #40 from Mark Millard <marklmi26-fbsd at yahoo.com> ---
(In reply to Dimitry Andric from comment #27)

(In reply to Antoine Brodin from comment #37)

I've not managed to get 32-bit powerpc FreeBSD to build
llvm60 (or other such) using a gcc8/g++8 related toolchain:
same assertion.

I have reduced a reproduction technique for the g++8 context
for 32-bit powerpc FreeBSD -r347549 down to:

/usr/local/bin/ld \
-Bshareable \
-o lib/libLLVM-6.0.so \
/usr/local/lib/gcc8/gcc/powerpc-portbld-freebsd13.0/8.3.0/crtbeginS.o \
--gc-sections \
-soname libLLVM-6.0.so \
--version-script
/wrkdirs/usr/ports/devel/llvm60/work/.build/./lib/tools/llvm-shlib/simple_version_script.map
\
--whole-archive \
lib/libLLVMSupport.a \
--no-whole-archive \
-ltinfo \
/usr/local/lib/gcc8/gcc/powerpc-portbld-freebsd13.0/8.3.0/crtendS.o

/usr/local/bin/ld \
-Bshareable \
-o lib/libLTO.so.6.0.1 \
/usr/local/lib/gcc8/gcc/powerpc-portbld-freebsd13.0/8.3.0/crtbeginS.o \
--gc-sections \
-soname \
libLTO.so.6 \
lib/libLLVM-6.0.so \
/usr/local/lib/gcc8/gcc/powerpc-portbld-freebsd13.0/8.3.0/crtendS.o

where lib/libLLVM-6.0.so ends up with:

# ldd lib/libLLVM-6.0.so
lib/libLLVM-6.0.so:
        libncurses.so.8 => /lib/libncurses.so.8 (0x41e00000)
        libc.so.7 => /lib/libc.so.7 (0x41862000)

# readelf -asW /lib/libncurses.so.8 | egrep '(bss|Symbol)'
   01     .ctors .dtors .jcr .data.rel.ro .dynamic .data .got .sdata .sbss .plt
.bss 
  [21] .sbss             NOBITS          00057448 047448 000070 00  WA  0   0 
4
  [23] .bss              NOBITS          00058410 047448 00085c 00  WA  0   0 
8
Symbol table (.dynsym) contains 725 entries:
   474: 0000000000057448     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start
Symbol table (.symtab) contains 752 entries:
   501: 0000000000057448     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start

(Note: __bss_start has the .sbss 00057448 .)

This ends up producing a lib/libLLVM-6.0.so with:

# readelf -asW lib/libLLVM-6.0.so | egrep '(bss|Symbol )'
   01     .tbss .init_array .ctors .dtors .data.rel.ro .got2 .dynamic .data
.got .sdata .sbss .plt .bss 
   03     .tbss 
  [13] .tbss             NOBITS          001522dc 1422dc 000004 00 WAT  0   0 
4
  [23] .sbss             NOBITS          001574b8 1474b8 000025 00  WA  0   0 
8
  [25] .bss              NOBITS          0015ac78 1474b8 001364 00  WA  0   0 
8
Symbol table (.dynsym) contains 2510 entries:
  1390: 00000000001574b8     0 NOTYPE  GLOBAL DEFAULT   23
__bss_start@@LLVM_6.0 (2)
Symbol table (.symtab) contains 3680 entries:
  2560: 00000000001574b8     0 NOTYPE  GLOBAL DEFAULT   23 __bss_start

In other words, the .dynsym ends up with the @@LLVM_6.0 added.

Removing either lib/libLLVMSupport.a or -ltinfo no longer gets
the assert but does not include as much.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-toolchain mailing list