[PATCH] D38078: [dsymutil] Don't resolve DIE reference to NULL DIE.

Jonas Devlieghere via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 20 09:51:33 PDT 2017


JDevlieghere updated this revision to Diff 116020.
JDevlieghere added a comment.

- Remove relative path in test.


https://reviews.llvm.org/D38078

Files:
  test/tools/dsymutil/Inputs/null_die.o
  test/tools/dsymutil/X86/null-die.test
  tools/dsymutil/DwarfLinker.cpp


Index: tools/dsymutil/DwarfLinker.cpp
===================================================================
--- tools/dsymutil/DwarfLinker.cpp
+++ tools/dsymutil/DwarfLinker.cpp
@@ -1495,8 +1495,12 @@
   uint64_t RefOffset = *RefValue.getAsReference();
 
   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", &DIE);
   return DWARFDie();
Index: test/tools/dsymutil/X86/null-die.test
===================================================================
--- /dev/null
+++ test/tools/dsymutil/X86/null-die.test
@@ -0,0 +1,39 @@
+#RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/ -y %s -no-output 2>&1 \
+#RUN:   |  FileCheck %s
+
+# CHECK: warning: could not find referenced DIE
+
+# We've modified the DW_AT_abstract_origin offset to reference a NULL DIE.
+#
+# Source:
+#
+#   int foo(int i) __attribute__((always_inline));
+#   int foo(int i)
+#   {
+#     return i + 10;
+#   }
+#
+#   int main(int argc, char** argv)
+#   {
+#     return foo(argc);
+#   }
+#
+# Compile with:
+#
+#   $ clang -S -O3 -g test.c -o null_die.s
+#
+#   Manually patch the DW_AT_abstract_origin to point to a NULL DIE.
+#
+#   $ llvm-mc -triple x86_64-apple-darwin -filetype=obj -o null_die.o null_die.s
+#   $ ld -arch x86_64 -macosx_version_min 10.13.0 -lSystem null_die.o -o null_die
+
+---
+triple:          'x86_64-apple-darwin'
+binary-path:     /null_die
+objects:
+  - filename:        /null_die.o
+    timestamp:       1505906803
+    symbols:
+      - { sym: _foo, objAddr: 0x0000000000000000, binAddr: 0x0000000100000F30, size: 0x00000010 }
+      - { sym: _main, objAddr: 0x0000000000000010, binAddr: 0x0000000100000F40, size: 0x00000009 }
+...


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38078.116020.patch
Type: text/x-patch
Size: 2029 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170920/b4d4150a/attachment.bin>


More information about the llvm-commits mailing list