summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy
diff options
context:
space:
mode:
authorPaul Semel <semelpaul@gmail.com>2018-08-09 17:49:04 +0000
committerPaul Semel <semelpaul@gmail.com>2018-08-09 17:49:04 +0000
commit7a3dc2c184c170f4477549f306f7a453dafebc99 (patch)
treed108a5a7cea2caaa1f3d299bf5b411c0e5fed8f3 /llvm/tools/llvm-objcopy
parent373790293e6ddeff116c91e86f4891e2ff02a59d (diff)
downloadbcm5719-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.td3
-rw-r--r--llvm/tools/llvm-objcopy/Object.h2
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp5
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('='))
OpenPOWER on IntegriCloud