199 changes: 199 additions & 0 deletions llvm/test/tools/yaml2obj/XCOFF/aux-hdr-defaults.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
## Test that yaml2obj automatically sets fields of the auxiliary file header
## if not set explicitly.

## Case1: if text/data/bss/tdata/tbss/loader sections are set and corresponding
## fields in the aux header are omitted, we use the derived values of
## those sections to set corresponding fields.
# RUN: yaml2obj %s --docnum=1 -o %t1
# RUN: llvm-readobj --auxiliary-header %t1 | FileCheck %s --check-prefix=CASE1

# CASE1: AuxiliaryHeader {
# CASE1-NEXT: Magic: 0x10B
# CASE1-NEXT: Version: 0x1
# CASE1-NEXT: Size of .text section: 0x8
# CASE1-NEXT: Size of .data section: 0x8
# CASE1-NEXT: Size of .bss section: 0x8
# CASE1-NEXT: Entry point address: 0x0
# CASE1-NEXT: .text section start address: 0x4
# CASE1-NEXT: .data section start address: 0x10
# CASE1-NEXT: TOC anchor address: 0x0
# CASE1-NEXT: Section number of entryPoint: 0
# CASE1-NEXT: Section number of .text: 2
# CASE1-NEXT: Section number of .data: 4
# CASE1-NEXT: Section number of TOC: 0
# CASE1-NEXT: Section number of loader data: 12
# CASE1-NEXT: Section number of .bss: 6
# CASE1-NEXT: Maxium alignment of .text: 0x0
# CASE1-NEXT: Maxium alignment of .data: 0x0
# CASE1-NEXT: Module type: 0x0
# CASE1-NEXT: CPU type of objects: 0x0
# CASE1-NEXT: (Reserved): 0x0
# CASE1-NEXT: Maximum stack size: 0x0
# CASE1-NEXT: Maximum data size: 0x0
# CASE1-NEXT: Reserved for debugger: 0x0
# CASE1-NEXT: Text page size: 0x0
# CASE1-NEXT: Data page size: 0x0
# CASE1-NEXT: Stack page size: 0x0
# CASE1-NEXT: Flag: 0x0
# CASE1-NEXT: Alignment of thread-local storage: 0x0
# CASE1-NEXT: Section number for .tdata: 8
# CASE1-NEXT: Section number for .tbss: 10
# CASE1-NEXT: }

--- !XCOFF
FileHeader:
MagicNumber: [[MAGIC=0x1DF]]
AuxiliaryHeader:
Magic: 0x10B
Sections:
- Flags: [ STYP_PAD ]
SectionData: "1234"
## Set two sections with different contents for a given type to
## demonstrate that the values in the aux header depend on the first one.
- Flags: [ STYP_TEXT ]
SectionData: "1234000000"
- Flags: [ STYP_TEXT ]
SectionData: "1234"
- Flags: [ STYP_DATA ]
SectionData: "1234000000"
- Flags: [ STYP_DATA ]
SectionData: "1234"
- Flags: [ STYP_BSS ]
SectionData: "1234000000"
- Flags: [ STYP_BSS ]
SectionData: "1234"
- Flags: [ STYP_TDATA ]
SectionData: "1234000000"
- Flags: [ STYP_TDATA ]
SectionData: "1234"
- Flags: [ STYP_TBSS ]
SectionData: "1234000000"
- Flags: [ STYP_TBSS ]
SectionData: "1234"
- Flags: [ STYP_LOADER ]
SectionData: "1234000000"
- Flags: [ STYP_LOADER ]
SectionData: "1234"

## Case2: same as case1, except producing 64-bit output.
# RUN: yaml2obj %s --docnum=1 -DMAGIC=0x1F7 -o %t2
# RUN: llvm-readobj --auxiliary-header %t2 | FileCheck %s --check-prefix=CASE2

## Case2: same as case1, except it is 64-bit.
# RUN: yaml2obj %s --docnum=1 -DMAGIC=0x1F7 -o %t2
# RUN: llvm-readobj --auxiliary-header %t2 | FileCheck %s --check-prefix=CASE2

