diff options
| author | Martin Storsjo <martin@martin.st> | 2019-01-10 21:28:24 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2019-01-10 21:28:24 +0000 |
| commit | 10b7296484d54b53e65957732dcceece8ca81690 (patch) | |
| tree | 9056ce0a7e6e3281a816158635c1538b50a5caea /llvm/test/tools | |
| parent | 25116708c4e060e4777faa3f17027f8f3b7321e9 (diff) | |
| download | bcm5719-llvm-10b7296484d54b53e65957732dcceece8ca81690.tar.gz bcm5719-llvm-10b7296484d54b53e65957732dcceece8ca81690.zip | |
[llvm-objcopy] [COFF] Add support for removing symbols
Differential Revision: https://reviews.llvm.org/D55881
llvm-svn: 350893
Diffstat (limited to 'llvm/test/tools')
3 files changed, 90 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/COFF/Inputs/strip-symbols.yaml b/llvm/test/tools/llvm-objcopy/COFF/Inputs/strip-symbols.yaml new file mode 100644 index 00000000000..1d652691198 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/COFF/Inputs/strip-symbols.yaml @@ -0,0 +1,53 @@ +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ ] + Alignment: 4 + SectionData: 488B0500000000488B0500000000488B0500000000 + Relocations: + - VirtualAddress: 3 + SymbolTableIndex: 0 + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 10 + SymbolTableIndex: 1 + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 17 + SymbolName: foo + Type: IMAGE_REL_AMD64_REL32 + - Name: .rdata + Characteristics: [ ] + Alignment: 1 + SectionData: '00' + - Name: .rdata + Characteristics: [ ] + Alignment: 1 + SectionData: '01' +symbols: + - Name: .rdata + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .rdata + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: mainfunc + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: foo + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-reloc-symbol.test b/llvm/test/tools/llvm-objcopy/COFF/strip-reloc-symbol.test new file mode 100644 index 00000000000..50740d9ee01 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/COFF/strip-reloc-symbol.test @@ -0,0 +1,5 @@ +# RUN: yaml2obj %p/Inputs/strip-symbols.yaml > %t.o +# RUN: not llvm-objcopy -N foo %t.o 2>&1 | FileCheck %s --check-prefix=ERROR +# RUN: not llvm-objcopy --strip-symbol foo %t.o 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR: error: '{{.*}}/strip-reloc-symbol.test.tmp.o': not stripping symbol 'foo' because it is named in a relocation. diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-symbol.test b/llvm/test/tools/llvm-objcopy/COFF/strip-symbol.test new file mode 100644 index 00000000000..5355b22328a --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/COFF/strip-symbol.test @@ -0,0 +1,32 @@ +# RUN: yaml2obj %p/Inputs/strip-symbols.yaml > %t.in.o + +# RUN: llvm-readobj -relocations %t.in.o | FileCheck %s --check-prefixes=RELOCS,RELOCS-PRE +# RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS,SYMBOLS-PRE + +# RUN: llvm-objcopy -N mainfunc %t.in.o %t.out.o +# RUN: llvm-readobj -relocations %t.out.o | FileCheck %s --check-prefixes=RELOCS,RELOCS-POST +# RUN: llvm-objdump -t %t.out.o | FileCheck %s --check-prefix=SYMBOLS + +# RUN: llvm-objcopy --strip-symbol mainfunc %t.in.o %t.out.o +# RUN: llvm-readobj -relocations %t.out.o | FileCheck %s --check-prefixes=RELOCS,RELOCS-POST +# RUN: llvm-objdump -t %t.out.o | FileCheck %s --check-prefix=SYMBOLS + +# Explicitly listing the relocations for the input as well, to show +# that the symbol index of the symbol foo is updated in the relocations, +# while keeping relocations to two distinct .rdata symbols separate. + +# RELOCS: Relocations [ +# RELOCS-NEXT: Section (1) .text { +# RELOCS-NEXT: 0x3 IMAGE_REL_AMD64_REL32 .rdata (0) +# RELOCS-NEXT: 0xA IMAGE_REL_AMD64_REL32 .rdata (1) +# RELOCS-PRE-NEXT: 0x11 IMAGE_REL_AMD64_REL32 foo (3) +# RELOCS-POST-NEXT: 0x11 IMAGE_REL_AMD64_REL32 foo (2) +# RELOCS-NEXT: } +# RELOCS-NEXT: ] + +# SYMBOLS: SYMBOL TABLE: +# SYMBOLS-NEXT: .rdata +# SYMBOLS-NEXT: .rdata +# SYMBOLS-PRE-NEXT: mainfunc +# SYMBOLS-NEXT: foo +# SYMBOLS-EMPTY: |

