[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
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index 20ce93b..eb1d0de 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -117,6 +117,10 @@
"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 @@
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: