1# RUN: yaml2obj %s -o %t 2# Establish baseline objects for further checks. --discard-locals only discards 3# compiler-generated local symbols (starting with .L), --discard-all discards 4# all regular local symbols. 5# RUN: llvm-objcopy %t %t-discard-none 6# RUN: llvm-readobj --symbols %t-discard-none | FileCheck %s --check-prefixes=CHECK,LOCAL,COMPILER-LOCAL 7# RUN: llvm-objcopy --discard-all %t %t-discard-all 8# RUN: llvm-readobj --symbols %t-discard-all | FileCheck %s 9# RUN: llvm-objcopy --discard-locals %t %t-discard-locals 10# RUN: llvm-readobj --symbols %t-discard-locals | FileCheck %s --check-prefixes=CHECK,LOCAL 11 12# When mixing --discard-all and --discard-locals, the last one wins. 13# RUN: llvm-objcopy --discard-all --discard-locals %t %t.1.o 14# RUN: cmp %t.1.o %t-discard-locals 15# RUN: llvm-objcopy --discard-locals --discard-all %t %t.2.o 16# RUN: cmp %t.2.o %t-discard-all 17# RUN: llvm-objcopy -x -X %t %t.3.o 18# RUN: cmp %t.3.o %t-discard-locals 19# RUN: llvm-objcopy -X -x %t %t.4.o 20# RUN: cmp %t.4.o %t-discard-all 21# RUN: llvm-objcopy -x -X -x -X %t %t.5.o 22# RUN: cmp %t.5.o %t-discard-locals 23# RUN: llvm-objcopy -X -x -X -x %t %t.6.o 24# RUN: cmp %t.6.o %t-discard-all 25# RUN: llvm-objcopy -X -x -X -x --discard-locals %t %t.7.o 26# RUN: cmp %t.7.o %t-discard-locals 27# RUN: llvm-objcopy -X -x -X -x --discard-all %t %t.8.o 28# RUN: cmp %t.8.o %t-discard-all 29 30# llvm-strip works in the same way. 31# RUN: llvm-strip --discard-all --discard-locals %t -o %t.9.o 32# RUN: cmp %t.9.o %t-discard-locals 33# RUN: llvm-strip --discard-locals --discard-all %t -o %t.10.o 34# RUN: cmp %t.10.o %t-discard-all 35# RUN: llvm-strip -x -X %t -o %t.11.o 36# RUN: cmp %t.11.o %t-discard-locals 37# RUN: llvm-strip -X -x %t -o %t.12.o 38# RUN: cmp %t.12.o %t-discard-all 39# RUN: llvm-strip -x -X -x -X %t -o %t.13.o 40# RUN: cmp %t.13.o %t-discard-locals 41# RUN: llvm-strip -X -x -X -x %t -o %t.14.o 42# RUN: cmp %t.14.o %t-discard-all 43# RUN: llvm-strip -X -x -X -x --discard-locals %t -o %t.15.o 44# RUN: cmp %t.15.o %t-discard-locals 45# RUN: llvm-strip -X -x -X -x --discard-all %t -o %t.16.o 46# RUN: cmp %t.16.o %t-discard-all 47 48!ELF 49FileHeader: 50 Class: ELFCLASS64 51 Data: ELFDATA2LSB 52 Type: ET_REL 53 Machine: EM_X86_64 54Sections: 55 - Name: .text 56 Type: SHT_PROGBITS 57Symbols: 58 - Name: Local 59 Type: STT_FUNC 60 Section: .text 61 - Name: .L.str 62 Type: STT_OBJECT 63 Section: .text 64 - Name: Global 65 Type: STT_FUNC 66 Section: .text 67 Binding: STB_GLOBAL 68 69# CHECK: Symbols [ 70# CHECK-NEXT: Symbol { 71# CHECK-NEXT: Name: 72# CHECK-NEXT: Value: 0x0 73# CHECK-NEXT: Size: 0 74# CHECK-NEXT: Binding: Local 75# CHECK-NEXT: Type: None 76# CHECK-NEXT: Other: 0 77# CHECK-NEXT: Section: Undefined 78# CHECK-NEXT: } 79# LOCAL-NEXT: Symbol { 80# LOCAL-NEXT: Name: Local 81# LOCAL-NEXT: Value: 82# LOCAL-NEXT: Size: 83# LOCAL-NEXT: Binding: Local 84# LOCAL-NEXT: Type: Function 85# LOCAL-NEXT: Other: 86# LOCAL-NEXT: Section: .text 87# LOCAL-NEXT: } 88# COMPILER-LOCAL-NEXT: Symbol { 89# COMPILER-LOCAL-NEXT: Name: .L.str 90# COMPILER-LOCAL-NEXT: Value: 91# COMPILER-LOCAL-NEXT: Size: 92# COMPILER-LOCAL-NEXT: Binding: Local 93# COMPILER-LOCAL-NEXT: Type: Object 94# COMPILER-LOCAL-NEXT: Other: 95# COMPILER-LOCAL-NEXT: Section: .text 96# COMPILER-LOCAL-NEXT: } 97# CHECK-NEXT: Symbol { 98# CHECK-NEXT: Name: Global 99# CHECK-NEXT: Value: 100# CHECK-NEXT: Size: 101# CHECK-NEXT: Binding: Global 102# CHECK-NEXT: Type: Function 103# CHECK-NEXT: Other: 104# CHECK-NEXT: Section: .text 105# CHECK-NEXT: } 106# CHECK-NEXT: ] 107