xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/strip-unneeded.test (revision 1562e4552cd1b3d2eadd956c966f8a60e928b8ca)
155c81d42SFangrui Song# RUN: yaml2obj %s -o %t
26e4dc6f2SAlexander Shaposhnikov# RUN: cp %t %t1
36e4dc6f2SAlexander Shaposhnikov# RUN: llvm-objcopy --strip-unneeded %t %t2
4*1562e455SJames Henderson## Verify that llvm-objcopy has not modified the input.
56e4dc6f2SAlexander Shaposhnikov# RUN: cmp %t %t1
6298ea3f5SJordan Rupprecht# RUN: llvm-readobj --symbols %t2 | FileCheck %s
76e4dc6f2SAlexander Shaposhnikov
8*1562e455SJames Henderson## Verify that --keep-file-symbols works together with --strip-unneeded
9ec767b0bSEugene Leviant# RUN: llvm-objcopy --keep-file-symbols --strip-unneeded %t %t2b
10*1562e455SJames Henderson# RUN: llvm-readobj --symbols %t2b | FileCheck %s --check-prefixes=CHECK,FILESYM
11ec767b0bSEugene Leviant
122db10629SEugene Leviant# RUN: llvm-objcopy --strip-unneeded-symbol=bar \
132db10629SEugene Leviant# RUN:              %t %t3
142db10629SEugene Leviant# RUN: llvm-readobj --symbols %t3 | FileCheck %s --check-prefixes=STRIP-BAR,REMAIN
152db10629SEugene Leviant
162db10629SEugene Leviant# RUN: llvm-objcopy --regex --strip-unneeded-symbol='.*' %t %t4
172db10629SEugene Leviant# RUN: cmp %t2 %t4
182db10629SEugene Leviant
19*1562e455SJames Henderson## Verify that --strip-unneeded-symbols removes all unneeded symbols listed in
20*1562e455SJames Henderson## the file, but not those that aren't.
21*1562e455SJames Henderson## In this case, fileSymbol isn't mentioned (so isn't removed), barbaz is
22*1562e455SJames Henderson## mentioned, but isn't removed (because it is needed) and bar, foobar and
23*1562e455SJames Henderson## foobaz are mentioned and removed.
242db10629SEugene Leviant# RUN: echo " bar # bar " > %t.list.txt
252db10629SEugene Leviant# RUN: echo "foobar" >> %t.list.txt
262db10629SEugene Leviant# RUN: echo "foobaz" >> %t.list.txt
272db10629SEugene Leviant# RUN: echo " # comment " >> %t.list.txt
28*1562e455SJames Henderson# RUN: echo "barbaz" >> %t.list.txt
292db10629SEugene Leviant# RUN: llvm-objcopy --strip-unneeded-symbols %t.list.txt %t %t5
30ec767b0bSEugene Leviant# RUN: cmp %t2b %t5
312db10629SEugene Leviant
322db10629SEugene Leviant# RUN: echo " .* # * - remove all " > %t.list2.txt
332db10629SEugene Leviant# RUN: llvm-objcopy --regex --strip-unneeded-symbols %t.list2.txt %t %t6
342db10629SEugene Leviant# RUN: cmp %t2 %t6
352db10629SEugene Leviant
36*1562e455SJames Henderson## Verify that llvm-strip modifies the symbol table the same way.
376e4dc6f2SAlexander Shaposhnikov# RUN: llvm-strip --strip-unneeded %t
386e4dc6f2SAlexander Shaposhnikov# RUN: cmp %t %t2
396e4dc6f2SAlexander Shaposhnikov
406e4dc6f2SAlexander Shaposhnikov!ELF
416e4dc6f2SAlexander ShaposhnikovFileHeader:
426e4dc6f2SAlexander Shaposhnikov  Class:           ELFCLASS64
436e4dc6f2SAlexander Shaposhnikov  Data:            ELFDATA2LSB
446e4dc6f2SAlexander Shaposhnikov  Type:            ET_REL
456e4dc6f2SAlexander Shaposhnikov  Machine:         EM_X86_64
466e4dc6f2SAlexander ShaposhnikovSections:
476e4dc6f2SAlexander Shaposhnikov  - Name:            .text
486e4dc6f2SAlexander Shaposhnikov    Type:            SHT_PROGBITS
496e4dc6f2SAlexander Shaposhnikov    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
506e4dc6f2SAlexander Shaposhnikov    Address:         0x1000
516e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x0000000000000010
526e4dc6f2SAlexander Shaposhnikov    Size:            64
536e4dc6f2SAlexander Shaposhnikov  - Name:            .group
546e4dc6f2SAlexander Shaposhnikov    Type:            SHT_GROUP
556e4dc6f2SAlexander Shaposhnikov    Link:            .symtab
566e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x0000000000000004
576e4dc6f2SAlexander Shaposhnikov    Info:            barfoo
586e4dc6f2SAlexander Shaposhnikov    Members:
596e4dc6f2SAlexander Shaposhnikov      - SectionOrType:   GRP_COMDAT
606e4dc6f2SAlexander Shaposhnikov      - SectionOrType:   .text
616e4dc6f2SAlexander Shaposhnikov  - Name:            .rel.text
626e4dc6f2SAlexander Shaposhnikov    Type:            SHT_REL
636e4dc6f2SAlexander Shaposhnikov    Link:            .symtab
646e4dc6f2SAlexander Shaposhnikov    Info:            .text
656e4dc6f2SAlexander Shaposhnikov    Relocations:
666e4dc6f2SAlexander Shaposhnikov      - Offset: 0x1000
676e4dc6f2SAlexander Shaposhnikov        Symbol: foo
686e4dc6f2SAlexander Shaposhnikov        Type:   R_X86_64_PC32
696e4dc6f2SAlexander ShaposhnikovSymbols:
706e4dc6f2SAlexander Shaposhnikov  - Name:     foo
716e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
726e4dc6f2SAlexander Shaposhnikov    Section:  .text
736e4dc6f2SAlexander Shaposhnikov    Value:    0x1000
746e4dc6f2SAlexander Shaposhnikov    Size:     8
756e4dc6f2SAlexander Shaposhnikov  - Name:     bar
766e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
776e4dc6f2SAlexander Shaposhnikov    Size:     8
786e4dc6f2SAlexander Shaposhnikov    Section:  .text
796e4dc6f2SAlexander Shaposhnikov    Value:    0x1008
806e4dc6f2SAlexander Shaposhnikov  - Name:     barfoo
816e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
826e4dc6f2SAlexander Shaposhnikov    Size:     8
836e4dc6f2SAlexander Shaposhnikov    Section:  .text
846e4dc6f2SAlexander Shaposhnikov    Value:    0x1010
856e4dc6f2SAlexander Shaposhnikov  - Name:     fileSymbol
866e4dc6f2SAlexander Shaposhnikov    Type:     STT_FILE
87*1562e455SJames Henderson    Index:    SHN_ABS
886e4dc6f2SAlexander Shaposhnikov  - Name:     sectionSymbol
896e4dc6f2SAlexander Shaposhnikov    Type:     STT_SECTION
906e4dc6f2SAlexander Shaposhnikov  - Name:     foobar
916e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
926da44ad7SGeorge Rimar    Binding:  STB_GLOBAL
936e4dc6f2SAlexander Shaposhnikov  - Name:     barbaz
946e4dc6f2SAlexander Shaposhnikov    Type:     STT_FUNC
956e4dc6f2SAlexander Shaposhnikov    Size:     8
966e4dc6f2SAlexander Shaposhnikov    Section:  .text
976e4dc6f2SAlexander Shaposhnikov    Value:    0x1020
986da44ad7SGeorge Rimar    Binding:  STB_GLOBAL
996da44ad7SGeorge Rimar  - Name:     baz
1006da44ad7SGeorge Rimar    Type:     STT_FUNC
1016da44ad7SGeorge Rimar    Size:     8
1026da44ad7SGeorge Rimar    Section:  .text
1036da44ad7SGeorge Rimar    Value:    0x1018
1046da44ad7SGeorge Rimar    Binding:  STB_WEAK
1056da44ad7SGeorge Rimar  - Name:     foobaz
1066da44ad7SGeorge Rimar    Type:     STT_FUNC
1076da44ad7SGeorge Rimar    Binding:  STB_WEAK
1086e4dc6f2SAlexander Shaposhnikov
1096e4dc6f2SAlexander Shaposhnikov#CHECK: Symbols [
1106e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1116e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name:
1126e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x0
1136e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 0
1146e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
1156e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: None
1166e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1176e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: Undefined
1186e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1196e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1206e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: foo
1216e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1000
1226e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
1236e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
1246e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
1256e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1266e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
1276e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1286e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1296e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: barfoo
1306e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1010
1316e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
1326e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
1336e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
1346e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1356e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
1366e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
137*1562e455SJames Henderson#FILESYM-NEXT:Symbol {
138*1562e455SJames Henderson#FILESYM-NEXT:  Name: fileSymbol
139*1562e455SJames Henderson#FILESYM-NEXT:  Value: 0x0
140*1562e455SJames Henderson#FILESYM-NEXT:  Size: 0
141*1562e455SJames Henderson#FILESYM-NEXT:  Binding: Local
142*1562e455SJames Henderson#FILESYM-NEXT:  Type: File
143*1562e455SJames Henderson#FILESYM-NEXT:  Other: 0
144*1562e455SJames Henderson#FILESYM-NEXT:  Section: Absolute
145*1562e455SJames Henderson#FILESYM-NEXT:}
1466e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1476e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: sectionSymbol
1486e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x0
1496e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 0
1506e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Local
1516e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Section
1526e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1536e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: Undefined
1546e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1556e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1566e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: barbaz
1576e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1020
1586e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
1596e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Global
1606e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
1616e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1626e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
1636e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1646e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  Symbol {
1656e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Name: baz
1666e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Value: 0x1018
1676e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Size: 8
1686e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Binding: Weak
1696e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: Function
1706e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Other: 0
1716e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Section: .text
1726e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1736e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:]
1742db10629SEugene Leviant
175ec767b0bSEugene Leviant
1762db10629SEugene Leviant#STRIP-BAR-NOT: Name: bar ({{.*}})
1772db10629SEugene Leviant#REMAIN: Name: foobar
1782db10629SEugene Leviant#REMAIN: Name: foobaz
179