Skip to content

Commit e08fe35

Browse files
committed
[llvm-objcopy] Add few file processing directives
Differential revision: https://reviews.llvm.org/D57877 llvm-svn: 353521
1 parent c98b26d commit e08fe35

File tree

6 files changed

+78
-5
lines changed

6 files changed

+78
-5
lines changed

llvm/test/tools/llvm-objcopy/ELF/globalize.test

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66
# RUN: llvm-readobj --symbols %t2 | FileCheck %s
77
# RUN: llvm-objcopy --regex --globalize-symbol='.*' %t %t3
88
# RUN: cmp %t2 %t3
9+
# RUN: echo " Global # global" > %t-list.txt
10+
# RUN: echo "Local" >> %t-list.txt
11+
# RUN: echo "Weak" >> %t-list.txt
12+
# RUN: echo "WeakUndef" >> %t-list.txt
13+
# RUN: echo " # comment " >> %t-list.txt
14+
# RUN: llvm-objcopy --globalize-symbols %t-list.txt %t %t4
15+
# RUN: cmp %t2 %t4
16+
# RUN: echo ".+ # .+ " > %t-list2.txt
17+
# RUN: llvm-objcopy --regex --globalize-symbols %t-list2.txt %t %t5
18+
# RUN: cmp %t2 %t5
919

1020
!ELF
1121
FileHeader:

llvm/test/tools/llvm-objcopy/ELF/localize.test

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@
99
# RUN: llvm-readobj --symbols %t2 | FileCheck %s
1010
# RUN: llvm-objcopy --regex --localize-symbol='.*' %t %t3
1111
# RUN: cmp %t2 %t3
12+
# RUN: echo " Global # comment " > %t-list.txt
13+
# RUN: echo "GlobalUndef" >> %t-list.txt
14+
# RUN: echo "Local" >> %t-list.txt
15+
# RUN: echo "Weak" >> %t-list.txt
16+
# RUN: echo "GlobalCommon" >> %t-list.txt
17+
# RUN: echo " # comment " >> %t-list.txt
18+
# RUN: llvm-objcopy --localize-symbols %t-list.txt %t %t4
19+
# RUN: cmp %t2 %t4
20+
# RUN: echo " .*al.* # Global + Local + GlobalCommon " > %t-list2.txt
21+
# RUN: echo "Weak" >> %t-list2.txt
22+
# RUN: llvm-objcopy --regex --localize-symbols %t-list2.txt %t %t5
23+
# RUN: cmp %t2 %t5
1224

1325
!ELF
1426
FileHeader:

llvm/test/tools/llvm-objcopy/ELF/strip-symbol.test

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55
# RUN: cmp %t2 %t3
66
# RUN: llvm-strip --regex --strip-symbol '^b.*' -N bar %t -o %t4
77
# RUN: cmp %t3 %t4
8+
# RUN: echo " bar # bar" > %t-list.txt
9+
# RUN: echo " baz # baz" >> %t-list.txt
10+
# RUN: echo " # no symbol" >> %t-list.txt
11+
# RUN: llvm-objcopy --strip-symbols %t-list.txt %t %t5
12+
# RUN: cmp %t3 %t5
13+
# RUN: echo "b.* # bar & baz" > %t-list2.txt
14+
# RUN: llvm-objcopy --regex --strip-symbols %t-list2.txt %t %t6
15+
# RUN: cmp %t3 %t6
816

917
!ELF
1018
FileHeader:

llvm/test/tools/llvm-objcopy/ELF/weaken.test

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33
# RUN: llvm-readobj --symbols %t2 | FileCheck %s
44
# RUN: llvm-objcopy --regex --weaken-symbol='.*' %t %t3
55
# RUN: cmp %t2 %t3
6+
# RUN: echo " Global # comment" > %t-list.txt
7+
# RUN: echo "Local" >> %t-list.txt
8+
# RUN: echo "Weak" >> %t-list.txt
9+
# RUN: echo " # comment" >> %t-list.txt
10+
# RUN: llvm-objcopy --weaken-symbols %t-list.txt %t %t4
11+
# RUN: cmp %t2 %t4
12+
# RUN: echo ".*al # Global + Local == .*al" > %t-list2.txt
13+
# RUN: echo "Weak # weak" >> %t-list2.txt
14+
# RUN: llvm-objcopy --regex --weaken-symbols %t-list2.txt %t %t5
15+
# RUN: cmp %t2 %t5
616

717
!ELF
818
FileHeader:

llvm/tools/llvm-objcopy/CopyConfig.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,9 @@ static const MachineInfo &getOutputFormatMachineInfo(StringRef Format) {
226226
return Iter->getValue();
227227
}
228228

