Source: llvm-toolchain-3.9 Version: 1:3.9.1-17 Severity: serious https://buildd.debian.org/status/logs.php?pkg=llvm-toolchain-3.9&arch=mipsel
... /usr/bin/ld: BFD (GNU Binutils for Debian) 2.29.1 internal error, aborting at ../../bfd/merge.c:910 in _bfd_merged_section_offset /usr/bin/ld: Please report this bug. collect2: error: ld returned 1 exit status tools/llvm-shlib/CMakeFiles/LLVM.dir/build.make:274: recipe for target 'lib/libLLVM-3.9.so.1' failed make[4]: *** [lib/libLLVM-3.9.so.1] Error 1 In #874674 it was discovered that this is just a bad error handling for "out of memory" in ld. llvm-toolchain-3.9 (1:3.9.1-16) unstable; urgency=medium ... [ Matthias Klose ] ... * On amd64, s390x, arm64 and ppc64el, build with -g1 instead of -g. ... -- Sylvestre Ledru <sylves...@debian.org> Fri, 08 Sep 2017 11:57:07 +0200 This is also what debian/rules does, and it is pretty weird: ifneq (,$(filter $(DEB_HOST_ARCH),amd64 arm64 ppc64el s390x)) opt_flags += -g1 else opt_flags += -g endif -g is equal to -g2, so this change reduces the amount of debug information generated on some 64bit architectures - these are architectures where -g is supposed to not cause any problems. mipsel being the only failing release architecture makes sense considering that -g is used on 32bit, and mipsel is missing in the list of gsplit dwarf architectures. There are three alternative approaches, either would make sense and should fix the mipsel build (untested): 1. go back to -g everywhere and remove ENABLE_SPLIT_DWARF_ARCHS, that's then actually required on all 32bit architectures: ifeq ($(DEB_HOST_ARCH_BITS),32) CXXFLAGS_EXTRA += -gsplit-dwarf endif 2. remove all gsplit dwarf usage and reverse the -g1 handling so that it makes sense: ifeq ($(DEB_HOST_ARCH_BITS),32) opt_flags += -g1 else opt_flags += -g endif 3. remove all gsplit dwarf usage and use -g1 on all architectures: opt_flags += -g1