summaryrefslogtreecommitdiffstats
path: root/lld/lib
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2013-07-16 17:20:38 +0000
committerRui Ueyama <ruiu@google.com>2013-07-16 17:20:38 +0000
commitb0b1d590abcf28b904a2870cb51dbde82dd5baa4 (patch)
treeed1e492aadf71f8a1985a88babf1527c722f8323 /lld/lib
parentcb1c8cce468339a6d10d1e016c1026948ebd6162 (diff)
downloadbcm5719-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.cpp4
-rw-r--r--lld/lib/Driver/WinLinkOptions.td5
-rw-r--r--lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp7
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;
OpenPOWER on IntegriCloud