Bug 1381043 - Backport llvm r313872 to 3.9 to avoid llvm-dsymutil crashing on bad rust DWARF data. r?froydnj draft
authorMike Hommey <mh+mozilla@glandium.org>
Thu, 12 Oct 2017 17:54:31 +0900
changeset 679010 bbbc7a7c2c1f7a00b3eab67f87da176081ff8f5f
parent 678896 3d918ff5d63442d7b88e1b7e9cb03b832bc28fdf
child 679011 8b8b77b09a83c89d849e52ec430b2ad89797eae5
push id84115
push userbmo:mh+mozilla@glandium.org
push dateThu, 12 Oct 2017 09:06:02 +0000
reviewersfroydnj
bugs1381043
milestone58.0a1
Bug 1381043 - Backport llvm r313872 to 3.9 to avoid llvm-dsymutil crashing on bad rust DWARF data. r?froydnj Ideally, we'd backport it to the clang 4 toolchain too, but that results in silently(!) missing crash symbols for libxul.
build/build-clang/clang-3.9-linux64.json
build/build-clang/r313872-for-3.9.patch
--- a/build/build-clang/clang-3.9-linux64.json
+++ b/build/build-clang/clang-3.9-linux64.json
@@ -12,11 +12,12 @@
     "python_path": "/usr/bin/python2.7",
     "gcc_dir": "/builds/worker/workspace/build/src/gcc",
     "cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "cxx": "/builds/worker/workspace/build/src/gcc/bin/g++",
     "as": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "patches": [
       "llvm-debug-frame.patch",
       "r277806.patch",
-      "r285657.patch"
+      "r285657.patch",
+      "r313872-for-3.9.patch"
     ]
 }
new file mode 100644
--- /dev/null
+++ b/build/build-clang/r313872-for-3.9.patch
@@ -0,0 +1,17 @@
+--- a/llvm/tools/dsymutil/DwarfLinker.cpp
++++ b/llvm/tools/dsymutil/DwarfLinker.cpp
+@@ -1489,8 +1489,12 @@
+   uint64_t RefOffset = *RefValue.getAsReference(&Unit);
+ 
+   if ((RefCU = getUnitForOffset(Units, RefOffset)))
+-    if (const auto *RefDie = RefCU->getOrigUnit().getDIEForOffset(RefOffset))
+-      return RefDie;
++    if (const auto *RefDie = RefCU->getOrigUnit().getDIEForOffset(RefOffset)) {
++      // In a file with broken references, an attribute might point to a NULL
++      // DIE.
++      if(!RefDie->isNULL())
++        return RefDie;
++    }
+ 
+   Linker.reportWarning("could not find referenced DIE", &Unit, &DIE);
+   return nullptr;