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