# CASE2: AuxiliaryHeader {
# CASE2-NEXT: Magic: 0x10B
# CASE2-NEXT: Version: 0x1
# CASE2-NEXT: Reserved for debugger: 0x0
# CASE2-NEXT: .text section start address: 0x2
# CASE2-NEXT: .data section start address: 0xE
# CASE2-NEXT: TOC anchor address: 0x0
# CASE2-NEXT: Section number of entryPoint: 0
# CASE2-NEXT: Section number of .text: 2
# CASE2-NEXT: Section number of .data: 4
# CASE2-NEXT: Section number of TOC: 0
# CASE2-NEXT: Section number of loader data: 12
# CASE2-NEXT: Section number of .bss: 6
# CASE2-NEXT: Maxium alignment of .text: 0x0
# CASE2-NEXT: Maxium alignment of .data: 0x0
# CASE2-NEXT: Module type: 0x0
# CASE2-NEXT: CPU type of objects: 0x0
# CASE2-NEXT: (Reserved): 0x0
# CASE2-NEXT: Text page size: 0x0
# CASE2-NEXT: Data page size: 0x0
# CASE2-NEXT: Stack page size: 0x0
# CASE2-NEXT: Flag: 0x0
# CASE2-NEXT: Alignment of thread-local storage: 0x0
# CASE2-NEXT: Size of .text section: 0x8
# CASE2-NEXT: Size of .data section: 0x8
# CASE2-NEXT: Size of .bss section: 0x8
# CASE2-NEXT: Entry point address: 0x0
# CASE2-NEXT: Maximum stack size: 0x0
# CASE2-NEXT: Maximum data size: 0x0
# CASE2-NEXT: Section number for .tdata: 8
# CASE2-NEXT: Section number for .tbss: 10
# CASE2-NEXT: Additional flags 64-bit XCOFF: 0x8000
# CASE2-NEXT: }

## Case3: if all fields in the aux header are omitted and text/data/bss/tdata/tbss/loader
## sections are not set, we set the fields using default values.
# RUN: yaml2obj %s --docnum=2 -o %t3
# RUN: llvm-readobj --auxiliary-header %t3 | FileCheck %s --check-prefix=CASE3

# CASE3: AuxiliaryHeader {
# CASE3-NEXT: Magic: 0x1
# CASE3-NEXT: Version: 0x1
# CASE3-NEXT: Size of .text section: 0x0
# CASE3-NEXT: Size of .data section: 0x0
# CASE3-NEXT: Size of .bss section: 0x0
# CASE3-NEXT: Entry point address: 0x0
# CASE3-NEXT: .text section start address: 0x0
# CASE3-NEXT: .data section start address: 0x0
# CASE3-NEXT: TOC anchor address: 0x0
# CASE3-NEXT: Section number of entryPoint: 0
# CASE3-NEXT: Section number of .text: 0
# CASE3-NEXT: Section number of .data: 0
# CASE3-NEXT: Section number of TOC: 0
# CASE3-NEXT: Section number of loader data: 0
# CASE3-NEXT: Section number of .bss: 0
# CASE3-NEXT: Maxium alignment of .text: 0x0
# CASE3-NEXT: Maxium alignment of .data: 0x0
# CASE3-NEXT: Module type: 0x0
# CASE3-NEXT: CPU type of objects: 0x0
# CASE3-NEXT: (Reserved): 0x0
# CASE3-NEXT: Maximum stack size: 0x0
# CASE3-NEXT: Maximum data size: 0x0
# CASE3-NEXT: Reserved for debugger: 0x0
# CASE3-NEXT: Text page size: 0x0
# CASE3-NEXT: Data page size: 0x0
# CASE3-NEXT: Stack page size: 0x0
# CASE3-NEXT: Flag: 0x0
# CASE3-NEXT: Alignment of thread-local storage: 0x0
# CASE3-NEXT: Section number for .tdata: 0
# CASE3-NEXT: Section number for .tbss: 0
# CASE3-NEXT: }

--- !XCOFF
FileHeader:
MagicNumber: [[MAGIC=0x1DF]]
AuxiliaryHeader:

