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 --- /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 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -29,7 +29,7 @@ }; } - 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 @@ 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,