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.
--- 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;