<div dir="ltr">This commit had an out-of-order-initialization issue in the constructor for MachOLinkingContext which caused a failure on some buildbots. This has been fixed in r237842.<div><br></div><div>- Lang.  </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 20, 2015 at 3:10 PM, Lang Hames <span dir="ltr"><<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: lhames<br>
Date: Wed May 20 17:10:50 2015<br>
New Revision: 237841<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D237841-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=r3g10d-Km-1v1Gwu5mMRSj2t8Fc8GLkw995HHxAAoTc&e=" target="_blank">http://llvm.org/viewvc/llvm-project?rev=237841&view=rev</a><br>
Log:<br>
[LLD] Add support for the -stack_size option to Darwin ld.<br>
<br>
Added:<br>
    lld/trunk/test/mach-o/stack-size.yaml<br>
Modified:<br>
    lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h<br>
    lld/trunk/lib/Driver/DarwinLdDriver.cpp<br>
    lld/trunk/lib/Driver/DarwinLdOptions.td<br>
    lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp<br>
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h<br>
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp<br>
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp<br>
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp<br>
<br>
Modified: lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_include_lld_ReaderWriter_MachOLinkingContext.h-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=DlLE4zozSun4sOdqtvI9GuJby7nrq4QBlrTCDZj4atk&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h (original)<br>
+++ lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h Wed May 20 17:10:50 2015<br>
@@ -129,6 +129,9 @@ public:<br>
   bool PIE() const { return _pie; }<br>
   void setPIE(bool pie) { _pie = pie; }<br>
<br>
+  uint64_t stackSize() const { return _stackSize; }<br>
+  void setStackSize(uint64_t stackSize) { _stackSize = stackSize; }<br>
+<br>
   uint64_t baseAddress() const { return _baseAddress; }<br>
   void setBaseAddress(uint64_t baseAddress) { _baseAddress = baseAddress; }<br>
<br>
@@ -332,6 +335,7 @@ private:<br>
   bool _outputMachOTypeStatic; // Disambiguate static vs dynamic prog<br>
   bool _doNothing;            // for -help and -v which just print info<br>
   bool _pie;<br>
+  uint64_t _stackSize;<br>
   Arch _arch;<br>
   OS _os;<br>
   uint32_t _osMinVersion;<br>
<br>
Modified: lld/trunk/lib/Driver/DarwinLdDriver.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_Driver_DarwinLdDriver.cpp-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=-ObhluD-ocpXIftLLik-UhcStlbZqeSTFHeElVETaX4&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinLdDriver.cpp?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/Driver/DarwinLdDriver.cpp (original)<br>
+++ lld/trunk/lib/Driver/DarwinLdDriver.cpp Wed May 20 17:10:50 2015<br>
@@ -20,6 +20,7 @@<br>
 #include "lld/ReaderWriter/MachOLinkingContext.h"<br>
 #include "llvm/ADT/ArrayRef.h"<br>
 #include "llvm/ADT/STLExtras.h"<br>
+#include "llvm/ADT/StringExtras.h"<br>
 #include "llvm/ADT/Triple.h"<br>
 #include "llvm/Option/Arg.h"<br>
 #include "llvm/Option/Option.h"<br>
@@ -411,7 +412,7 @@ bool DarwinLdDriver::parse(int argc, con<br>
       return false;<br>
     } else if (baseAddress % ctx.pageSize()) {<br>
       diagnostics << "error: image_base must be a multiple of page size ("<br>
-                  << llvm::format("0x%" PRIx64, ctx.pageSize()) << ")\n";<br>
+                  << "0x" << llvm::utohexstr(ctx.pageSize()) << ")\n";<br>
       return false;<br>
     }<br>
<br>
@@ -720,6 +721,22 @@ bool DarwinLdDriver::parse(int argc, con<br>
     }<br>
   }<br>