## Case4: same as case3, except producing 64-bit output.
# RUN: yaml2obj %s --docnum=2 -DMAGIC=0x1F7 -o %t4
# RUN: llvm-readobj --auxiliary-header %t4 | FileCheck %s --check-prefix=CASE4

# CASE4: AuxiliaryHeader {
# CASE4-NEXT: Magic: 0x1
# CASE4-NEXT: Version: 0x1
# CASE4-NEXT: Reserved for debugger: 0x0
# CASE4-NEXT: .text section start address: 0x0
# CASE4-NEXT: .data section start address: 0x0
# CASE4-NEXT: TOC anchor address: 0x0
# CASE4-NEXT: Section number of entryPoint: 0
# CASE4-NEXT: Section number of .text: 0
# CASE4-NEXT: Section number of .data: 0
# CASE4-NEXT: Section number of TOC: 0
# CASE4-NEXT: Section number of loader data: 0
# CASE4-NEXT: Section number of .bss: 0
# CASE4-NEXT: Maxium alignment of .text: 0x0
# CASE4-NEXT: Maxium alignment of .data: 0x0
# CASE4-NEXT: Module type: 0x0
# CASE4-NEXT: CPU type of objects: 0x0
# CASE4-NEXT: (Reserved): 0x0
# CASE4-NEXT: Text page size: 0x0
# CASE4-NEXT: Data page size: 0x0
# CASE4-NEXT: Stack page size: 0x0
# CASE4-NEXT: Flag: 0x0
# CASE4-NEXT: Alignment of thread-local storage: 0x0
# CASE4-NEXT: Size of .text section: 0x0
# CASE4-NEXT: Size of .data section: 0x0
# CASE4-NEXT: Size of .bss section: 0x0
# CASE4-NEXT: Entry point address: 0x0
# CASE4-NEXT: Maximum stack size: 0x0
# CASE4-NEXT: Maximum data size: 0x0
# CASE4-NEXT: Section number for .tdata: 0
# CASE4-NEXT: Section number for .tbss: 0
# CASE4-NEXT: Additional flags 64-bit XCOFF: 0x8000
# CASE4-NEXT: }
123 changes: 123 additions & 0 deletions llvm/test/tools/yaml2obj/XCOFF/aux-hdr-full-contents.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
## Test that we can explicitly specify all fields of the auxiliary file header.
## Notice that the values aren't derived from the sections if we explicitly set the fields.

# RUN: yaml2obj %s -o %t1
# RUN: llvm-readobj --auxiliary-header %t1 | FileCheck %s --check-prefix=CHECK32
# RUN: yaml2obj %s -DMAGIC=0x1F7 -DFLAG64=0x2 -o %t2
# RUN: llvm-readobj --auxiliary-header %t2 | FileCheck %s --check-prefix=CHECK64

# CHECK32: Format: aixcoff-rs6000
# CHECK32-NEXT: Arch: powerpc
# CHECK32-NEXT: AddressSize: 32bit
# CHECK32-NEXT: AuxiliaryHeader {
# CHECK32-NEXT: Magic: 0x10B
# CHECK32-NEXT: Version: 0x1
# CHECK32-NEXT: Size of .text section: 0x8
# CHECK32-NEXT: Size of .data section: 0x9
# CHECK32-NEXT: Size of .bss section: 0x10
# CHECK32-NEXT: Entry point address: 0x1111
# CHECK32-NEXT: .text section start address: 0x2222
# CHECK32-NEXT: .data section start address: 0x3333
# CHECK32-NEXT: TOC anchor address: 0x4444
# CHECK32-NEXT: Section number of entryPoint: 1
# CHECK32-NEXT: Section number of .text: 2
# CHECK32-NEXT: Section number of .data: 3
# CHECK32-NEXT: Section number of TOC: 4
# CHECK32-NEXT: Section number of loader data: 5
# CHECK32-NEXT: Section number of .bss: 6
# CHECK32-NEXT: Maxium alignment of .text: 0x7
# CHECK32-NEXT: Maxium alignment of .data: 0x3
# CHECK32-NEXT: Module type: 0x0
# CHECK32-NEXT: CPU type of objects: 0x1
# CHECK32-NEXT: (Reserved): 0x0
# CHECK32-NEXT: Maximum stack size: 0x0
# CHECK32-NEXT: Maximum data size: 0x0
# CHECK32-NEXT: Reserved for debugger: 0x0
# CHECK32-NEXT: Text page size: 0x1
# CHECK32-NEXT: Data page size: 0x1
# CHECK32-NEXT: Stack page size: 0x1
# CHECK32-NEXT: Flag: 0x0
# CHECK32-NEXT: Alignment of thread-local storage: 0x1
# CHECK32-NEXT: Section number for .tdata: 7
# CHECK32-NEXT: Section number for .tbss: 8
# CHECK32-NEXT: }

