From: Jordan Rupprecht Date: Fri, 23 Aug 2019 14:28:58 +0000 (+0000) Subject: [llvm-objcopy] Strip debug sections when running with --strip-unneeded. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=af4c09fbb734f0db7b2a9261e3287aa506f2db9c;p=llvm [llvm-objcopy] Strip debug sections when running with --strip-unneeded. Summary: GNU --strip-unneeded strips debugging sections as well. Do that for llvm-objcopy as well. Additionally, add a test that verifies we keep the .gnu_debuglink section. This apparently was not always the case, and I'm not sure which commit fixed it, but there doesn't appear to be any test coverage to make sure we continue to do so. This fixes PR41043. Reviewers: jhenderson, jakehehrlich, espindola, alexshap Subscribers: emaste, arichardson, MaskRay, abrachet, seiya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66623 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369761 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test b/test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test new file mode 100644 index 00000000000..b6a72f965bd --- /dev/null +++ b/test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test @@ -0,0 +1,30 @@ +## Verifies that running with --strip-unneeded removes debugging sections but +## retains the .gnu_debuglink section. + +# RUN: yaml2obj %s > %t.o +# RUN: touch %t.debug +# RUN: llvm-objcopy --add-gnu-debuglink=%t.debug %t.o %t.2.o +# RUN: llvm-strip --strip-unneeded %t.2.o -o %t.3.o +# RUN: llvm-readelf --sections %t.3.o | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + - Name: .debugfoo + Type: SHT_PROGBITS + +# CHECK: There are 6 section headers + +# CHECK: [ 0] +# CHECK-NEXT: [ 1] .text +# CHECK-NEXT: [ 2] .symtab +# CHECK-NEXT: [ 3] .strtab +# CHECK-NEXT: [ 4] .shstrtab +# CHECK-NEXT: [ 5] .gnu_debuglink diff --git a/tools/llvm-objcopy/ELF/ELFObjcopy.cpp b/tools/llvm-objcopy/ELF/ELFObjcopy.cpp index 4eb619d011b..bfc2ecaa2c8 100644 --- a/tools/llvm-objcopy/ELF/ELFObjcopy.cpp +++ b/tools/llvm-objcopy/ELF/ELFObjcopy.cpp @@ -480,7 +480,7 @@ static Error replaceAndRemoveSections(const CopyConfig &Config, Object &Obj) { }; } - if (Config.StripDebug) { + if (Config.StripDebug || Config.StripUnneeded) { RemovePred = [RemovePred](const SectionBase &Sec) { return RemovePred(Sec) || isDebugSection(Sec); };