Index: llvm/include/llvm/BinaryFormat/COFF.h =================================================================== --- llvm/include/llvm/BinaryFormat/COFF.h +++ llvm/include/llvm/BinaryFormat/COFF.h @@ -572,6 +572,40 @@ uint32_t NumberOfRvaAndSize; }; +struct PE32PlusHeader { + uint16_t Magic; + uint8_t MajorLinkerVersion; + uint8_t MinorLinkerVersion; + uint32_t SizeOfCode; + uint32_t SizeOfInitializedData; + uint32_t SizeOfUninitializedData; + uint32_t AddressOfEntryPoint; // RVA + uint32_t BaseOfCode; // RVA + uint64_t ImageBase; + uint32_t SectionAlignment; + uint32_t FileAlignment; + uint16_t MajorOperatingSystemVersion; + uint16_t MinorOperatingSystemVersion; + uint16_t MajorImageVersion; + uint16_t MinorImageVersion; + uint16_t MajorSubsystemVersion; + uint16_t MinorSubsystemVersion; + uint32_t Win32VersionValue; + uint32_t SizeOfImage; + uint32_t SizeOfHeaders; + uint32_t CheckSum; + uint16_t Subsystem; + // FIXME: This should be DllCharacteristics to match the COFF spec. + uint16_t DLLCharacteristics; + uint64_t SizeOfStackReserve; + uint64_t SizeOfStackCommit; + uint64_t SizeOfHeapReserve; + uint64_t SizeOfHeapCommit; + uint32_t LoaderFlags; + // FIXME: This should be NumberOfRvaAndSizes to match the COFF spec. + uint32_t NumberOfRvaAndSize; +}; + struct DataDirectory { uint32_t RelativeVirtualAddress; uint32_t Size; Index: llvm/include/llvm/ObjectYAML/COFFYAML.h =================================================================== --- llvm/include/llvm/ObjectYAML/COFFYAML.h +++ llvm/include/llvm/ObjectYAML/COFFYAML.h @@ -96,7 +96,7 @@ }; struct PEHeader { - COFF::PE32Header Header; + COFF::PE32PlusHeader Header; Optional DataDirectories[COFF::NUM_DATA_DIRECTORIES]; }; Index: llvm/test/tools/yaml2obj/coff-arm64.yaml =================================================================== --- llvm/test/tools/yaml2obj/coff-arm64.yaml +++ llvm/test/tools/yaml2obj/coff-arm64.yaml @@ -3,7 +3,9 @@ # RUN: obj2yaml %t | FileCheck %s --check-prefix=ROUNDTRIP # CHECK: OptionalHeaderSize: 240 +# CHECK: ImageBase: 0x140000000 +# ROUNDTRIP: ImageBase: 5368709120 # ROUNDTRIP: VirtualAddress: 4096 # ROUNDTRIP: VirtualAddress: 8192 # ROUNDTRIP: VirtualAddress: 12288 @@ -11,7 +13,7 @@ --- !COFF OptionalHeader: AddressOfEntryPoint: 4096 - ImageBase: 1073741824 + ImageBase: 5368709120 SectionAlignment: 4096 FileAlignment: 512 MajorOperatingSystemVersion: 6