diff options
| author | Paul Semel <semelpaul@gmail.com> | 2018-08-09 17:49:04 +0000 |
|---|---|---|
| committer | Paul Semel <semelpaul@gmail.com> | 2018-08-09 17:49:04 +0000 |
| commit | 7a3dc2c184c170f4477549f306f7a453dafebc99 (patch) | |
| tree | d108a5a7cea2caaa1f3d299bf5b411c0e5fed8f3 /llvm/tools/llvm-objcopy | |
| parent | 373790293e6ddeff116c91e86f4891e2ff02a59d (diff) | |
| download | bcm5719-llvm-7a3dc2c184c170f4477549f306f7a453dafebc99.tar.gz bcm5719-llvm-7a3dc2c184c170f4477549f306f7a453dafebc99.zip | |
[llvm-objcopy] Add --prefix-symbols option
Differential Revision: https://reviews.llvm.org/D50381
llvm-svn: 339362
Diffstat (limited to 'llvm/tools/llvm-objcopy')
| -rw-r--r-- | llvm/tools/llvm-objcopy/ObjcopyOpts.td | 3 | ||||
| -rw-r--r-- | llvm/tools/llvm-objcopy/Object.h | 2 | ||||
| -rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 5 |
3 files changed, 9 insertions, 1 deletions
diff --git a/llvm/tools/llvm-objcopy/ObjcopyOpts.td b/llvm/tools/llvm-objcopy/ObjcopyOpts.td index 9b872540e91..5e3ac1f7947 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOpts.td +++ b/llvm/tools/llvm-objcopy/ObjcopyOpts.td @@ -105,3 +105,6 @@ def keep_file_symbols : Flag<["-", "--"], "keep-file-symbols">, defm dump_section : Eq<"dump-section">, MetaVarName<"section=file">, HelpText<"Dump contents of section named <section> into file <file>">; +defm prefix_symbols : Eq<"prefix-symbols">, + MetaVarName<"prefix">, + HelpText<"Add <prefix> to the start of every symbol name">; diff --git a/llvm/tools/llvm-objcopy/Object.h b/llvm/tools/llvm-objcopy/Object.h index ba6aea93505..525c5e3a775 100644 --- a/llvm/tools/llvm-objcopy/Object.h +++ b/llvm/tools/llvm-objcopy/Object.h @@ -387,7 +387,7 @@ struct Symbol { SectionBase *DefinedIn = nullptr; SymbolShndxType ShndxType; uint32_t Index; - StringRef Name; + std::string Name; uint32_t NameIndex; uint64_t Size; uint8_t Type; diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index 0c153d521c7..92b882ae649 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -133,6 +133,7 @@ struct CopyConfig { StringRef SplitDWO; StringRef AddGnuDebugLink; + StringRef SymbolsPrefix; std::vector<StringRef> ToRemove; std::vector<StringRef> Keep; std::vector<StringRef> OnlyKeep; @@ -388,6 +389,9 @@ static void HandleArgs(const CopyConfig &Config, Object &Obj, const auto I = Config.SymbolsToRename.find(Sym.Name); if (I != Config.SymbolsToRename.end()) Sym.Name = I->getValue(); + + if (!Config.SymbolsPrefix.empty() && Sym.Type != STT_SECTION) + Sym.Name = (Config.SymbolsPrefix + Sym.Name).str(); }); // The purpose of this loop is to mark symbols referenced by sections @@ -723,6 +727,7 @@ static CopyConfig ParseObjcopyOptions(ArrayRef<const char *> ArgsArr) { Config.SplitDWO = InputArgs.getLastArgValue(OBJCOPY_split_dwo); Config.AddGnuDebugLink = InputArgs.getLastArgValue(OBJCOPY_add_gnu_debuglink); + Config.SymbolsPrefix = InputArgs.getLastArgValue(OBJCOPY_prefix_symbols); for (auto Arg : InputArgs.filtered(OBJCOPY_redefine_symbol)) { if (!StringRef(Arg->getValue()).contains('=')) |

