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