]> granicus.if.org Git - llvm/commitdiff
[llvm-objcopy] Strip debug sections when running with --strip-unneeded.
authorJordan Rupprecht <rupprecht@google.com>
Fri, 23 Aug 2019 14:28:58 +0000 (14:28 +0000)
committerJordan Rupprecht <rupprecht@google.com>
Fri, 23 Aug 2019 14:28:58 +0000 (14:28 +0000)
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

test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test [new file with mode: 0644]
tools/llvm-objcopy/ELF/ELFObjcopy.cpp

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 (file)
index 0000000..b6a72f9
--- /dev/null
@@ -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
index 4eb619d011bf1453b39131082daf939318058b76..bfc2ecaa2c804fa03d7c330ee059b33227d0fabb 100644 (file)
@@ -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);
     };