<br>
+  // Handle stack_size<br>
+  if (llvm::opt::Arg *stackSize = parsedArgs->getLastArg(OPT_stack_size)) {<br>
+    uint64_t stackSizeVal;<br>
+    if (parseNumberBase16(stackSize->getValue(), stackSizeVal)) {<br>
+      diagnostics << "error: stack_size expects a hex number\n";<br>
+      return false;<br>
+    }<br>
+    if ((stackSizeVal % ctx.pageSize()) != 0) {<br>
+      diagnostics << "error: stack_size must be a multiple of page size ("<br>
+                  << "0x" << llvm::utohexstr(ctx.pageSize()) << ")\n";<br>
+      return false;<br>
+    }<br>
+<br>
+    ctx.setStackSize(stackSizeVal);<br>
+  }<br>
+<br>
   // Handle debug info handling options: -S<br>
   if (parsedArgs->hasArg(OPT_S))<br>
     ctx.setDebugInfoMode(MachOLinkingContext::DebugInfoMode::noDebugMap);<br>
<br>
Modified: lld/trunk/lib/Driver/DarwinLdOptions.td<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_Driver_DarwinLdOptions.td-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=tI6j-9u7SH-cUXXq3JOe5EMUFGdE4Bwly3bwiDvRuLM&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinLdOptions.td?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/Driver/DarwinLdOptions.td (original)<br>
+++ lld/trunk/lib/Driver/DarwinLdOptions.td Wed May 20 17:10:50 2015<br>
@@ -67,6 +67,10 @@ def pie : Flag<["-"], "pie">,<br>
 def no_pie : Flag<["-"], "no_pie">,<br>
      HelpText<"Do not create Position Independent Executable">,<br>
      Group<grp_main>;<br>
+def stack_size : Separate<["-"], "stack_size">,<br>
+     HelpText<"Specifies the maximum stack size for the main thread in a program. "<br>
+              "Must be a page-size multiple. (default=8Mb)">,<br>
+     Group<grp_main>;<br>
<br>
 // dylib executable options<br>
 def grp_dylib : OptionGroup<"opts">, HelpText<"DYLIB EXECUTABLE OPTIONS">;<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_ReaderWriter_MachO_MachOLinkingContext.cpp-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=nGpTnoFojtpiWIuldHoNA5YzQt1pP5G9QS5Wi6dY5Go&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp Wed May 20 17:10:50 2015<br>
@@ -142,9 +142,9 @@ MachOLinkingContext::MachOLinkingContext<br>
     : _outputMachOType(MH_EXECUTE), _outputMachOTypeStatic(false),<br>
       _doNothing(false), _pie(false), _arch(arch_unknown), _os(OS::macOSX),<br>
       _osMinVersion(0), _pageZeroSize(0), _pageSize(4096), _baseAddress(0),<br>
-      _compatibilityVersion(0), _currentVersion(0), _deadStrippableDylib(false),<br>
-      _printAtoms(false), _testingFileUsage(false), _keepPrivateExterns(false),<br>
-      _demangle(false), _archHandler(nullptr),<br>
+      _stackSize(0x800000), _compatibilityVersion(0), _currentVersion(0),<br>
+      _deadStrippableDylib(false), _printAtoms(false), _testingFileUsage(false),<br>
+      _keepPrivateExterns(false), _demangle(false), _archHandler(nullptr),<br>
       _exportMode(ExportMode::globals),<br>
       _debugInfoMode(DebugInfoMode::addDebugMap), _orderFileEntries(0) {}<br>
