## 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: 0x6 # ALL-NEXT: DynamicValueRelocTableSection: 7 # 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: 6 DynamicValueRelocTableSection: 7 GuardRFVerifyStackPointerFunctionPointer: 8 HotPatchTableOffset: 9 EnclaveConfigurationPointer: 1 VolatileMetadataPointer: 2 GuardEHContinuationTable: 0 GuardEHContinuationCount: 0 GuardXFGCheckFunctionPointer: 5 GuardXFGDispatchFunctionPointer: 6 GuardXFGTableDispatchFunctionPointer: 7 CastGuardOsDeterminedFailureMode: 8 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 laod 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: [] ...