[PATCH] D66623: [llvm-objcopy] Strip debug sections when running with --strip-unneeded.

Jordan Rupprecht via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 22 15:56:32 PDT 2019


rupprecht created this revision.
rupprecht added reviewers: jhenderson, jakehehrlich.
Herald added subscribers: llvm-commits, seiya, abrachet, MaskRay, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a reviewer: alexshap.
Herald added a project: LLVM.

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.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D66623

Files:
  llvm/test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test
  llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp


Index: llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
===================================================================
--- llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
+++ llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
@@ -480,7 +480,7 @@
     };
   }
 
-  if (Config.StripDebug) {
+  if (Config.StripDebug || Config.StripUnneeded) {
     RemovePred = [RemovePred](const SectionBase &Sec) {
       return RemovePred(Sec) || isDebugSection(Sec);
     };
Index: llvm/test/tools/llvm-objcopy/ELF/strip-unneeded-remove-debug-keep-link.test
===================================================================
--- /dev/null
+++ llvm/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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66623.216728.patch
Type: text/x-patch
Size: 1602 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190822/4be29455/attachment.bin>


More information about the llvm-commits mailing list