aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2019-04-01 18:12:43 +0000
committerYi Kong <yikong@google.com>2019-04-01 14:27:04 -0700
commit06479f302e0b83afc9ab4e03cc9621f6bdc9ad78 (patch)
tree9583601b5ff72cf3eeb05d877c60f4361a138fec
parent45936e9d187aaac2b7c0245f6f8c10138f6a02e9 (diff)
downloadllvm-06479f302e0b83afc9ab4e03cc9621f6bdc9ad78.tar.gz
[llvm-objcopy] Add --keep-symbols option
Differential Revision: https://reviews.llvm.org/D60054 Change-Id: I8ed5491cd553d3dc1909b2c57eebbba3d3ab1c74 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357418 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/tools/llvm-objcopy/ELF/keep-symbol.test7
-rw-r--r--tools/llvm-objcopy/CopyConfig.cpp3
-rw-r--r--tools/llvm-objcopy/ObjcopyOpts.td10
3 files changed, 20 insertions, 0 deletions
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 811f8b753e0..9cc7beebf6f 100644
--- a/tools/llvm-objcopy/CopyConfig.cpp
+++ b/tools/llvm-objcopy/CopyConfig.cpp
@@ -475,6 +475,9 @@ DriverConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr) {
Arg->getValue(), UseRegex);
for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbol))
Config.SymbolsToKeep.emplace_back(Arg->getValue(), UseRegex);
+ for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbols))
+ addSymbolsFromFile(Config.SymbolsToKeep, DC.Alloc, Arg->getValue(),
+ UseRegex);
Config.DeterministicArchives = InputArgs.hasFlag(
OBJCOPY_enable_deterministic_archives,
diff --git a/tools/llvm-objcopy/ObjcopyOpts.td b/tools/llvm-objcopy/ObjcopyOpts.td
index b3172190b04..a4ac320a94f 100644
--- a/tools/llvm-objcopy/ObjcopyOpts.td
+++ b/tools/llvm-objcopy/ObjcopyOpts.td
@@ -205,6 +205,16 @@ def N : JoinedOrSeparate<["-"], "N">, Alias<strip_symbol>;
defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol <symbol>">,
MetaVarName<"symbol">;
def K : JoinedOrSeparate<["-"], "K">, Alias<keep_symbol>;
+
+defm keep_symbols
+ : Eq<"keep-symbols",
+ "Reads a list of symbols from <filename> and runs as if "
+ "--keep-symbol=<symbol> is set for each one. <filename> "
+ "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<"Currently ignored. Only for compatibility with GNU objcopy.">;