From af4c09fbb734f0db7b2a9261e3287aa506f2db9c Mon Sep 17 00:00:00 2001 From: Jordan Rupprecht Date: Fri, 23 Aug 2019 14:28:58 +0000 Subject: [PATCH] [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 --- ...strip-unneeded-remove-debug-keep-link.test | 30 +++++++++++++++++++ tools/llvm-objcopy/ELF/ELFObjcopy.cpp | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test 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); }; -- 2.50.1