diff options
author | Yi Kong <yikong@google.com> | 2019-04-01 18:12:43 +0000 |
---|---|---|
committer | Yi Kong <yikong@google.com> | 2019-04-01 14:27:04 -0700 |
commit | 06479f302e0b83afc9ab4e03cc9621f6bdc9ad78 (patch) | |
tree | 9583601b5ff72cf3eeb05d877c60f4361a138fec | |
parent | 45936e9d187aaac2b7c0245f6f8c10138f6a02e9 (diff) | |
download | llvm-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.test | 7 | ||||
-rw-r--r-- | tools/llvm-objcopy/CopyConfig.cpp | 3 | ||||
-rw-r--r-- | tools/llvm-objcopy/ObjcopyOpts.td | 10 |
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.">; |