]> granicus.if.org Git - llvm/commitdiff
[llvm-objcopy] Add few file processing directives
authorEugene Leviant <eleviant@accesssoftek.com>
Fri, 8 Feb 2019 14:37:54 +0000 (14:37 +0000)
committerEugene Leviant <eleviant@accesssoftek.com>
Fri, 8 Feb 2019 14:37:54 +0000 (14:37 +0000)
Differential revision: https://reviews.llvm.org/D57877

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353521 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-objcopy/ELF/globalize.test
test/tools/llvm-objcopy/ELF/localize.test
test/tools/llvm-objcopy/ELF/strip-symbol.test
test/tools/llvm-objcopy/ELF/weaken.test
tools/llvm-objcopy/CopyConfig.cpp
tools/llvm-objcopy/ObjcopyOpts.td

index 853f15b73af67932cd9a65fc0bd660d9e6790041..bd7f38ee52dded3e2d84c5bd1f1df53c6d896fe5 100644 (file)
@@ -6,6 +6,16 @@
 # RUN: llvm-readobj --symbols %t2 | FileCheck %s
 # RUN: llvm-objcopy --regex --globalize-symbol='.*' %t %t3
 # RUN: cmp %t2 %t3
+# RUN: echo " Global # global" > %t-list.txt
+# RUN: echo "Local" >> %t-list.txt
+# RUN: echo "Weak" >> %t-list.txt
+# RUN: echo "WeakUndef" >> %t-list.txt
+# RUN: echo " # comment " >> %t-list.txt
+# RUN: llvm-objcopy --globalize-symbols %t-list.txt %t %t4
+# RUN: cmp %t2 %t4
+# RUN: echo ".+ # .+ " > %t-list2.txt
+# RUN: llvm-objcopy --regex --globalize-symbols %t-list2.txt %t %t5
+# RUN: cmp %t2 %t5
 
 !ELF
 FileHeader:
index 3512ab69a900e0191c3f78502a03fbf31afae77b..fb812317c8fdcdeb6b186ac8841ff9b1b5089249 100644 (file)
@@ -9,6 +9,18 @@
 # RUN: llvm-readobj --symbols %t2 | FileCheck %s
 # RUN: llvm-objcopy --regex --localize-symbol='.*' %t %t3
 # RUN: cmp %t2 %t3
+# RUN: echo "  Global # comment  " > %t-list.txt
+# RUN: echo "GlobalUndef" >> %t-list.txt
+# RUN: echo "Local" >> %t-list.txt
+# RUN: echo "Weak" >> %t-list.txt
+# RUN: echo "GlobalCommon" >> %t-list.txt
+# RUN: echo " # comment " >> %t-list.txt
+# RUN: llvm-objcopy --localize-symbols %t-list.txt %t %t4
+# RUN: cmp %t2 %t4
+# RUN: echo "  .*al.* # Global + Local + GlobalCommon " > %t-list2.txt
+# RUN: echo "Weak" >> %t-list2.txt
+# RUN: llvm-objcopy --regex --localize-symbols %t-list2.txt %t %t5
+# RUN: cmp %t2 %t5
 
 !ELF
 FileHeader:
index c651eee9c568a36419d9a6ad0e7498e05a2aa555..73d3c1cb39208a6e542571d88b7fd2959624e7de 100644 (file)
@@ -5,6 +5,14 @@
 # RUN: cmp %t2 %t3
 # RUN: llvm-strip --regex --strip-symbol '^b.*' -N bar %t -o %t4
 # RUN: cmp %t3 %t4
+# RUN: echo " bar # bar" > %t-list.txt
+# RUN: echo " baz # baz" >> %t-list.txt
+# RUN: echo " # no symbol" >> %t-list.txt
+# RUN: llvm-objcopy --strip-symbols %t-list.txt %t %t5
+# RUN: cmp %t3 %t5
+# RUN: echo "b.* # bar & baz" > %t-list2.txt
+# RUN: llvm-objcopy --regex --strip-symbols %t-list2.txt %t %t6
+# RUN: cmp %t3 %t6
 
 !ELF
 FileHeader:
index a37bcad221f6067464fea6bc995962ba400b4f70..01de61ab2758a0bd1f17a02f199f8607ec5806c7 100644 (file)
@@ -3,6 +3,16 @@
 # RUN: llvm-readobj --symbols %t2 | FileCheck %s
 # RUN: llvm-objcopy --regex --weaken-symbol='.*' %t %t3
 # RUN: cmp %t2 %t3
+# RUN: echo "  Global  # comment" > %t-list.txt
+# RUN: echo "Local" >> %t-list.txt
+# RUN: echo "Weak" >> %t-list.txt
+# RUN: echo " # comment" >> %t-list.txt
+# RUN: llvm-objcopy --weaken-symbols %t-list.txt %t %t4
+# RUN: cmp %t2 %t4
+# RUN: echo ".*al # Global + Local == .*al" > %t-list2.txt
+# RUN: echo "Weak # weak" >> %t-list2.txt
+# RUN: llvm-objcopy --regex --weaken-symbols %t-list2.txt %t %t5
+# RUN: cmp %t2 %t5
 
 !ELF
 FileHeader:
