<br /><br /><span>On 05/20/15 03:17 PM, <b class="name">Lang Hames </b> <lhames@gmail.com> wrote:</span><blockquote cite="mid:20150520221050.9F4112A6C02B@llvm.org" class="iwcQuote" style="border-left: 1px solid #00F; padding-left: 13px; margin-left: 0;" type="cite"><div class="mimetype-text-plain">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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=ExwfoOApn634wpBpzcsA4n5n5w2BCWvaYTemZF7m2l0&e=" target="l">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/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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=-Q6Zy0pb0jX8EuLJZlcCTm7ycF6aISZJdXkQwYguJto&e=" target="l">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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=g3ljyXQIf1kpWYM08rMHyiJX_HSSTSVWm5nzlml0xRE&e=" target="l">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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=tpJM28nCCzKEsSdGRcBQCVklWm9V3i0CG61kIhDCPRY&e=" target="l">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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=a7fK2ZdhTIcZz7cQmr0uxYQGSknuXZJ8hVBJk_H9lWk&e=" target="l">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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=FNJvqVK4ihIg0SAel7RPPC_pfVOLr2LH1EhYQnzGDv8&e=" target="l">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));</div></blockquote><div>The OS has a concept of a default stack size that is used when the LC_MAIN load command has the stack size field set to zero.   We should support that by having the default stack-size be zero (if -stack_size is not specified).</div><div><br /></div><div ><br /></div><blockquote cite="mid:20150520221050.9F4112A6C02B@llvm.org" class="iwcQuote" style="border-left: 1px solid #00F; padding-left: 13px; margin-left: 0;" type="cite"><div class="mimetype-text-plain"><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=AwMFAw&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=61vLz41BwUtroUQrde38pdsn9RF66i5MwPTBphg3ATQ&s=kzmhbTomMIknF-iw9D_6Mrxrm4gh2mKKWTf3oeO8XS0&e=" target="l">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</div></blockquote><div>Sad that this value (3384796143616) is different than the input value (31415926000).</div><div ><br /></div><div>There should be a test case that when -stack_size is not specified, the LC_MAIN has a stack size of zero.</div><div><br /></div><div>-Nick</div><blockquote cite="mid:20150520221050.9F4112A6C02B@llvm.org" class="iwcQuote" style="border-left: 1px solid #00F; padding-left: 13px; margin-left: 0;" type="cite"><div class="mimetype-text-plain"><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 />llvm-commits@cs.uiuc.edu<br /><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="l">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br /></div></blockquote>