COFF: Add /LargeAddressAware command line option.

llvm-svn: 243373
This commit is contained in:
Rui Ueyama 2015-07-28 03:12:00 +00:00
parent 7e387a68de
commit 4d54534627
4 changed files with 28 additions and 3 deletions

View File

@ -118,6 +118,7 @@ struct Configuration {
bool NxCompat = true;
bool AllowIsolation = true;
bool TerminalServerAware = true;
bool LargeAddressAware = false;
};
extern Configuration *Config;

View File

@ -555,6 +555,10 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
OwningMBs.push_back(std::move(MB)); // take ownership
}
// Handle /largeaddressaware
if (Config->is64() || Args.hasArg(OPT_largeaddressaware))
Config->LargeAddressAware = true;
// Handle /entry and /dll
if (auto *Arg = Args.getLastArg(OPT_entry)) {
Config->Entry = addUndefined(mangle(Arg->getValue()));

View File

@ -435,11 +435,10 @@ template <typename PEHeaderTy> void Writer::writeHeader() {
COFF->Machine = Config->Machine;
COFF->NumberOfSections = OutputSections.size();
COFF->Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE;
if (Config->is64()) {
if (Config->LargeAddressAware)
COFF->Characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
} else {
if (!Config->is64())
COFF->Characteristics |= IMAGE_FILE_32BIT_MACHINE;
}
if (Config->DLL)
COFF->Characteristics |= IMAGE_FILE_DLL;
if (!Config->Relocatable)

View File

@ -0,0 +1,21 @@
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
# RUN: lld -flavor link2 %t.obj %p/Inputs/std32.lib /subsystem:console \
# RUN: /entry:main@0 /out:%t.exe /largeaddressaware
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
HEADER: Format: COFF-i386
HEADER-NEXT: Arch: i386
HEADER-NEXT: AddressSize: 32bit
HEADER-NEXT: ImageFileHeader {
HEADER-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C)
HEADER-NEXT: SectionCount: 4
HEADER-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0)
HEADER-NEXT: PointerToSymbolTable: 0x0
HEADER-NEXT: SymbolCount: 0
HEADER-NEXT: OptionalHeaderSize: 224
HEADER-NEXT: Characteristics [ (0x122)
HEADER-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100)
HEADER-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
HEADER-NEXT: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20)
HEADER-NEXT: ]
HEADER-NEXT: }