# CHECK64: Format: aix5coff64-rs6000
# CHECK64-NEXT: Arch: powerpc64
# CHECK64-NEXT: AddressSize: 64bit
# CHECK64-NEXT: AuxiliaryHeader {
# CHECK64-NEXT: Magic: 0x10B
# CHECK64-NEXT: Version: 0x1
# CHECK64-NEXT: Reserved for debugger: 0x0
# CHECK64-NEXT: .text section start address: 0x2222
# CHECK64-NEXT: .data section start address: 0x3333
# CHECK64-NEXT: TOC anchor address: 0x4444
# CHECK64-NEXT: Section number of entryPoint: 1
# CHECK64-NEXT: Section number of .text: 2
# CHECK64-NEXT: Section number of .data: 3
# CHECK64-NEXT: Section number of TOC: 4
# CHECK64-NEXT: Section number of loader data: 5
# CHECK64-NEXT: Section number of .bss: 6
# CHECK64-NEXT: Maxium alignment of .text: 0x7
# CHECK64-NEXT: Maxium alignment of .data: 0x3
# CHECK64-NEXT: Module type: 0x0
# CHECK64-NEXT: CPU type of objects: 0x1
# CHECK64-NEXT: (Reserved): 0x0
# CHECK64-NEXT: Text page size: 0x1
# CHECK64-NEXT: Data page size: 0x1
# CHECK64-NEXT: Stack page size: 0x1
# CHECK64-NEXT: Flag: 0x0
# CHECK64-NEXT: Alignment of thread-local storage: 0x0
# CHECK64-NEXT: Size of .text section: 0x8
# CHECK64-NEXT: Size of .data section: 0x9
# CHECK64-NEXT: Size of .bss section: 0x10
# CHECK64-NEXT: Entry point address: 0x1111
# CHECK64-NEXT: Maximum stack size: 0x0
# CHECK64-NEXT: Maximum data size: 0x0
# CHECK64-NEXT: Section number for .tdata: 7
# CHECK64-NEXT: Section number for .tbss: 8
# CHECK64-NEXT: Additional flags 64-bit XCOFF: 0x2
# CHECK64-NEXT: }

--- !XCOFF
FileHeader:
MagicNumber: [[MAGIC=0x1DF]]
AuxiliaryHeader:
Magic: 0x10B
Version: 0x1
TextSectionSize: 0x8
DataSectionSize: 0x9
BssSectionSize: 0x10
EntryPointAddr: 0x1111
TextStartAddr: 0x2222
DataStartAddr: 0x3333
TOCAnchorAddr: 0x4444
SecNumOfEntryPoint: 1
SecNumOfText: 2
SecNumOfData: 3
SecNumOfTOC: 4
SecNumOfLoader: 5
SecNumOfBSS: 6
MaxAlignOfText: 0x7
MaxAlignOfData: 0x3
ModuleType: 0x1
TextPageSize: 0x1
DataPageSize: 0x1
StackPageSize: 0x1
SecNumOfTData: 7
SecNumOfTBSS: 8
FlagAndTDataAlignment: 0x1
Flag: [[FLAG64=<none>]]
Sections:
- Flags: [ STYP_TEXT ]
SectionData: "1232"
- Flags: [ STYP_DATA ]
SectionData: "5678"
- Flags: [ STYP_BSS ]
SectionData: "9101"
- Flags: [ STYP_TDATA ]
SectionData: "1112"
- Flags: [ STYP_TBSS ]
SectionData: "1314"
- Flags: [ STYP_LOADER ]
SectionData: "1516"