diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index 71daf5ad27ef..d9068a9a7836 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -331,9 +331,10 @@ PEHeaderChunk::PEHeaderChunk(const PECOFFLinkingContext &ctx) _coffHeader.TimeDateStamp = time(nullptr); // Attributes of the executable. - uint16_t characteristics = llvm::COFF::IMAGE_FILE_32BIT_MACHINE | - llvm::COFF::IMAGE_FILE_EXECUTABLE_IMAGE; - if (ctx.getLargeAddressAware()) + uint16_t characteristics = llvm::COFF::IMAGE_FILE_EXECUTABLE_IMAGE; + if (!ctx.is64Bit()) + characteristics |= llvm::COFF::IMAGE_FILE_32BIT_MACHINE; + if (ctx.getLargeAddressAware() || ctx.is64Bit()) characteristics |= llvm::COFF::IMAGE_FILE_LARGE_ADDRESS_AWARE; if (ctx.getSwapRunFromCD()) characteristics |= llvm::COFF::IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP; diff --git a/lld/test/pecoff/pe32plus.test b/lld/test/pecoff/pe32plus.test index fff670ba054a..ea20d1b851b1 100644 --- a/lld/test/pecoff/pe32plus.test +++ b/lld/test/pecoff/pe32plus.test @@ -14,9 +14,9 @@ CHECK-NEXT: TimeDateStamp: CHECK-NEXT: PointerToSymbolTable: 0x0 CHECK-NEXT: SymbolCount: 0 CHECK-NEXT: OptionalHeaderSize: 240 -CHECK-NEXT: Characteristics [ (0x102) -CHECK-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100) +CHECK-NEXT: Characteristics [ (0x22) CHECK-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2) +CHECK-NEXT: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20) CHECK-NEXT: ] CHECK-NEXT: } CHECK-NEXT: ImageOptionalHeader {