<div dir="ltr">I missed the original commit but I'm glad it's reverted. <div>I think it's a really bad practice to allocate huge chunks of RAM (petabytes?) and rely on the new handler to bark. </div><div>Instead, we should simply not try to allocate large chunks. In most cases if the compiler-related too wants to allocate many Gb of RAM at once it's an indication of a logical bug. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 5, 2017 at 3:04 PM, Vedant Kumar 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: vedantk<br>
Date: Tue Sep  5 15:04:00 2017<br>
New Revision: 312582<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=312582&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=312582&view=rev</a><br>
Log:<br>
Revert "[Decompression] Fail gracefully when out of memory"<br>
<br>
This reverts commit r312526.<br>
<br>
Revert "Fix test/DebugInfo/dwarfdump-<wbr>decompression-invalid-size.<wbr>test"<br>
<br>
This reverts commit r312527.<br>
<br>
It causes an ASan failure:<br>
<a href="http://lab.llvm.org:8080/green/job/clang-stage2-cmake-RgSan_check/4150" rel="noreferrer" target="_blank">http://lab.llvm.org:8080/<wbr>green/job/clang-stage2-cmake-<wbr>RgSan_check/4150</a><br>
<br>
Removed:<br>
    llvm/trunk/test/DebugInfo/<wbr>Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64<br>
    llvm/trunk/test/DebugInfo/<wbr>dwarfdump-decompression-<wbr>invalid-size.test<br>
Modified:<br>
    llvm/trunk/include/llvm/<wbr>Object/Decompressor.h<br>
    llvm/trunk/lib/Object/<wbr>Decompressor.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>Object/Decompressor.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Decompressor.h?rev=312582&r1=312581&r2=312582&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Object/Decompressor.h?<wbr>rev=312582&r1=312581&r2=<wbr>312582&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>Object/Decompressor.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>Object/Decompressor.h Tue Sep  5 15:04:00 2017<br>
@@ -13,7 +13,6 @@<br>
 #include "llvm/ADT/SmallString.h"<br>
 #include "llvm/ADT/StringRef.h"<br>
 #include "llvm/Object/ObjectFile.h"<br>
-#include "llvm/Support/ErrorHandling.h"<br>
<br>
 namespace llvm {<br>
 namespace object {<br>
@@ -32,9 +31,7 @@ public:<br>
   /// @brief Resize the buffer and uncompress section data into it.<br>
   /// @param Out         Destination buffer.<br>
   template <class T> Error resizeAndDecompress(T &Out) {<br>
-    install_bad_alloc_error_<wbr>handler(outOfMemoryHandler, this);<br>
     Out.resize(DecompressedSize);<br>
-    remove_bad_alloc_error_<wbr>handler();<br>
     return decompress({Out.data(), (size_t)DecompressedSize});<br>
   }<br>
<br>
@@ -55,14 +52,11 @@ public:<br>
   static bool isGnuStyle(StringRef Name);<br>
<br>
 private:<br>
-  static void outOfMemoryHandler(void *Data, const std::string &Message, bool);<br>
-<br>
-  Decompressor(StringRef Name, StringRef Data);<br>
+  Decompressor(StringRef Data);<br>
<br>
   Error consumeCompressedGnuHeader();<br>
   Error consumeCompressedZLibHeader(<wbr>bool Is64Bit, bool IsLittleEndian);<br>
<br>
-  StringRef SectionName;<br>
   StringRef SectionData;<br>
   uint64_t DecompressedSize;<br>
 };<br>
<br>
Modified: llvm/trunk/lib/Object/<wbr>Decompressor.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Decompressor.cpp?rev=312582&r1=312581&r2=312582&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Object/<wbr>Decompressor.cpp?rev=312582&<wbr>r1=312581&r2=312582&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Object/<wbr>Decompressor.cpp (original)<br>
+++ llvm/trunk/lib/Object/<wbr>Decompressor.cpp Tue Sep  5 15:04:00 2017<br>
@@ -23,7 +23,7 @@ Expected<Decompressor> Decompressor::cre<br>
   if (!zlib::isAvailable())<br>
     return createError("zlib is not available");<br>
<br>
-  Decompressor D(Name, Data);<br>
+  Decompressor D(Data);<br>
   Error Err = isGnuStyle(Name) ? D.consumeCompressedGnuHeader()<br>
                                : D.consumeCompressedZLibHeader(<wbr>Is64Bit, IsLE);<br>
   if (Err)<br>
@@ -31,8 +31,8 @@ Expected<Decompressor> Decompressor::cre<br>
   return D;<br>
 }<br>
<br>
-Decompressor::Decompressor(<wbr>StringRef Name, StringRef Data)<br>
-    : SectionName(Name), SectionData(Data), DecompressedSize(0) {}<br>
+Decompressor::Decompressor(<wbr>StringRef Data)<br>
+    : SectionData(Data), DecompressedSize(0) {}<br>
<br>
 Error Decompressor::<wbr>consumeCompressedGnuHeader() {<br>
   if (!SectionData.startswith("<wbr>ZLIB"))<br>
@@ -92,11 +92,3 @@ Error Decompressor::decompress(<wbr>MutableAr<br>
   size_t Size = Buffer.size();<br>
   return zlib::uncompress(SectionData, Buffer.data(), Size);<br>
 }<br>
-<br>
-void Decompressor::<wbr>outOfMemoryHandler(void *Data, const std::string &Message,<br>
-                                      bool) {<br>
-  const auto *D = static_cast<const Decompressor *>(Data);<br>
-  report_fatal_error("<wbr>decompression of '" + Twine(D->SectionName) +<br>
-                     "' failed: unable to allocate " +<br>
-                     Twine(D->DecompressedSize) + " bytes.");<br>
-}<br>
<br>
Removed: llvm/trunk/test/DebugInfo/<wbr>Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-decompression-invalid-size.elf-x86-64?rev=312581&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64?rev=312581&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
Binary files llvm/trunk/test/DebugInfo/<wbr>Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64 (original) and llvm/trunk/test/DebugInfo/<wbr>Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64 (removed) differ<br>
<br>
Removed: llvm/trunk/test/DebugInfo/<wbr>dwarfdump-decompression-<wbr>invalid-size.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwarfdump-decompression-invalid-size.test?rev=312581&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/dwarfdump-<wbr>decompression-invalid-size.<wbr>test?rev=312581&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/<wbr>dwarfdump-decompression-<wbr>invalid-size.test (original)<br>
+++ llvm/trunk/test/DebugInfo/<wbr>dwarfdump-decompression-<wbr>invalid-size.test (removed)<br>
@@ -1,15 +0,0 @@<br>
-REQUIRES: zlib<br>
-<br>
-// dwarfdump-decompression-<wbr>invalid-size.elf-x86-64 is prepared using following<br>
-// source code and invocation:<br>
-// test.cpp:<br>
-// int main() { return 0; }<br>
-//<br>
-// gcc test.cpp -o out -g -Wl,--compress-debug-sections,<wbr>zlib<br>
-//<br>
-// After that result object was modified manually. Decompressed size of<br>
-// .debug_frame section was changed to 0xffffffffffffffff in compression<br>
-// header.<br>
-RUN: not llvm-dwarfdump %p/Inputs/dwarfdump-<wbr>decompression-invalid-size.<wbr>elf-x86-64 2>&1 | FileCheck %s<br>
-<br>
-CHECK: decompression of '.debug_frame' failed: unable to allocate 18446744073709551615 bytes.<br>
<br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>