[llvm-objcopy] Add few file processing directives
Differential revision: https://reviews.llvm.org/D57877 llvm-svn: 353521
This commit is contained in:
parent
c98b26d326
commit
e08fe35d79
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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">;
|
||||
|
|
Loading…
Reference in New Issue