xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/keep-symbol.test (revision 1562e4552cd1b3d2eadd956c966f8a60e928b8ca)
1# RUN: yaml2obj %s -o %t
2# RUN: llvm-objcopy --discard-all -K foo --keep-symbol bar %t %t2
3# RUN: llvm-objcopy -K foo -N foo -N bar --keep-symbol bar -N baz %t %t3
4# RUN: llvm-objcopy --discard-all --regex -K '^ba.*' %t %t4
5# RUN: llvm-readobj --symbols %t2 | FileCheck %s
6# RUN: llvm-readobj --symbols %t3 | FileCheck %s
7# RUN: llvm-readobj --symbols %t4 | FileCheck %s --check-prefix=REGEX
8
9# RUN: echo 'foo' > %t.symbols
10# RUN: echo 'bar' >> %t.symbols
11# RUN: echo '.* # no regex without --regex' >> %t.symbols
12# RUN: llvm-objcopy --discard-all --keep-symbols %t.symbols %t %t5
13# RUN: llvm-objcopy -K foo -N foo -N bar --keep-symbols %t.symbols -N baz %t %t6
14# RUN: llvm-readobj --symbols %t5 | FileCheck %s
15# RUN: llvm-readobj --symbols %t6 | FileCheck %s
16
17# RUN: echo 'f.*' > %t.symbols.regex
18# RUN: echo '.*ar' >> %t.symbols.regex
19# RUN: llvm-objcopy --discard-all --keep-symbols %t.symbols.regex --regex %t %t7
20# RUN: cmp %t6 %t7
21
22!ELF
23FileHeader:
24  Class:           ELFCLASS64
25  Data:            ELFDATA2LSB
26  Type:            ET_REL
27  Machine:         EM_X86_64
28Sections:
29  - Name:            .text
30    Type:            SHT_PROGBITS
31    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
32    Address:         0x1000
33    AddressAlign:    0x0000000000000010
34    Size:            64
35Symbols:
36  - Name:     foo
37    Type:     STT_FUNC
38    Section:  .text
39    Value:    0x1000
40    Size:     8
41  - Name:     bar
42    Type:     STT_FUNC
43    Section:  .text
44    Value:    0x1008
45    Size:     8
46  - Name:     baz
47    Type:     STT_FUNC
48    Section:  .text
49    Value:    0x1010
50    Size:     8
51
52#CHECK: Symbols [
53#CHECK-NEXT:  Symbol {
54#CHECK-NEXT:    Name:
55#CHECK-NEXT:    Value: 0x0
56#CHECK-NEXT:    Size: 0
57#CHECK-NEXT:    Binding: Local
58#CHECK-NEXT:    Type: None
59#CHECK-NEXT:    Other: 0
60#CHECK-NEXT:    Section: Undefined
61#CHECK-NEXT:  }
62#CHECK-NEXT:  Symbol {
63#CHECK-NEXT:    Name: foo
64#CHECK-NEXT:    Value: 0x1000
65#CHECK-NEXT:    Size: 8
66#CHECK-NEXT:    Binding: Local
67#CHECK-NEXT:    Type: Function
68#CHECK-NEXT:    Other: 0
69#CHECK-NEXT:    Section: .text
70#CHECK-NEXT:  }
71#CHECK-NEXT:  Symbol {
72#CHECK-NEXT:    Name: bar
73#CHECK-NEXT:    Value: 0x1008
74#CHECK-NEXT:    Size: 8
75#CHECK-NEXT:    Binding: Local
76#CHECK-NEXT:    Type: Function
77#CHECK-NEXT:    Other: 0
78#CHECK-NEXT:    Section: .text
79#CHECK-NEXT:  }
80#CHECK-NEXT:]
81
82#REGEX: Symbols [
83#REGEX-NOT: foo
84#REGEX: Name: bar
85#REGEX: Name: baz
86#REGEX: ]
87