diff options
author | Rui Ueyama <ruiu@google.com> | 2013-07-16 17:20:38 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2013-07-16 17:20:38 +0000 |
commit | b0b1d590abcf28b904a2870cb51dbde82dd5baa4 (patch) | |
tree | ed1e492aadf71f8a1985a88babf1527c722f8323 /lld/lib | |
parent | cb1c8cce468339a6d10d1e016c1026948ebd6162 (diff) | |
download | bcm5719-llvm-b0b1d590abcf28b904a2870cb51dbde82dd5baa4.tar.gz bcm5719-llvm-b0b1d590abcf28b904a2870cb51dbde82dd5baa4.zip |
[WinLink] Add /LargeAddressAware command line option.
llvm-svn: 186428
Diffstat (limited to 'lld/lib')
-rw-r--r-- | lld/lib/Driver/WinLinkDriver.cpp | 4 | ||||
-rw-r--r-- | lld/lib/Driver/WinLinkOptions.td | 5 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 7 |
3 files changed, 14 insertions, 2 deletions
diff --git a/lld/lib/Driver/WinLinkDriver.cpp b/lld/lib/Driver/WinLinkDriver.cpp index f19ce14a3a6..873dfb159bf 100644 --- a/lld/lib/Driver/WinLinkDriver.cpp +++ b/lld/lib/Driver/WinLinkDriver.cpp @@ -262,6 +262,10 @@ bool WinLinkDriver::parse(int argc, const char *argv[], if (parsedArgs->getLastArg(OPT_no_nxcompat)) info.setNxCompat(false); + // Hanlde -largeaddressaware + if (parsedArgs->getLastArg(OPT_largeaddressaware)) + info.setLargeAddressAware(true); + // Hanlde -out if (llvm::opt::Arg *outpath = parsedArgs->getLastArg(OPT_out)) info.setOutputPath(outpath->getValue()); diff --git a/lld/lib/Driver/WinLinkOptions.td b/lld/lib/Driver/WinLinkOptions.td index 2fa8762d042..8669ca8fb65 100644 --- a/lld/lib/Driver/WinLinkOptions.td +++ b/lld/lib/Driver/WinLinkOptions.td @@ -33,5 +33,10 @@ def nxcompat : Flag<["-", "/"], "nxcompat">, def no_nxcompat : Flag<["-", "/"], "nxcompat:no">, HelpText<"Disable data execution provention">; +def largeaddressaware : Flag<["-", "/"], "largeaddressaware">, + HelpText<"Enable large addresses">; +def no_largeaddressaware : Flag<["-", "/"], "largeaddressaware:no">, + HelpText<"Disable large addresses">; + def help : Flag<["-", "/"], "help">; def help_q : Flag<["-", "/"], "?">, Alias<help>; diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index f56aba3f5a4..1fa1d64d6a8 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -151,8 +151,11 @@ public: _coffHeader.SizeOfOptionalHeader = 224; // Attributes of the executable. - _coffHeader.Characteristics = llvm::COFF::IMAGE_FILE_32BIT_MACHINE | - llvm::COFF::IMAGE_FILE_EXECUTABLE_IMAGE; + uint16_t characteristics = llvm::COFF::IMAGE_FILE_32BIT_MACHINE | + llvm::COFF::IMAGE_FILE_EXECUTABLE_IMAGE; + if (targetInfo.getLargeAddressAware()) + characteristics |= llvm::COFF::IMAGE_FILE_LARGE_ADDRESS_AWARE; + _coffHeader.Characteristics = characteristics; // 0x10b indicates a normal PE32 executable. For PE32+ it should be 0x20b. _peHeader.Magic = 0x10b; |