<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_ReaderWriter_MachO_MachONormalizedFile.h-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=pwjlJ298az4p1u46b-PB14AXKLglGknivTBLWGxyH4E&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h Wed May 20 17:10:50 2015<br>
@@ -235,6 +235,7 @@ struct NormalizedFile {<br>
   bool                        hasUUID;<br>
   std::vector<StringRef>      rpaths;<br>
   Hex64                       entryAddress;<br>
+  Hex64                       stackSize;<br>
   MachOLinkingContext::OS     os;<br>
   Hex64                       sourceVersion;<br>
   PackedVersion               minOSverson;<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_ReaderWriter_MachO_MachONormalizedFileBinaryWriter.cpp-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=9PI3rz3xcSsWQb_vKu1OKVJCGCFiH8tAmX-HwzmAlVM&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Wed May 20 17:10:50 2015<br>
@@ -829,7 +829,7 @@ std::error_code MachOFileLayout::writeLo<br>
       ep->cmd       = LC_MAIN;<br>
       ep->cmdsize   = sizeof(entry_point_command);<br>
       ep->entryoff  = _file.entryAddress - _seg1addr;<br>
-      ep->stacksize = 0;<br>
+      ep->stacksize = _file.stackSize;<br>
       if (_swap)<br>
         swapStruct(*ep);<br>
       lc += sizeof(entry_point_command);<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_ReaderWriter_MachO_MachONormalizedFileFromAtoms.cpp-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=MbuFMP0Mm5ze4JwPs9JFacNLZ45ZvO0IoVxm6uE-TeI&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp Wed May 20 17:10:50 2015<br>
@@ -1197,6 +1197,7 @@ normalizedFromAtoms(const lld::File &ato<br>
   normFile.arch = context.arch();<br>
   normFile.fileType = context.outputMachOType();<br>
   normFile.flags = util.fileFlags();<br>
+  normFile.stackSize = context.stackSize();<br>
   normFile.installName = context.installName();<br>
   normFile.currentVersion = context.currentVersion();<br>
   normFile.compatVersion = context.compatibilityVersion();<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_lib_ReaderWriter_MachO_MachONormalizedFileYAML.cpp-3Frev-3D237841-26r1-3D237840-26r2-3D237841-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=xL3Gwjk3obTakU-1uc3MLA5tIVtmtfjPoFv5NV-Ff3g&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp?rev=237841&r1=237840&r2=237841&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp Wed May 20 17:10:50 2015<br>
@@ -688,6 +688,7 @@ struct MappingTraits<NormalizedFile> {<br>
     io.mapOptional("has-UUID",         file.hasUUID,        true);<br>
     io.mapOptional("rpaths",           file.rpaths);<br>
     io.mapOptional("entry-point",      file.entryAddress,   Hex64(0));<br>
+    io.mapOptional("stack-size",       file.stackSize,      Hex64(0x800000));<br>
     io.mapOptional("source-version",   file.sourceVersion,  Hex64(0));<br>
     io.mapOptional("OS",               file.os);<br>
     io.mapOptional("min-os-version",   file.minOSverson,    PackedVersion(0));<br>
<br>
Added: lld/trunk/test/mach-o/stack-size.yaml<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_test_mach-2Do_stack-2Dsize.yaml-3Frev-3D237841-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=NTqvi7h51bERCTegG5ANv14sEbVqlroel99PVzzi6QU&s=4efuJ_2gVycTI3U-O1d9RWtYiL_qrx_PY0AHBpiQ46o&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/stack-size.yaml?rev=237841&view=auto</a><br>
==============================================================================<br>
--- lld/trunk/test/mach-o/stack-size.yaml (added)<br>
+++ lld/trunk/test/mach-o/stack-size.yaml Wed May 20 17:10:50 2015<br>
@@ -0,0 +1,19 @@<br>
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 %s -o %t -stack_size 31415926000 %p/Inputs/libSystem.yaml<br>
+# RUN: llvm-objdump -private-headers %t | FileCheck %s<br>
+# RUN: not lld -flavor darwin -arch x86_64 -stack_size 0x31415926530 %s >/dev/null 2> %t<br>
+# RUN: FileCheck < %t %s --check-prefix=CHECK-ERROR-MISPAGED<br>
+# RUN: not lld -flavor darwin -arch x86_64 -stack_size hithere %s >/dev/null 2> %t<br>
+# RUN: FileCheck < %t %s --check-prefix=CHECK-ERROR-NOTHEX<br>
+<br>
+--- !native<br>
+defined-atoms:<br>
+   - name:            _main<br>
+     scope:           global<br>
+     content:         []<br>
+<br>
+# CHECK:       cmd LC_MAIN<br>
+# CHECK: stacksize 3384796143616<br>
+<br>
+# CHECK-ERROR-MISPAGED: error: stack_size must be a multiple of page size (0x1000)<br>
+<br>
+# CHECK-ERROR-NOTHEX: error: stack_size expects a hex number<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>