| # 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 |
| ... |