diff options
Diffstat (limited to 'llvm/test')
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:  | 

