## Test all members of 64-bit load config.
# RUN: yaml2obj --docnum=1 %s -o %t
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=ALL
# ALL: Format: COFF-x86-64
# ALL-NEXT: Arch: x86_64
# ALL-NEXT: AddressSize: 64bit
# ALL-NEXT: LoadConfig [
# ALL-NEXT: Size: 0x150
# ALL-NEXT: TimeDateStamp: 1970-01-01 00:00:01 (0x1)
# ALL-NEXT: MajorVersion: 0x2
# ALL-NEXT: MinorVersion: 0x3
# ALL-NEXT: GlobalFlagsClear: 0x4
# ALL-NEXT: GlobalFlagsSet: 0x5
# ALL-NEXT: CriticalSectionDefaultTimeout: 0x6
# ALL-NEXT: DeCommitFreeBlockThreshold: 0x7
# ALL-NEXT: DeCommitTotalFreeThreshold: 0x8
# ALL-NEXT: LockPrefixTable: 0x9
# ALL-NEXT: MaximumAllocationSize: 0x100000
# ALL-NEXT: VirtualMemoryThreshold: 0x2000000
# ALL-NEXT: ProcessHeapFlags: 0x2
# ALL-NEXT: ProcessAffinityMask: 0x1
# ALL-NEXT: CSDVersion: 0x3
# ALL-NEXT: DependentLoadFlags: 0x4
# ALL-NEXT: EditList: 0x5
# ALL-NEXT: SecurityCookie: 0x6
# ALL-NEXT: SEHandlerTable: 0x0
# ALL-NEXT: SEHandlerCount: 0
# ALL-NEXT: GuardCFCheckFunction: 0x9
# ALL-NEXT: GuardCFCheckDispatch: 0x1
# ALL-NEXT: GuardCFFunctionTable: 0x0
# ALL-NEXT: GuardCFFunctionCount: 0
# ALL-NEXT: GuardFlags [ (0x4)
# ALL-NEXT: ]
# ALL-NEXT: GuardAddressTakenIatEntryTable: 0x0
# ALL-NEXT: GuardAddressTakenIatEntryCount: 0
# ALL-NEXT: GuardLongJumpTargetTable: 0x0
# ALL-NEXT: GuardLongJumpTargetCount: 0
# ALL-NEXT: DynamicValueRelocTable: 0x2
# ALL-NEXT: CHPEMetadataPointer: 0x0
# ALL-NEXT: GuardRFFailureRoutine: 0x4
# ALL-NEXT: GuardRFFailureRoutineFunctionPointer: 0x5
# ALL-NEXT: DynamicValueRelocTableOffset: 0x4
# ALL-NEXT: DynamicValueRelocTableSection: 2
# ALL-NEXT: GuardRFVerifyStackPointerFunctionPointer: 0x8
# ALL-NEXT: HotPatchTableOffset: 0x9
# ALL-NEXT: EnclaveConfigurationPointer: 0x1
# ALL-NEXT: VolatileMetadataPointer: 0x2
# ALL-NEXT: GuardEHContinuationTable: 0x0
# ALL-NEXT: GuardEHContinuationCount: 0
# ALL-NEXT: ]
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 320
StructuredData:
- LoadConfig:
Size: 0x150
TimeDateStamp: 1
MajorVersion: 2
MinorVersion: 3
GlobalFlagsClear: 4
GlobalFlagsSet: 5
CriticalSectionDefaultTimeout: 6
DeCommitFreeBlockThreshold: 7
DeCommitTotalFreeThreshold: 8
LockPrefixTable: 9
MaximumAllocationSize: 0x100000
VirtualMemoryThreshold: 0x2000000
ProcessAffinityMask: 1
ProcessHeapFlags: 2
CSDVersion: 3
DependentLoadFlags: 4
EditList: 5
SecurityCookie: 6
SEHandlerTable: 0
SEHandlerCount: 0
GuardCFCheckFunction: 9
GuardCFCheckDispatch: 1
GuardCFFunctionTable: 0
GuardCFFunctionCount: 0
GuardFlags: 4
CodeIntegrity:
Flags: 0x100
Catalog: 5
CatalogOffset: 6
GuardAddressTakenIatEntryTable: 0
GuardAddressTakenIatEntryCount: 0
GuardLongJumpTargetTable: 0
GuardLongJumpTargetCount: 0
DynamicValueRelocTable: 2
CHPEMetadataPointer: 0
GuardRFFailureRoutine: 4
GuardRFFailureRoutineFunctionPointer: 5
DynamicValueRelocTableOffset: 4
DynamicValueRelocTableSection: 2
GuardRFVerifyStackPointerFunctionPointer: 8
HotPatchTableOffset: 9
EnclaveConfigurationPointer: 1
VolatileMetadataPointer: 2
GuardEHContinuationTable: 0
GuardEHContinuationCount: 0
GuardXFGCheckFunctionPointer: 5
GuardXFGDispatchFunctionPointer: 6
GuardXFGTableDispatchFunctionPointer: 7
CastGuardOsDeterminedFailureMode: 8
- Name: .reloc
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x2000
VirtualSize: 12
StructuredData:
- UInt32: 1 # pad
- UInt32: 2 # Version
- UInt32: 0 # Size
symbols: []
...
## Simple 32-bit load config.
# RUN: yaml2obj --docnum=2 %s -o %t
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=LOADCFG32
# LOADCFG32: LoadConfig [
# LOADCFG32: MaximumAllocationSize: 0x100000
# LOADCFG32: VirtualMemoryThreshold: 0x2000000
# LOADCFG32: CHPEMetadataPointer: 0
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_I386
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 320
StructuredData:
- LoadConfig:
MaximumAllocationSize: 0x100000
VirtualMemoryThreshold: 0x2000000
symbols: []
...
## Create load config with all fields using default values.
# RUN: yaml2obj --docnum=3 %s -o %t
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=DEF
# DEF: Format: COFF-x86-64
# DEF: Arch: x86_64
# DEF: AddressSize: 64bit
# DEF: LoadConfig [
# DEF: Size: 0x138
# DEF: MajorVersion: 0x0
# DEF: MinorVersion: 0x0
# DEF: GuardEHContinuationCount: 0
# DEF: ]
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 320
StructuredData:
- LoadConfig:
symbols: []
...
## Create load config larger than coff_load_configuration32 struct.
# RUN: yaml2obj --docnum=4 %s -o %t
# RUN: llvm-readobj --hex-dump=.rdata %t | FileCheck %s --check-prefix=LARGE
# LARGE: 0x00401000 d0000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401010 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401020 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401030 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401040 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401050 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401060 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401070 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401080 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x00401090 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x004010a0 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x004010b0 00000000 00000000 ff000000 00000000 ................
# LARGE-NEXT: 0x004010c0 00000000 00000000 00000000 00000000 ................
# LARGE-NEXT: 0x004010d0 aabbccdd ....
--- !COFF
OptionalHeader:
ImageBase: 0x400000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_I386
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 0xd4
StructuredData:
- LoadConfig:
Size: 0xd0
CastGuardOsDeterminedFailureMode: 0xff
- UInt32: 0xddccbbaa
symbols: []
...
## Try to specify load config field that barely fits the specified size.
# RUN: yaml2obj --docnum=5 %s -o %t
# RUN: llvm-readobj --hex-dump=.rdata %t | FileCheck %s --check-prefix=SMALL
# SMALL: 0x180001000 09000000 00000000 aaffffff ff
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 13
StructuredData:
- LoadConfig:
Size: 9
MajorVersion: 0xbbaa
- UInt32: 0xffffffff
symbols: []
...
## Try to specify load config field that does not fit specified size.
# RUN: not yaml2obj --docnum=6 %s -o %t 2>&1 | FileCheck %s --check-prefix=TOOSMALL
# TOOSMALL: error: unknown key 'MajorVersion'
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 320
StructuredData:
- LoadConfig:
Size: 8
MajorVersion: 10
symbols: []
...
## Set load config size to 0.
# RUN: not yaml2obj --docnum=7 %s -o %t 2>&1 | FileCheck %s --check-prefix=ZERO
# ZERO: error: Size must be at least 4
--- !COFF
OptionalHeader:
ImageBase: 0x180000000
SectionAlignment: 4096
FileAlignment: 512
DLLCharacteristics: [ ]
LoadConfigTable:
RelativeVirtualAddress: 0x1000
Size: 320
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
sections:
- Name: .rdata
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
VirtualAddress: 0x1000
VirtualSize: 320
StructuredData:
- LoadConfig:
Size: 0
symbols: []
...