From 3787de40de207b6a505e7b110d58ef4497241bff Mon Sep 17 00:00:00 2001 From: John McIver Date: Mon, 18 Apr 2022 14:16:10 -0700 Subject: [PATCH] [llvm-objcopy] Make llvm-strip --only-keep-debug suppress default --strip-all Fixes #54417 Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D123798 --- llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test | 6 +++--- llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test | 3 +++ llvm/tools/llvm-objcopy/ObjcopyOptions.cpp | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test b/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test index 66cdeea..3ba5f4e 100644 --- a/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test +++ b/llvm/test/tools/llvm-objcopy/COFF/only-keep-debug.test @@ -3,9 +3,9 @@ RUN: yaml2obj %p/Inputs/only-keep-sections.yaml -o %t.in.exe RUN: llvm-objcopy --only-keep-debug %t.in.exe %t.out.exe RUN: llvm-readobj --sections %t.out.exe | FileCheck %s --check-prefix=SECTIONS RUN: llvm-objdump -t %t.out.exe | FileCheck %s --check-prefix=SYMBOLS -# Run llvm-strip with --strip-symbol on a non-existent symbol to prevent -# defaulting to --strip-all. -RUN: llvm-strip --only-keep-debug --strip-symbol foo %t.in.exe -o %t-strip.out.exe + +## --only-keep-debug suppresses the default --strip-all. +RUN: llvm-strip --only-keep-debug %t.in.exe -o %t-strip.out.exe RUN: cmp %t.out.exe %t-strip.out.exe Check that all non-debug/buildid sections with IMAGE_SCN_CNT_CODE diff --git a/llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test b/llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test index 88b9371..c144b1d 100644 --- a/llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test +++ b/llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test @@ -1,6 +1,9 @@ # RUN: yaml2obj --docnum=1 %s -o %t1 # RUN: llvm-objcopy --only-keep-debug %t1 %t1.dbg # RUN: llvm-readelf -S -l -x .note1 -x .note2 -x .debug_abbrev -x .debug_frame -x .debug_info %t1.dbg | FileCheck %s +## --only-keep-debug suppresses the default --strip-all. +# RUN: llvm-strip --only-keep-debug %t1 +# RUN: llvm-readelf -S -l -x .note1 -x .note2 -x .debug_abbrev -x .debug_frame -x .debug_info %t1 | FileCheck %s ## Check that SHT_NOTE and .debug* are kept, but others are changed to SHT_NOBITS. ## SHT_NOBITS sections do not occupy space in the output. diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp index db17216..95046d4 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp +++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp @@ -1313,8 +1313,9 @@ objcopy::parseStripOptions(ArrayRef RawArgsArr, return std::move(E); if (!InputArgs.hasArg(STRIP_no_strip_all) && !Config.StripDebug && - !Config.StripUnneeded && Config.DiscardMode == DiscardType::None && - !Config.StripAllGNU && Config.SymbolsToRemove.empty()) + !Config.OnlyKeepDebug && !Config.StripUnneeded && + Config.DiscardMode == DiscardType::None && !Config.StripAllGNU && + Config.SymbolsToRemove.empty()) Config.StripAll = true; if (Config.DiscardMode == DiscardType::All) { -- 2.7.4