xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/skip-symbol.test (revision 4946cc37f4865b89fbebcfa0120183a11ae8d4ab)
1*4946cc37SIlia Kuklin## This test checks the functionality of options --skip-symbol and --skip-symbols.
2*4946cc37SIlia Kuklin# RUN: yaml2obj %s -o %t.o
3*4946cc37SIlia Kuklin# RUN: echo 'foo[2-3]' > %t.skip.regex
4*4946cc37SIlia Kuklin
5*4946cc37SIlia Kuklin## Check --skip-symbol functionality when changing symbol bindings.
6*4946cc37SIlia Kuklin# RUN: llvm-objcopy %t.o %t2.o --localize-hidden --skip-symbol=foo3
7*4946cc37SIlia Kuklin# RUN: llvm-readelf -s %t2.o | FileCheck %s --check-prefix=LH-SYM
8*4946cc37SIlia Kuklin# LH-SYM-DAG: LOCAL  HIDDEN      1 foo1
9*4946cc37SIlia Kuklin# LH-SYM-DAG: LOCAL  HIDDEN      1 foo2
10*4946cc37SIlia Kuklin# LH-SYM-DAG: GLOBAL HIDDEN      1 foo3
11*4946cc37SIlia Kuklin# LH-SYM-DAG: LOCAL  HIDDEN      1 foo4
12*4946cc37SIlia Kuklin# LH-SYM-DAG: LOCAL  HIDDEN      1 foo5
13*4946cc37SIlia Kuklin
14*4946cc37SIlia Kuklin## Check --skip-symbols functionality when changing symbol bindings.
15*4946cc37SIlia Kuklin# RUN: llvm-objcopy %t.o %t1.o --localize-hidden --skip-symbols=%t.skip.regex --regex
16*4946cc37SIlia Kuklin# RUN: llvm-readelf -s %t1.o | FileCheck %s --check-prefix=LH-SYMS
17*4946cc37SIlia Kuklin# LH-SYMS-DAG: LOCAL  HIDDEN      1 foo1
18*4946cc37SIlia Kuklin# LH-SYMS-DAG: GLOBAL HIDDEN      1 foo2
19*4946cc37SIlia Kuklin# LH-SYMS-DAG: GLOBAL HIDDEN      1 foo3
20*4946cc37SIlia Kuklin# LH-SYMS-DAG: LOCAL  HIDDEN      1 foo4
21*4946cc37SIlia Kuklin# LH-SYMS-DAG: LOCAL  HIDDEN      1 foo5
22*4946cc37SIlia Kuklin
23*4946cc37SIlia Kuklin## Check --skip-symbol functionality when changing symbol names.
24*4946cc37SIlia Kuklin# RUN: echo -e "foo1 bar1\nfoo2 bar2" > %t.renames.list
25*4946cc37SIlia Kuklin# RUN: llvm-objcopy %t.o %t4.o --redefine-syms=%t.renames.list \
26*4946cc37SIlia Kuklin# RUN:   --skip-symbol='fo*' --wildcard
27*4946cc37SIlia Kuklin# RUN: llvm-readelf -s %t4.o | FileCheck %s --check-prefix=RS-SYM
28*4946cc37SIlia Kuklin# RS-SYM-DAG: foo1
29*4946cc37SIlia Kuklin# RS-SYM-DAG: foo2
30*4946cc37SIlia Kuklin# RS-SYM-DAG: foo3
31*4946cc37SIlia Kuklin# RS-SYM-DAG: foo4
32*4946cc37SIlia Kuklin# RS-SYM-DAG: foo5
33*4946cc37SIlia Kuklin
34*4946cc37SIlia Kuklin## Check --skip-symbols functionality when changing symbol names.
35*4946cc37SIlia Kuklin# RUN: llvm-objcopy %t.o %t3.o --redefine-syms=%t.renames.list \
36*4946cc37SIlia Kuklin# RUN:   --skip-symbols=%t.skip.regex --regex
37*4946cc37SIlia Kuklin# RUN: llvm-readelf -s %t3.o | FileCheck %s --check-prefix=RS-SYMS
38*4946cc37SIlia Kuklin# RS-SYMS-DAG: bar1
39*4946cc37SIlia Kuklin# RS-SYMS-DAG: foo2
40*4946cc37SIlia Kuklin# RS-SYMS-DAG: foo3
41*4946cc37SIlia Kuklin# RS-SYMS-DAG: foo4
42*4946cc37SIlia Kuklin# RS-SYMS-DAG: foo5
43*4946cc37SIlia Kuklin
44*4946cc37SIlia Kuklin## Check the functionality when using skip options multiple times.
45*4946cc37SIlia Kuklin# RUN: echo "foo3" > %t.symbol0.list
46*4946cc37SIlia Kuklin# RUN: echo "foo4" > %t.symbol1.list
47*4946cc37SIlia Kuklin# RUN: llvm-objcopy %t.o %t5.o --set-symbol-visibility='foo*'=internal --wildcard \
48*4946cc37SIlia Kuklin# RUN:   --skip-symbol=foo1 --skip-symbol=foo2 \
49*4946cc37SIlia Kuklin# RUN:   --skip-symbols=%t.symbol0.list --skip-symbols=%t.symbol1.list
50*4946cc37SIlia Kuklin# RUN: llvm-readelf -s %t5.o | FileCheck %s --check-prefix=BOTH
51*4946cc37SIlia Kuklin# BOTH-DAG: GLOBAL HIDDEN      1 foo1
52*4946cc37SIlia Kuklin# BOTH-DAG: GLOBAL HIDDEN      1 foo2
53*4946cc37SIlia Kuklin# BOTH-DAG: GLOBAL HIDDEN      1 foo3
54*4946cc37SIlia Kuklin# BOTH-DAG: GLOBAL HIDDEN      1 foo4
55*4946cc37SIlia Kuklin## Only foo5 is not skipped.
56*4946cc37SIlia Kuklin# BOTH-DAG: GLOBAL INTERNAL    1 foo5
57*4946cc37SIlia Kuklin
58*4946cc37SIlia Kuklin## Check that using an invalid symbol name regex generates an error.
59*4946cc37SIlia Kuklin# RUN: echo '*.' > %t.symbols.regex
60*4946cc37SIlia Kuklin# RUN: not llvm-objcopy %t.o --skip-symbols=%t.symbols.regex --regex 2>&1 | \
61*4946cc37SIlia Kuklin# RUN:   FileCheck %s --check-prefix=SYMBOL
62*4946cc37SIlia Kuklin# RUN: not llvm-objcopy %t.o --skip-symbol='*.' --regex 2>&1 | \
63*4946cc37SIlia Kuklin# RUN:   FileCheck %s --check-prefix=SYMBOL
64*4946cc37SIlia Kuklin# SYMBOL: error: cannot compile regular expression '*.': repetition-operator operand invalid
65*4946cc37SIlia Kuklin
66*4946cc37SIlia Kuklin## Check passing an invalid filename generates an error.
67*4946cc37SIlia Kuklin# RUN: not llvm-objcopy %t.o --skip-symbols=no_file 2>&1 | \
68*4946cc37SIlia Kuklin# RUN:   FileCheck %s --check-prefix=FILE -DMSG=%errc_ENOENT
69*4946cc37SIlia Kuklin# FILE: error: 'no_file': [[MSG]]
70*4946cc37SIlia Kuklin
71*4946cc37SIlia Kuklin!ELF
72*4946cc37SIlia KuklinFileHeader:
73*4946cc37SIlia Kuklin  Class:   ELFCLASS64
74*4946cc37SIlia Kuklin  Data:    ELFDATA2LSB
75*4946cc37SIlia Kuklin  Type:    ET_REL
76*4946cc37SIlia Kuklin  Machine: EM_X86_64
77*4946cc37SIlia KuklinSections:
78*4946cc37SIlia Kuklin  - Name: .text
79*4946cc37SIlia Kuklin    Type: SHT_PROGBITS
80*4946cc37SIlia KuklinSymbols:
81*4946cc37SIlia Kuklin  - Name:    foo1
82*4946cc37SIlia Kuklin    Section: .text
83*4946cc37SIlia Kuklin    Binding: STB_GLOBAL
84*4946cc37SIlia Kuklin    Other:   [ STV_HIDDEN ]
85*4946cc37SIlia Kuklin  - Name:    foo2
86*4946cc37SIlia Kuklin    Section: .text
87*4946cc37SIlia Kuklin    Binding: STB_GLOBAL
88*4946cc37SIlia Kuklin    Other:   [ STV_HIDDEN ]
89*4946cc37SIlia Kuklin  - Name:    foo3
90*4946cc37SIlia Kuklin    Section: .text
91*4946cc37SIlia Kuklin    Binding: STB_GLOBAL
92*4946cc37SIlia Kuklin    Other:   [ STV_HIDDEN ]
93*4946cc37SIlia Kuklin  - Name:    foo4
94*4946cc37SIlia Kuklin    Section: .text
95*4946cc37SIlia Kuklin    Binding: STB_GLOBAL
96*4946cc37SIlia Kuklin    Other:   [ STV_HIDDEN ]
97*4946cc37SIlia Kuklin  - Name:    foo5
98*4946cc37SIlia Kuklin    Section: .text
99*4946cc37SIlia Kuklin    Binding: STB_GLOBAL
100*4946cc37SIlia Kuklin    Other:   [ STV_HIDDEN ]
101