229-
static void addGlobalSymbolsFromFile(std::vector<NameOrRegex> &Symbols,
230-
BumpPtrAllocator &Alloc,
231-
StringRef Filename, bool UseRegex) {
229+
static void addSymbolsFromFile(std::vector<NameOrRegex> &Symbols,
230+
BumpPtrAllocator &Alloc, StringRef Filename,
231+
bool UseRegex) {
232232
StringSaver Saver(Alloc);
233233
SmallVector<StringRef, 16> Lines;
234234
auto BufOrErr = MemoryBuffer::getFile(Filename);
@@ -445,17 +445,29 @@ DriverConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr) {
445445
InputArgs.hasArg(OBJCOPY_decompress_debug_sections);
446446
for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbol))
447447
Config.SymbolsToLocalize.emplace_back(Arg->getValue(), UseRegex);
448+
for (auto Arg : InputArgs.filtered(OBJCOPY_localize_symbols))
449+
addSymbolsFromFile(Config.SymbolsToLocalize, DC.Alloc, Arg->getValue(),
450+
UseRegex);
448451
for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbol))
449452
Config.SymbolsToKeepGlobal.emplace_back(Arg->getValue(), UseRegex);
450453
for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbols))
451-
addGlobalSymbolsFromFile(Config.SymbolsToKeepGlobal, DC.Alloc,
452-
Arg->getValue(), UseRegex);
454+
addSymbolsFromFile(Config.SymbolsToKeepGlobal, DC.Alloc, Arg->getValue(),
455+
UseRegex);
453456
for (auto Arg : InputArgs.filtered(OBJCOPY_globalize_symbol))
454457
Config.SymbolsToGlobalize.emplace_back(Arg->getValue(), UseRegex);
458+
for (auto Arg : InputArgs.filtered(OBJCOPY_globalize_symbols))
459+
addSymbolsFromFile(Config.SymbolsToGlobalize, DC.Alloc, Arg->getValue(),
460+
UseRegex);
455461
for (auto Arg : InputArgs.filtered(OBJCOPY_weaken_symbol))
456462
Config.SymbolsToWeaken.emplace_back(Arg->getValue(), UseRegex);
463+
for (auto Arg : InputArgs.filtered(OBJCOPY_weaken_symbols))
464+
addSymbolsFromFile(Config.SymbolsToWeaken, DC.Alloc, Arg->getValue(),
465+
UseRegex);
457466
for (auto Arg : InputArgs.filtered(OBJCOPY_strip_symbol))
458467
Config.SymbolsToRemove.emplace_back(Arg->getValue(), UseRegex);
468+
for (auto Arg : InputArgs.filtered(OBJCOPY_strip_symbols))
469+
addSymbolsFromFile(Config.SymbolsToRemove, DC.Alloc, Arg->getValue(),
470+
UseRegex);
459471
for (auto Arg : InputArgs.filtered(OBJCOPY_keep_symbol))
460472
Config.SymbolsToKeep.emplace_back(Arg->getValue(), UseRegex);
461473

llvm/tools/llvm-objcopy/ObjcopyOpts.td

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,21 @@ def localize_hidden
134134
"Mark all symbols that have hidden or internal visibility as local">;
135135
defm localize_symbol : Eq<"localize-symbol", "Mark <symbol> as local">,
136136
MetaVarName<"symbol">;
137+
defm localize_symbols
138+
: Eq<"localize-symbols",
139+
"Reads a list of symbols from <filename> and marks them local.">,
140+
MetaVarName<"filename">;
141+
137142
def L : JoinedOrSeparate<["-"], "L">, Alias<localize_symbol>;
138143

139144
defm globalize_symbol : Eq<"globalize-symbol", "Mark <symbol> as global">,
140145
MetaVarName<"symbol">;
146+
147+
defm globalize_symbols
148+
: Eq<"globalize-symbols",
149+
"Reads a list of symbols from <filename> and marks them global.">,
150+
MetaVarName<"filename">;
151+
141152
defm keep_global_symbol
142153
: Eq<"keep-global-symbol",
143154
"Convert all symbols except <symbol> to local. May be repeated to "
@@ -156,6 +167,11 @@ defm keep_global_symbols
156167

157168
defm weaken_symbol : Eq<"weaken-symbol", "Mark <symbol> as weak">,
158169
MetaVarName<"symbol">;
170+
defm weaken_symbols
171+
: Eq<"weaken-symbols",
172+
"Reads a list of symbols from <filename> and marks them weak.">,
173+
MetaVarName<"filename">;
174+
159175
def W : JoinedOrSeparate<["-"], "W">, Alias<weaken_symbol>;
160176
def weaken : Flag<["-", "--"], "weaken">,
161177
HelpText<"Mark all global symbols as weak">;
@@ -171,6 +187,11 @@ def discard_all
171187
def x : Flag<["-"], "x">, Alias<discard_all>;
172188
defm strip_symbol : Eq<"strip-symbol", "Remove symbol <symbol>">,
173189
MetaVarName<"symbol">;
190+
defm strip_symbols
191+
: Eq<"strip-symbols",
192+
"Reads a list of symbols from <filename> and removes them.">,
193+
MetaVarName<"filename">;
194+
174195
def N : JoinedOrSeparate<["-"], "N">, Alias<strip_symbol>;
175196
defm keep_symbol : Eq<"keep-symbol", "Do not remove symbol <symbol>">,
176197
MetaVarName<"symbol">;

0 commit comments

Comments
 (0)