diff options
| author | Martin Storsjo <martin@martin.st> | 2019-01-19 19:42:35 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2019-01-19 19:42:35 +0000 |
| commit | f9e1434ef43e96dcb868d68fa1166a3a0531caa6 (patch) | |
| tree | 1ba6f431da111afa6c3c642f026d431c56ce1e8f /llvm/test/tools | |
| parent | e9f62f62ce436067f3ae2be479f04bfc9ba8b53b (diff) | |
| download | bcm5719-llvm-f9e1434ef43e96dcb868d68fa1166a3a0531caa6.tar.gz bcm5719-llvm-f9e1434ef43e96dcb868d68fa1166a3a0531caa6.zip | |
[llvm-objcopy] [COFF] Add support for removing sections
Differential Revision: https://reviews.llvm.org/D56683
llvm-svn: 351660
Diffstat (limited to 'llvm/test/tools')
| -rw-r--r-- | llvm/test/tools/llvm-objcopy/COFF/remove-section.test | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/COFF/remove-section.test b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test new file mode 100644 index 00000000000..b3dfb0b98cb --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/COFF/remove-section.test @@ -0,0 +1,210 @@ +# RUN: yaml2obj %s > %t.in.o +# +# RUN: llvm-objdump -section-headers %t.in.o | FileCheck %s --check-prefixes=SECTIONS-PRE +# RUN: llvm-objdump -t %t.in.o | FileCheck %s --check-prefixes=SYMBOLS-PRE +# +# RUN: llvm-objcopy -R .bss %t.in.o %t.remove-bss.o +# RUN: llvm-objdump -section-headers %t.remove-bss.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-BSS +# RUN: llvm-objdump -t %t.remove-bss.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-BSS +# +# RUN: llvm-objcopy --remove-section .bss %t.in.o %t.cmp.o +# RUN: cmp %t.remove-bss.o %t.cmp.o +# +# RUN: llvm-objcopy -R .text %t.in.o %t.remove-text.o +# RUN: llvm-objdump -section-headers %t.remove-text.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-TEXT +# RUN: llvm-objdump -t %t.remove-text.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-TEXT +# +# RUN: not llvm-objcopy -R .comdat %t.in.o %t.remove-comdat.o 2>&1 | FileCheck %s --check-prefix=ERROR-RELOC +# +# RUN: llvm-objcopy -R .text -R .comdat %t.in.o %t.remove-text-comdat.o +# RUN: llvm-objdump -section-headers %t.remove-text-comdat.o | FileCheck %s --check-prefix=SECTIONS-REMOVE-TEXT-COMDAT +# RUN: llvm-objdump -t %t.remove-text-comdat.o | FileCheck %s --check-prefix=SYMBOLS-REMOVE-TEXT-COMDAT +# +# +# SECTIONS-PRE: Sections: +# SECTIONS-PRE-NEXT: Idx Name +# SECTIONS-PRE-NEXT: 0 .text +# SECTIONS-PRE-NEXT: 1 .bss +# SECTIONS-PRE-NEXT: 2 .comdat +# SECTIONS-PRE-NEXT: 3 .associative +# SECTIONS-PRE-EMPTY: +# +# SYMBOLS-PRE: SYMBOL TABLE: +# SYMBOLS-PRE-NEXT: {{.*}}(sec -1){{.*}} @feat.00 +# SYMBOLS-PRE-NEXT: {{.*}}(sec 1){{.*}} .text +# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0 +# SYMBOLS-PRE-NEXT: {{.*}}(sec 2){{.*}} .bss +# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 2 comdat 0 +# SYMBOLS-PRE-NEXT: {{.*}}(sec 4){{.*}} .associative +# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 3 comdat 5 +# SYMBOLS-PRE-NEXT: {{.*}}(sec 3){{.*}} .comdat +# SYMBOLS-PRE-NEXT: AUX scnlen {{.*}} assoc 3 comdat 2 +# SYMBOLS-PRE-NEXT: {{.*}}(sec 3){{.*}} foo +# SYMBOLS-PRE-NEXT: {{.*}}(sec 1){{.*}} main +# SYMBOLS-PRE-EMPTY: +# +# +# Removing the .bss section removes one symbol and its aux symbol, +# and updates the section indices in symbols pointing to later +# symbols, including the aux section defintitions. +# +# Testing that the absolute symbol @feat.00 survives the section number +# mangling. +# +# SECTIONS-REMOVE-BSS: Sections: +# SECTIONS-REMOVE-BSS-NEXT: Idx Name +# SECTIONS-REMOVE-BSS-NEXT: 0 .text +# SECTIONS-REMOVE-BSS-NEXT: 1 .comdat +# SECTIONS-REMOVE-BSS-NEXT: 2 .associative +# SECTIONS-REMOVE-BSS-EMPTY: +# +# SYMBOLS-REMOVE-BSS: SYMBOL TABLE: +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec -1){{.*}} @feat.00 +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 1){{.*}} .text +# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0 +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 3){{.*}} .associative +# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 2 comdat 5 +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 2){{.*}} .comdat +# SYMBOLS-REMOVE-BSS-NEXT: AUX scnlen {{.*}} assoc 2 comdat 2 +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 2){{.*}} foo +# SYMBOLS-REMOVE-BSS-NEXT: {{.*}}(sec 1){{.*}} main +# SYMBOLS-REMOVE-BSS-EMPTY: +# +# +# Removing the .text section is ok and just removes the external symbol +# referring to it. +# +# SECTIONS-REMOVE-TEXT: Sections: +# SECTIONS-REMOVE-TEXT-NEXT: Idx Name +# SECTIONS-REMOVE-TEXT-NEXT: 0 .bss +# SECTIONS-REMOVE-TEXT-NEXT: 1 .comdat +# SECTIONS-REMOVE-TEXT-NEXT: 2 .associative +# SECTIONS-REMOVE-TEXT-EMPTY: +# +# SYMBOLS-REMOVE-TEXT: SYMBOL TABLE: +# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec -1){{.*}} @feat.00 +# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 1){{.*}} .bss +# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0 +# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 3){{.*}} .associative +# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 2 comdat 5 +# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 2){{.*}} .comdat +# SYMBOLS-REMOVE-TEXT-NEXT: AUX scnlen {{.*}} assoc 2 comdat 2 +# SYMBOLS-REMOVE-TEXT-NEXT: {{.*}}(sec 2){{.*}} foo +# SYMBOLS-REMOVE-TEXT-EMPTY: +# +# +# Removing the .comdat section fails, since the .text section has relocations +# against it. +# +# ERROR-RELOC: Relocation target foo ({{.*}}) not found +# +# +# Removing the .comdat section and .text (with a relocation against .comdat) +# works, as it also removes the .associative section transitively. +# +# SECTIONS-REMOVE-TEXT-COMDAT: Sections: +# SECTIONS-REMOVE-TEXT-COMDAT-NEXT: Idx Name +# SECTIONS-REMOVE-TEXT-COMDAT-NEXT: 0 .bss +# SECTIONS-REMOVE-TEXT-COMDAT-EMPTY: +# +# SYMBOLS-REMOVE-TEXT-COMDAT: SYMBOL TABLE: +# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: {{.*}}(sec -1){{.*}} @feat.00 +# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: {{.*}}(sec 1){{.*}} .bss +# SYMBOLS-REMOVE-TEXT-COMDAT-NEXT: AUX scnlen {{.*}} assoc 1 comdat 0 +# SYMBOLS-REMOVE-TEXT-COMDAT-EMPTY: + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ ] + Alignment: 4 + SectionData: 488B0500000000C3 + Relocations: + - VirtualAddress: 3 + SymbolName: foo + Type: IMAGE_REL_AMD64_REL32 + - Name: .bss + Characteristics: [ ] + Alignment: 4 + SectionData: '' + - Name: .comdat + Characteristics: [ IMAGE_SCN_LNK_COMDAT ] + Alignment: 1 + SectionData: '2A000000' + - Name: .associative + Characteristics: [ IMAGE_SCN_LNK_COMDAT ] + Alignment: 1 + SectionData: '0000000000000000' +symbols: + - Name: '@feat.00' + Value: 0 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 1 + NumberOfLinenumbers: 0 + CheckSum: 583624169 + Number: 1 + - Name: .bss + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 0 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 2 + - Name: .associative + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 3 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: .comdat + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 4 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 3482275674 + Number: 3 + Selection: IMAGE_COMDAT_SELECT_ANY + - Name: foo + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: main + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... |

