<div dir="ltr">Thanks David!<div><br></div><div>- Lang.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 14, 2015 at 5:05 PM, Davide Italiano via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davide<br>
Date: Wed Oct 14 19:05:32 2015<br>
New Revision: 250350<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=250350&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=250350&view=rev</a><br>
Log:<br>
[JIT] TrivialMemoryManager: Fail if we can't allocate memory.<br>
<br>
TrivialMemoryManager currently doesn't check the return type of AllocateRWX --<br>
and returns a 'null' MemoryBlock to its caller. As pointed out by Lang,<br>
this exposes some serious issues with the MemoryManager interface. There's,<br>
in fact, no way to report back an error to clients rather than aborting in<br>
case memory can't be allocated. Eventually the interface will grow to support<br>
this, but for now, fail sooner rather than later.<br>
<br>
Differential Revision:  <a href="http://reviews.llvm.org/D13627" rel="noreferrer" target="_blank">http://reviews.llvm.org/D13627</a><br>
<br>
Modified:<br>
    llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp<br>
<br>
Modified: llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=250350&r1=250349&r2=250350&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=250350&r1=250349&r2=250350&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp (original)<br>
+++ llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp Wed Oct 14 19:05:32 2015<br>
@@ -181,7 +181,10 @@ uint8_t *TrivialMemoryManager::allocateC<br>
                                                    unsigned Alignment,<br>
                                                    unsigned SectionID,<br>
                                                    StringRef SectionName) {<br>
-  sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, nullptr);<br>
+  std::string Err;<br>
+  sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, &Err);<br>
+  if (!MB.base())<br>
+    report_fatal_error("MemoryManager allocation failed: " + Err);<br>
   FunctionMemory.push_back(MB);<br>
   return (uint8_t*)MB.base();<br>
 }<br>
@@ -191,7 +194,10 @@ uint8_t *TrivialMemoryManager::allocateD<br>
                                                    unsigned SectionID,<br>
                                                    StringRef SectionName,<br>
                                                    bool IsReadOnly) {<br>
-  sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, nullptr);<br>
+  std::string Err;<br>
+  sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, &Err);<br>
+  if (!MB.base())<br>
+    report_fatal_error("MemoryManager allocation failed: " + Err);<br>
   DataMemory.push_back(MB);<br>
   return (uint8_t*)MB.base();<br>
 }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>