diff --git a/llvm/test/tools/llvm-objcopy/ELF/discard-all-debug.test b/llvm/test/tools/llvm-objcopy/ELF/discard-all-debug.test new file mode 100644 index 000000000000..57814e95f3fa --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/ELF/discard-all-debug.test @@ -0,0 +1,5 @@ +# RUN: cp %p/Inputs/dwarf.dwo %t +# RUN: llvm-strip --keep-symbol=.L.str --discard-all %t -o %t1 +# RUN: llvm-readobj --file-headers --sections %t1 | FileCheck --implicit-check-not=.debug_ %s +# RUN: llvm-objcopy --keep-symbol=.L.str --discard-all %t %t2 +# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck --implicit-check-not=.debug_ %s diff --git a/llvm/tools/llvm-objcopy/CopyConfig.cpp b/llvm/tools/llvm-objcopy/CopyConfig.cpp index bece67351663..3ea4a9509628 100644 --- a/llvm/tools/llvm-objcopy/CopyConfig.cpp +++ b/llvm/tools/llvm-objcopy/CopyConfig.cpp @@ -584,6 +584,8 @@ Expected parseObjcopyOptions(ArrayRef ArgsArr) { Config.KeepFileSymbols = InputArgs.hasArg(OBJCOPY_keep_file_symbols); Config.DecompressDebugSections = InputArgs.hasArg(OBJCOPY_decompress_debug_sections); + if (Config.DiscardMode == DiscardType::All) + Config.StripDebug = true; for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbol)) Config.SymbolsToLocalize.emplace_back(Arg->getValue(), UseRegex); for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbols)) @@ -753,6 +755,9 @@ Expected parseStripOptions(ArrayRef ArgsArr) { !Config.StripAllGNU && Config.SymbolsToRemove.empty()) Config.StripAll = true; + if (Config.DiscardMode == DiscardType::All) + Config.StripDebug = true; + Config.DeterministicArchives = InputArgs.hasFlag(STRIP_enable_deterministic_archives, STRIP_disable_deterministic_archives, /*default=*/true);