From 7177f4e661e4e0056aaedf91aa1a5de70b189724 Mon Sep 17 00:00:00 2001 From: Yi Kong Date: Mon, 1 Apr 2019 18:12:43 +0000 Subject: [PATCH] [llvm-objcopy] Add --keep-symbols option Differential Revision: https://reviews.llvm.org/D60054 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357418 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/llvm-objcopy/ELF/keep-symbol.test | 7 +++++++ tools/llvm-objcopy/CopyConfig.cpp | 4 ++++ tools/llvm-objcopy/ObjcopyOpts.td | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/test/tools/llvm-objcopy/ELF/keep-symbol.test b/test/tools/llvm-objcopy/ELF/keep-symbol.test index e4e1888dfa2..67b51872b4c 100644 --- a/test/tools/llvm-objcopy/ELF/keep-symbol.test +++ b/test/tools/llvm-objcopy/ELF/keep-symbol.test @@ -6,6 +6,13 @@ # RUN: llvm-readobj --symbols %t3 | FileCheck %s # RUN: llvm-readobj --symbols %t4 | FileCheck %s --check-prefix=REGEX +# RUN: echo 'foo' > %t.symbols +# RUN: echo 'bar' >> %t.symbols +# RUN: llvm-objcopy --discard-all --keep-symbols %t.symbols %t %t5 +# RUN: llvm-objcopy -K foo -N foo -N bar --keep-symbols %t.symbols -N baz %t %t6 +# RUN: llvm-readobj --symbols %t5 | FileCheck %s +# RUN: llvm-readobj --symbols %t6 | FileCheck %s + !ELF FileHeader: Class: ELFCLASS64 diff --git a/tools/llvm-objcopy/CopyConfig.cpp b/tools/llvm-objcopy/CopyConfig.cpp index cf0ed2fc8a0..50d528eda71 100644 --- a/tools/llvm-objcopy/CopyConfig.cpp +++ b/tools/llvm-objcopy/CopyConfig.cpp @@ -596,6 +596,10 @@ Expected parseObjcopyOptions(ArrayRef ArgsArr) { return std::move(E); for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbol)) Config.SymbolsToKeep.emplace_back(Arg->getValue(), UseRegex); + for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbols)) + if (Error E = addSymbolsFromFile(Config.SymbolsToKeep, DC.Alloc, + Arg->getValue(), UseRegex)) + return std::move(E); for (auto Arg : InputArgs.filtered(OBJCOPY_add_symbol)) { Expected NSI = parseNewSymbolInfo(Arg->getValue()); if (!NSI) diff --git a/tools/llvm-objcopy/ObjcopyOpts.td b/tools/llvm-objcopy/ObjcopyOpts.td index 8cd803ba3c9..b8fbe74fa13 100644 --- a/tools/llvm-objcopy/ObjcopyOpts.td +++ b/tools/llvm-objcopy/ObjcopyOpts.td @@ -207,6 +207,15 @@ defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol ">, MetaVarName<"symbol">; def K : JoinedOrSeparate<["-"], "K">, Alias; +defm keep_symbols + : Eq<"keep-symbols", + "Reads a list of symbols from and runs as if " + "--keep-symbol= is set for each one. " + "contains one symbol per line and may contain comments beginning with " + "'#'. Leading and trailing whitespace is stripped from each line. May " + "be repeated to read symbols from many files.">, + MetaVarName<"filename">; + def only_keep_debug : Flag<["-", "--"], "only-keep-debug">, HelpText<"Clear sections that would not be stripped by --strip-debug. " -- 2.11.0