xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/keep-symbol.test (revision 1562e4552cd1b3d2eadd956c966f8a60e928b8ca)
155c81d42SFangrui Song# RUN: yaml2obj %s -o %t
26e4dc6f2SAlexander Shaposhnikov# RUN: llvm-objcopy --discard-all -K foo --keep-symbol bar %t %t2
36e4dc6f2SAlexander Shaposhnikov# RUN: llvm-objcopy -K foo -N foo -N bar --keep-symbol bar -N baz %t %t3
4f324f6dcSEugene Leviant# RUN: llvm-objcopy --discard-all --regex -K '^ba.*' %t %t4
5298ea3f5SJordan Rupprecht# RUN: llvm-readobj --symbols %t2 | FileCheck %s
6298ea3f5SJordan Rupprecht# RUN: llvm-readobj --symbols %t3 | FileCheck %s
7f324f6dcSEugene Leviant# RUN: llvm-readobj --symbols %t4 | FileCheck %s --check-prefix=REGEX
86e4dc6f2SAlexander Shaposhnikov
9f2baddb0SYi Kong# RUN: echo 'foo' > %t.symbols
10f2baddb0SYi Kong# RUN: echo 'bar' >> %t.symbols
11*1562e455SJames Henderson# RUN: echo '.* # no regex without --regex' >> %t.symbols
12f2baddb0SYi Kong# RUN: llvm-objcopy --discard-all --keep-symbols %t.symbols %t %t5
13f2baddb0SYi Kong# RUN: llvm-objcopy -K foo -N foo -N bar --keep-symbols %t.symbols -N baz %t %t6
14f2baddb0SYi Kong# RUN: llvm-readobj --symbols %t5 | FileCheck %s
15f2baddb0SYi Kong# RUN: llvm-readobj --symbols %t6 | FileCheck %s
16f2baddb0SYi Kong
17*1562e455SJames Henderson# RUN: echo 'f.*' > %t.symbols.regex
18*1562e455SJames Henderson# RUN: echo '.*ar' >> %t.symbols.regex
19*1562e455SJames Henderson# RUN: llvm-objcopy --discard-all --keep-symbols %t.symbols.regex --regex %t %t7
20*1562e455SJames Henderson# RUN: cmp %t6 %t7
21*1562e455SJames Henderson
226e4dc6f2SAlexander Shaposhnikov!ELF
236e4dc6f2SAlexander ShaposhnikovFileHeader:
246e4dc6f2SAlexander Shaposhnikov  Class:           ELFCLASS64
256e4dc6f2SAlexander Shaposhnikov  Data:            ELFDATA2LSB
266e4dc6f2SAlexander Shaposhnikov  Type:            ET_REL
276e4dc6f2SAlexander Shaposhnikov  Machine:         EM_X86_64
286e4dc6f2SAlexander ShaposhnikovSections:
296e4dc6f2SAlexander Shaposhnikov  - Name:            .text
306e4dc6f2SAlexander Shaposhnikov    Type:            SHT_PROGBITS
316e4dc6f2SAlexander Shaposhnikov    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
326e4dc6f2SAlexander Shaposhnikov    Address:         0x1000
336e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x0000000000000010
346e4dc6f2SAlexander Shaposhnikov    Size:            64
356e4dc6f2SAlexander ShaposhnikovSymbols:
366e4dc6f2SAlexander Shaposhnikov  - Name:     foo
376e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
386e4dc6f2SAlexander Shaposhnikov    Section:  .text
396e4dc6f2SAlexander Shaposhnikov    Value:    0x1000
406e4dc6f2SAlexander Shaposhnikov    Size:     8
416e4dc6f2SAlexander Shaposhnikov  - Name:     bar
426e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
436e4dc6f2SAlexander Shaposhnikov    Section:  .text
446e4dc6f2SAlexander Shaposhnikov    Value:    0x1008
456e4dc6f2SAlexander Shaposhnikov    Size:     8
466e4dc6f2SAlexander Shaposhnikov  - Name:     baz
476e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
486e4dc6f2SAlexander Shaposhnikov    Section:  .text
496e4dc6f2SAlexander Shaposhnikov    Value:    0x1010
506e4dc6f2SAlexander Shaposhnikov    Size:     8
516e4dc6f2SAlexander Shaposhnikov
526e4dc6f2SAlexander Shaposhnikov#CHECK: Symbols [
536e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
546e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name:
556e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x0
566e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 0
576e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
586e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: None
596e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
606e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: Undefined
616e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
626e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
636e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: foo
646e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1000
656e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
666e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
676e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
686e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
696e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
706e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
716e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
726e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: bar
736e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1008
746e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
756e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
766e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
776e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
786e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
796e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
806e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:]
81f324f6dcSEugene Leviant
82f324f6dcSEugene Leviant#REGEX: Symbols [
83f324f6dcSEugene Leviant#REGEX-NOT: foo
84f324f6dcSEugene Leviant#REGEX: Name: bar
85f324f6dcSEugene Leviant#REGEX: Name: baz
86f324f6dcSEugene Leviant#REGEX: ]
87