# RUN: yaml2obj %s -o %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 ...