207 lines · plain
1## This test checks basic functionality of glob (or "shell wildcard") matching,2## as well as verifying all the relevant flags in llvm-objcopy and llvm-strip3## are configured correctly.4## For more detailed syntax tests, see wildcard-syntax.test.5 6# RUN: yaml2obj %s -o %t.o7 8## Check that --regex and --wildcard cannot be used together.9# RUN: not llvm-objcopy --regex --wildcard %t.o %t.err.o 2>&1 \10# RUN: | FileCheck %s --check-prefix=ERR11# RUN: not llvm-strip --regex --wildcard %t.o -o %t.err.o 2>&1 \12# RUN: | FileCheck %s --check-prefix=ERR13 14# ERR: error: --regex and --wildcard are incompatible15 16## Check that section removal flags default to glob matches.17 18## --keep-section:19# RUN: llvm-objcopy --strip-all --keep-section='.f*' %t.o %t.ksec.1.o20# RUN: llvm-readobj --sections %t.ksec.1.o \21# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,SEC,FOO-SEC22# RUN: llvm-strip --strip-all --keep-section='.f*' %t.o -o %t.ksec.2.o23# RUN: cmp %t.ksec.1.o %t.ksec.2.o24 25## --only-section:26# RUN: llvm-objcopy --strip-all --only-section='.f*' %t.o %t.osec.1.o27# RUN: llvm-readobj --sections %t.osec.1.o \28# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,SEC,FOO-SEC29 30## --remove-section:31# RUN: llvm-objcopy --strip-debug --remove-section='.s??tab' %t.o %t.rsec.1.o32# RUN: llvm-readobj --sections %t.rsec.1.o \33# RUN: | FileCheck %s --implicit-check-not=Name: \34# RUN: --check-prefixes=CHECK,SEC,FOO-SEC,BAR-SEC35# RUN: llvm-strip --strip-debug --remove-section='.s??tab' %t.o -o %t.rsec.2.o36# RUN: cmp %t.rsec.1.o %t.rsec.2.o37 38## Check that symbol removal options default to literal matches. Adding -w39## enables glob support for these options.40 41## --globalize-symbol:42# RUN: llvm-objcopy --globalize-symbol='*' %t.o %t.globsym.1.o43# RUN: llvm-readobj --symbols %t.globsym.1.o \44# RUN: | FileCheck %s --implicit-check-not=Name: \45# RUN: --check-prefixes=CHECK,LOCAL,FOO-SYM,BAR-SYM46 47# RUN: llvm-objcopy -w --globalize-symbol='*' %t.o %t.globsym.2.o48# RUN: llvm-readobj --symbols %t.globsym.2.o \49# RUN: | FileCheck %s --implicit-check-not=Name: \50# RUN: --check-prefixes=CHECK,GLOBAL,FOO-SYM,BAR-SYM51 52## --keep-symbol:53# RUN: llvm-objcopy --discard-all --keep-symbol='f*' %t.o %t.ksym.1.o54# RUN: llvm-readobj --symbols %t.ksym.1.o \55# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK56# RUN: llvm-strip --discard-all --keep-symbol='f*' %t.o -o %t.ksym.2.o57# RUN: cmp %t.ksym.1.o %t.ksym.2.o58 59# RUN: llvm-objcopy --discard-all -w --keep-symbol='f*' %t.o %t.ksym.3.o60# RUN: llvm-readobj --symbols %t.ksym.3.o \61# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,FOO-SYM62# RUN: llvm-strip --discard-all -w --keep-symbol='f*' %t.o -o %t.ksym.4.o63# RUN: cmp %t.ksym.3.o %t.ksym.4.o64 65## --keep-symbols:66# RUN: echo 'f*' > %t-fstar.txt67# RUN: llvm-objcopy --discard-all --keep-symbols=%t-fstar.txt %t.o %t.ksym.5.o68# RUN: cmp %t.ksym.5.o %t.ksym.1.o69 70# RUN: llvm-objcopy --discard-all -w --keep-symbols=%t-fstar.txt %t.o %t.ksym.6.o71# RUN: cmp %t.ksym.6.o %t.ksym.3.o72 73## --localize-symbol:74## Note: Use %t.globsym.2.o instead of %t.o since those symbols are global.75# RUN: llvm-objcopy --localize-symbol='*' %t.globsym.2.o %t.localsym.1.o76# RUN: llvm-readobj --symbols %t.localsym.1.o \77# RUN: | FileCheck %s --implicit-check-not=Name: \78# RUN: --check-prefixes=CHECK,GLOBAL,FOO-SYM,BAR-SYM79 80# RUN: llvm-objcopy -w --localize-symbol='*' %t.globsym.2.o %t.localsym.2.o81# RUN: llvm-readobj --symbols %t.localsym.2.o \82# RUN: | FileCheck %s --implicit-check-not=Name: \83# RUN: --check-prefixes=CHECK,LOCAL,FOO-SYM,BAR-SYM84 85## --localize-symbols:86# RUN: echo '*' > %t-star.txt87# RUN: llvm-objcopy --localize-symbols=%t-star.txt %t.globsym.2.o %t.localsym.3.o88# RUN: cmp %t.localsym.3.o %t.localsym.1.o89 90# RUN: llvm-objcopy -w --localize-symbols=%t-star.txt %t.globsym.2.o %t.localsym.4.o91# RUN: cmp %t.localsym.4.o %t.localsym.2.o92 93## --strip-symbol:94# RUN: llvm-objcopy --strip-symbol='f*' %t.o %t.stripsym.1.o95# RUN: llvm-readobj --symbols %t.stripsym.1.o \96# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,FOO-SYM,BAR-SYM97# RUN: llvm-strip --strip-symbol='f*' %t.o -o %t.stripsym.2.o98# RUN: cmp %t.stripsym.1.o %t.stripsym.2.o99 100# RUN: llvm-objcopy -w --strip-symbol='f*' %t.o %t.stripsym.3.o101# RUN: llvm-readobj --symbols %t.stripsym.3.o \102# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,BAR-SYM103# RUN: llvm-strip -w --strip-symbol='f*' %t.o -o %t.stripsym.4.o104# RUN: cmp %t.stripsym.3.o %t.stripsym.4.o105 106## --strip-symbols:107# RUN: llvm-objcopy --strip-symbols=%t-fstar.txt %t.o %t.stripsym.5.o108# RUN: cmp %t.stripsym.5.o %t.stripsym.1.o109 110# RUN: llvm-objcopy -w --strip-symbols=%t-fstar.txt %t.o %t.stripsym.6.o111# RUN: cmp %t.stripsym.6.o %t.stripsym.3.o112 113## --strip-unneeded-symbol:114# RUN: llvm-objcopy --strip-unneeded-symbol='f*' %t.o %t.stripunsym.1.o115# RUN: llvm-readobj --symbols %t.stripunsym.1.o \116# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,FOO-SYM,BAR-SYM117 118# RUN: llvm-objcopy -w --strip-unneeded-symbol='f*' %t.o %t.stripunsym.2.o119# RUN: llvm-readobj --symbols %t.stripunsym.2.o \120# RUN: | FileCheck %s --implicit-check-not=Name: --check-prefixes=CHECK,BAR-SYM121 122## --strip-unneded-symbols:123# RUN: llvm-objcopy --strip-unneeded-symbols=%t-fstar.txt %t.o %t.stripunsym.3.o124# RUN: cmp %t.stripunsym.3.o %t.stripunsym.1.o125 126# RUN: llvm-objcopy -w --strip-unneeded-symbols=%t-fstar.txt %t.o %t.stripunsym.4.o127# RUN: cmp %t.stripunsym.4.o %t.stripunsym.2.o128 129## --weaken-symbol:130## Note: Use %t.globsym.2.o instead of %t.o since those symbols are global.131# RUN: llvm-objcopy --weaken-symbol='*' %t.globsym.2.o %t.weaksym.1.o132# RUN: llvm-readobj --symbols %t.weaksym.1.o \133# RUN: | FileCheck %s --implicit-check-not=Name: \134# RUN: --check-prefixes=CHECK,GLOBAL,FOO-SYM,BAR-SYM135 136# RUN: llvm-objcopy -w --weaken-symbol='*' %t.globsym.2.o %t.weaksym.2.o137# RUN: llvm-readobj --symbols %t.weaksym.2.o \138# RUN: | FileCheck %s --implicit-check-not=Name: \139# RUN: --check-prefixes=CHECK,WEAK,FOO-SYM,BAR-SYM140 141## --weaken-symbols:142# RUN: llvm-objcopy --weaken-symbols=%t-star.txt %t.globsym.2.o %t.weaksym.3.o143# RUN: cmp %t.weaksym.3.o %t.weaksym.1.o144 145# RUN: llvm-objcopy -w --weaken-symbols=%t-star.txt %t.globsym.2.o %t.weaksym.4.o146# RUN: cmp %t.weaksym.4.o %t.weaksym.2.o147 148## --keep-global-symbol:149## Note: Use %t.globsym.2.o instead of %t.o since those symbols are global.150# RUN: llvm-objcopy --keep-global-symbol='*' %t.globsym.2.o %t.keepgsym.1.o151# RUN: llvm-readobj --symbols %t.keepgsym.1.o \152# RUN: | FileCheck %s --implicit-check-not=Name: \153# RUN: --check-prefixes=CHECK,LOCAL,FOO-SYM,BAR-SYM154 155# RUN: llvm-objcopy -w --keep-global-symbol='*' %t.globsym.2.o %t.keepgsym.2.o156# RUN: llvm-readobj --symbols %t.keepgsym.2.o \157# RUN: | FileCheck %s --implicit-check-not=Name: \158# RUN: --check-prefixes=CHECK,GLOBAL,FOO-SYM,BAR-SYM159 160## --keep-global-symbols:161# RUN: llvm-objcopy --keep-global-symbols=%t-star.txt %t.globsym.2.o %t.keepgsym.3.o162# RUN: cmp %t.keepgsym.3.o %t.keepgsym.1.o163 164# RUN: llvm-objcopy -w --keep-global-symbols=%t-star.txt %t.globsym.2.o %t.keepgsym.4.o165# RUN: cmp %t.keepgsym.4.o %t.keepgsym.2.o166 167## Check that -w is accepted as an alias for --wildcard.168# RUN: llvm-objcopy --wildcard --keep-global-symbol='*' %t.globsym.2.o %t.keepgsym.5.o169# RUN: cmp %t.keepgsym.2.o %t.keepgsym.5.o170 171# CHECK: LoadName:172# CHECK: Name: (0)173 174# FOO-SEC: Name: .foo175 176# FOO-SYM: Name: foo177# GLOBAL: Binding: Global178# WEAK: Binding: Weak179# LOCAL: Binding: Local180 181# BAR-SEC: Name: .bar182# BAR-SYM: Name: bar183# GLOBAL: Binding: Global184# WEAK: Binding: Weak185# LOCAL: Binding: Local186 187# SEC: Name: .shstrtab188 189!ELF190FileHeader:191 Class: ELFCLASS64192 Data: ELFDATA2LSB193 Type: ET_REL194 Machine: EM_X86_64195Sections:196 - Name: .foo197 Type: SHT_PROGBITS198 - Name: .bar199 Type: SHT_PROGBITS200Symbols:201 - Name: foo202 Type: STT_FUNC203 Section: .foo204 - Name: bar205 Type: STT_FUNC206 Section: .foo207