# RUN: yaml2obj %s -o %t # Establish baseline objects for further checks. --discard-locals only discards # compiler-generated local symbols (starting with .L), --discard-all discards # all regular local symbols. # RUN: llvm-objcopy %t %t-discard-none # RUN: llvm-readobj --symbols %t-discard-none | FileCheck %s --check-prefixes=CHECK,LOCAL,COMPILER-LOCAL # RUN: llvm-objcopy --discard-all %t %t-discard-all # RUN: llvm-readobj --symbols %t-discard-all | FileCheck %s # RUN: llvm-objcopy --discard-locals %t %t-discard-locals # RUN: llvm-readobj --symbols %t-discard-locals | FileCheck %s --check-prefixes=CHECK,LOCAL # When mixing --discard-all and --discard-locals, the last one wins. # RUN: llvm-objcopy --discard-all --discard-locals %t %t.1.o # RUN: cmp %t.1.o %t-discard-locals # RUN: llvm-objcopy --discard-locals --discard-all %t %t.2.o # RUN: cmp %t.2.o %t-discard-all # RUN: llvm-objcopy -x -X %t %t.3.o # RUN: cmp %t.3.o %t-discard-locals # RUN: llvm-objcopy -X -x %t %t.4.o # RUN: cmp %t.4.o %t-discard-all # RUN: llvm-objcopy -x -X -x -X %t %t.5.o # RUN: cmp %t.5.o %t-discard-locals # RUN: llvm-objcopy -X -x -X -x %t %t.6.o # RUN: cmp %t.6.o %t-discard-all # RUN: llvm-objcopy -X -x -X -x --discard-locals %t %t.7.o # RUN: cmp %t.7.o %t-discard-locals # RUN: llvm-objcopy -X -x -X -x --discard-all %t %t.8.o # RUN: cmp %t.8.o %t-discard-all # llvm-strip works in the same way. # RUN: llvm-strip --discard-all --discard-locals %t -o %t.9.o # RUN: cmp %t.9.o %t-discard-locals # RUN: llvm-strip --discard-locals --discard-all %t -o %t.10.o # RUN: cmp %t.10.o %t-discard-all # RUN: llvm-strip -x -X %t -o %t.11.o # RUN: cmp %t.11.o %t-discard-locals # RUN: llvm-strip -X -x %t -o %t.12.o # RUN: cmp %t.12.o %t-discard-all # RUN: llvm-strip -x -X -x -X %t -o %t.13.o # RUN: cmp %t.13.o %t-discard-locals # RUN: llvm-strip -X -x -X -x %t -o %t.14.o # RUN: cmp %t.14.o %t-discard-all # RUN: llvm-strip -X -x -X -x --discard-locals %t -o %t.15.o # RUN: cmp %t.15.o %t-discard-locals # RUN: llvm-strip -X -x -X -x --discard-all %t -o %t.16.o # RUN: cmp %t.16.o %t-discard-all !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .text Type: SHT_PROGBITS Symbols: - Name: Local Type: STT_FUNC Section: .text - Name: .L.str Type: STT_OBJECT Section: .text - Name: Global Type: STT_FUNC Section: .text Binding: STB_GLOBAL # CHECK: Symbols [ # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: # CHECK-NEXT: Value: 0x0 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Binding: Local # CHECK-NEXT: Type: None # CHECK-NEXT: Other: 0 # CHECK-NEXT: Section: Undefined # CHECK-NEXT: } # LOCAL-NEXT: Symbol { # LOCAL-NEXT: Name: Local # LOCAL-NEXT: Value: # LOCAL-NEXT: Size: # LOCAL-NEXT: Binding: Local # LOCAL-NEXT: Type: Function # LOCAL-NEXT: Other: # LOCAL-NEXT: Section: .text # LOCAL-NEXT: } # COMPILER-LOCAL-NEXT: Symbol { # COMPILER-LOCAL-NEXT: Name: .L.str # COMPILER-LOCAL-NEXT: Value: # COMPILER-LOCAL-NEXT: Size: # COMPILER-LOCAL-NEXT: Binding: Local # COMPILER-LOCAL-NEXT: Type: Object # COMPILER-LOCAL-NEXT: Other: # COMPILER-LOCAL-NEXT: Section: .text # COMPILER-LOCAL-NEXT: } # CHECK-NEXT: Symbol { # CHECK-NEXT: Name: Global # CHECK-NEXT: Value: # CHECK-NEXT: Size: # CHECK-NEXT: Binding: Global # CHECK-NEXT: Type: Function # CHECK-NEXT: Other: # CHECK-NEXT: Section: .text # CHECK-NEXT: } # CHECK-NEXT: ]