From 30ccee71ca0218248c39768102488ef589ea9c1b Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Mon, 18 Nov 2019 15:25:04 -0800 Subject: [PATCH] [llvm-objcopy][MachO] Implement --strip-debug Reviewed By: alexshap Differential Revision: https://reviews.llvm.org/D70476 --- .../tools/llvm-objcopy/MachO/strip-debug.test | 38 +++++++++++++++++++ .../tools/llvm-objcopy/MachO/MachOObjcopy.cpp | 6 +-- 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 llvm/test/tools/llvm-objcopy/MachO/strip-debug.test diff --git a/llvm/test/tools/llvm-objcopy/MachO/strip-debug.test b/llvm/test/tools/llvm-objcopy/MachO/strip-debug.test new file mode 100644 index 000000000000..d53271ba31e5 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/strip-debug.test @@ -0,0 +1,38 @@ +## Show that llvm-objcopy/llvm-strip removes all symbols and debug sections. + +# RUN: yaml2obj %p/Inputs/strip-all-with-dwarf.yaml -o %t + +# RUN: llvm-objcopy --strip-debug %t %t.stripped +# RUN: llvm-readobj --sections %t.stripped | FileCheck /dev/null --check-prefix=NODWARF \ +# RUN: --implicit-check-not='Name: __debug' --implicit-check-not='Name: __apple' + +## Make sure that all symbols are kept. +# RUN: llvm-readobj --symbols %t | FileCheck %s --check-prefix=SYM +# RUN: llvm-readobj --symbols %t.stripped | FileCheck %s --check-prefix=SYM + +# SYM: Symbols [ +# SYM-COUNT-3: Symbol +# SYM: ] + +## Make sure that all relocations to non-debug sections are kept. +# RUN: llvm-readobj -r %t | FileCheck %s --check-prefixes=RELOC,DEBUG +# RUN: llvm-readobj -r %t.stripped | FileCheck %s --check-prefix=RELOC + +# RELOC: Relocations [ +# RELOC-NEXT: Section __text { +# RELOC-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# RELOC-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# RELOC-NEXT: } +# DEBUG: Section __debug_info { +# DEBUG-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# DEBUG-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# DEBUG-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# DEBUG-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# DEBUG-NEXT: } +# RELOC-NEXT: Section __compact_unwind { +# RELOC-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# RELOC-NEXT: } +# DEBUG-NEXT: Section __debug_line { +# DEBUG-NEXT: 0x0 0 0 0 X86_64_RELOC_UNSIGNED 0 - +# DEBUG-NEXT: } +# RELOC-NEXT: ] diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp index e589674471db..1f68fda2392d 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -29,7 +29,7 @@ static void removeSections(const CopyConfig &Config, Object &Obj) { }; } - if (Config.StripAll) { + if (Config.StripAll || Config.StripDebug) { // Remove all debug sections. RemovePred = [RemovePred](const Section &Sec) { if (Sec.Segname == "__DWARF") @@ -99,8 +99,8 @@ static Error handleArgs(const CopyConfig &Config, Object &Obj) { Config.ExtractDWO || Config.KeepFileSymbols || Config.LocalizeHidden || Config.PreserveDates || Config.StripAllGNU || Config.StripDWO || Config.StripNonAlloc || Config.StripSections || Config.Weaken || - Config.DecompressDebugSections || Config.StripDebug || - Config.StripNonAlloc || Config.StripSections || Config.StripUnneeded || + Config.DecompressDebugSections || Config.StripNonAlloc || + Config.StripSections || Config.StripUnneeded || Config.DiscardMode != DiscardType::None || !Config.SymbolsToAdd.empty() || Config.EntryExpr) { return createStringError(llvm::errc::invalid_argument,