index 3a0e01caf2242aa4657cd19308bdae00c3ff66f3..a2a58f20fe9b211ac7229bb67a4240fc0e7d77ff 100644 (file)
@@ -226,9 +226,9 @@ static const MachineInfo &getOutputFormatMachineInfo(StringRef Format) {
   return Iter->getValue();
 }
 
-static void addGlobalSymbolsFromFile(std::vector<NameOrRegex> &Symbols,
-                                     BumpPtrAllocator &Alloc,
-                                     StringRef Filename, bool UseRegex) {
+static void addSymbolsFromFile(std::vector<NameOrRegex> &Symbols,
+                               BumpPtrAllocator &Alloc, StringRef Filename,
+                               bool UseRegex) {
   StringSaver Saver(Alloc);
   SmallVector<StringRef, 16> Lines;
   auto BufOrErr = MemoryBuffer::getFile(Filename);
@@ -445,17 +445,29 @@ DriverConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr) {
       InputArgs.hasArg(OBJCOPY_decompress_debug_sections);
   for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbol))
     Config.SymbolsToLocalize.emplace_back(Arg->getValue(), UseRegex);
+  for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbols))
+    addSymbolsFromFile(Config.SymbolsToLocalize, DC.Alloc, Arg->getValue(),
+                       UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbol))
     Config.SymbolsToKeepGlobal.emplace_back(Arg->getValue(), UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbols))
-    addGlobalSymbolsFromFile(Config.SymbolsToKeepGlobal, DC.Alloc,
-                             Arg->getValue(), UseRegex);
+    addSymbolsFromFile(Config.SymbolsToKeepGlobal, DC.Alloc, Arg->getValue(),
+                       UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_globalize_symbol))
     Config.SymbolsToGlobalize.emplace_back(Arg->getValue(), UseRegex);
+  for (auto Arg : InputArgs.filtered(OBJCOPY_globalize_symbols))
+    addSymbolsFromFile(Config.SymbolsToGlobalize, DC.Alloc, Arg->getValue(),
+                       UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_weaken_symbol))
     Config.SymbolsToWeaken.emplace_back(Arg->getValue(), UseRegex);
+  for (auto Arg : InputArgs.filtered(OBJCOPY_weaken_symbols))
+    addSymbolsFromFile(Config.SymbolsToWeaken, DC.Alloc, Arg->getValue(),
+                       UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_strip_symbol))
     Config.SymbolsToRemove.emplace_back(Arg->getValue(), UseRegex);
+  for (auto Arg : InputArgs.filtered(OBJCOPY_strip_symbols))
+    addSymbolsFromFile(Config.SymbolsToRemove, DC.Alloc, Arg->getValue(),
+                       UseRegex);
   for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbol))
     Config.SymbolsToKeep.emplace_back(Arg->getValue(), UseRegex);
 
index ccfc5420360ae32b6e7476aef333a7cb215958ac..12d619ef8b4825d486d4d14e650f20024480ca36 100644 (file)
@@ -134,10 +134,21 @@ def localize_hidden
           "Mark all symbols that have hidden or internal visibility as local">;
 defm localize_symbol : Eq<"localize-symbol", "Mark <symbol> as local">,
                        MetaVarName<"symbol">;
+defm localize_symbols
+    : Eq<"localize-symbols",
+         "Reads a list of symbols from <filename> and marks them local.">,
+      MetaVarName<"filename">;
+
 def L : JoinedOrSeparate<["-"], "L">, Alias<localize_symbol>;
 
 defm globalize_symbol : Eq<"globalize-symbol", "Mark <symbol> as global">,
                         MetaVarName<"symbol">;
+
+defm globalize_symbols
+    : Eq<"globalize-symbols",
+         "Reads a list of symbols from <filename> and marks them global.">,
+      MetaVarName<"filename">;
+
 defm keep_global_symbol
     : Eq<"keep-global-symbol",
          "Convert all symbols except <symbol> to local. May be repeated to "
@@ -156,6 +167,11 @@ defm keep_global_symbols
 
 defm weaken_symbol : Eq<"weaken-symbol", "Mark <symbol> as weak">,
                      MetaVarName<"symbol">;
+defm weaken_symbols
+    : Eq<"weaken-symbols",
+         "Reads a list of symbols from <filename> and marks them weak.">,
+      MetaVarName<"filename">;
+
 def W : JoinedOrSeparate<["-"], "W">, Alias<weaken_symbol>;
 def weaken : Flag<["-", "--"], "weaken">,
              HelpText<"Mark all global symbols as weak">;
@@ -171,6 +187,11 @@ def discard_all
 def x : Flag<["-"], "x">, Alias<discard_all>;
 defm strip_symbol : Eq<"strip-symbol", "Remove symbol <symbol>">,
                     MetaVarName<"symbol">;
+defm strip_symbols
+    : Eq<"strip-symbols",
+         "Reads a list of symbols from <filename> and removes them.">,
+      MetaVarName<"filename">;
+
 def N : JoinedOrSeparate<["-"], "N">, Alias<strip_symbol>;
 defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol <symbol>">,
                    MetaVarName<"symbol">;