summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
diff options
context:
space:
mode:
authorJake Ehrlich <jakehehrlich@google.com>2018-01-05 19:19:09 +0000
committerJake Ehrlich <jakehehrlich@google.com>2018-01-05 19:19:09 +0000
commit27a29b0290065c44ceab765ac4eb47459bcf1833 (patch)
tree5776e3bec802f020fa2ebd3b5fddab2fdc4c1555 /llvm/tools/llvm-objcopy/llvm-objcopy.cpp
parent6047858270b2fe122563da0d02053a84d869cbb6 (diff)
downloadbcm5719-llvm-27a29b0290065c44ceab765ac4eb47459bcf1833.tar.gz
bcm5719-llvm-27a29b0290065c44ceab765ac4eb47459bcf1833.zip
[llvm-objcopy] Add --localize-hidden option
This change adds support in llvm-objcopy for GNU objcopy's --localize-hidden option. This option changes every hidden or internal symbol into a local symbol. llvm-svn: 321884
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index 20ce93bb40e..eb1d0de90d5 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -117,6 +117,10 @@ static cl::list<std::string> AddSection(
"add-section",
cl::desc("Make a section named <section> with the contents of <file>."),
cl::value_desc("section=file"));
+static cl::opt<bool> LocalizeHidden(
+ "localize-hidden",
+ cl::desc(
+ "Mark all symbols that have hidden or internal visibility as local"));
using SectionPred = std::function<bool(const SectionBase &Sec)>;
@@ -180,6 +184,14 @@ template <class ELFT> void CopyBinary(const ELFObjectFile<ELFT> &ObjFile) {
if (!SplitDWO.empty())
SplitDWOToFile<ELFT>(ObjFile, SplitDWO.getValue());
+ // Localize:
+
+ if (LocalizeHidden) {
+ Obj->getSymTab()->localize([](const Symbol &Sym) {
+ return Sym.Visibility == STV_HIDDEN || Sym.Visibility == STV_INTERNAL;
+ });
+ }
+
SectionPred RemovePred = [](const SectionBase &) { return false; };
// Removes:
OpenPOWER on IntegriCloud