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