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