diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 5becc2d2ed81e..031a8679db418 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -1025,12 +1025,11 @@ InputSectionBase *ObjFile::createInputSection(uint32_t idx, name == ".gnu.linkonce.t.__i686.get_pc_thunk.bx") return &InputSection::discarded; - // If we are creating a new .build-id section, strip existing .build-id - // sections so that the output won't have more than one .build-id. - // This is not usually a problem because input object files normally don't - // have .build-id sections, but you can create such files by - // "ld.{bfd,gold,lld} -r --build-id", and we want to guard against it. - if (name == ".note.gnu.build-id" && config->buildId != BuildIdKind::None) + // Strip existing .note.gnu.build-id sections so that the output won't have + // more than one build-id. This is not usually a problem because input object + // files normally don't have .build-id sections, but you can create such files + // by "ld.{bfd,gold,lld} -r --build-id", and we want to guard against it. + if (name == ".note.gnu.build-id") return &InputSection::discarded; // The linker merges EH (exception handling) frames and creates a diff --git a/lld/test/ELF/relocatable-build-id.s b/lld/test/ELF/relocatable-build-id.s index 5ac205c2b2878..2c017e365a58d 100644 --- a/lld/test/ELF/relocatable-build-id.s +++ b/lld/test/ELF/relocatable-build-id.s @@ -4,9 +4,19 @@ # RUN: ld.lld --build-id=0xdeadbeef -o %t.exe %t2.o # RUN: llvm-objdump -s %t.exe | FileCheck %s +## The default --build-id=none removes .note.gnu.build-id input sections. +# RUN: ld.lld %t2.o -o %t.none +# RUN: llvm-readelf -S %t.none | FileCheck %s --check-prefix=NO +# RUN: ld.lld --build-id=none %t2.o -o %t.none2 +# RUN: cmp %t.none %t.none2 + +# CHECK: Contents of section .note.gnu.build-id: # CHECK-NOT: cafebabe # CHECK: deadbeef +# NO: Section Headers: +# NO-NOT: .note.gnu.build-id + .global _start _start: ret