[PATCH] D43439: [dsymutil] Skip DW_AT_sibling attributes.

Jonas Devlieghere via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 27 11:27:39 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL326231: [dsymutil] Skip DW_AT_sibling attributes. (authored by JDevlieghere, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D43439?vs=136079&id=136116#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D43439

Files:
  llvm/trunk/test/tools/dsymutil/Inputs/sibling.o
  llvm/trunk/test/tools/dsymutil/PowerPC/sibling.test
  llvm/trunk/tools/dsymutil/DwarfLinker.cpp


Index: llvm/trunk/tools/dsymutil/DwarfLinker.cpp
===================================================================
--- llvm/trunk/tools/dsymutil/DwarfLinker.cpp
+++ llvm/trunk/tools/dsymutil/DwarfLinker.cpp
@@ -2591,7 +2591,8 @@
   for (const auto &AttrSpec : Abbrev->attributes()) {
     DWARFFormValue Val(AttrSpec.Form);
 
-    if (!Val.isFormClass(DWARFFormValue::FC_Reference)) {
+    if (!Val.isFormClass(DWARFFormValue::FC_Reference) ||
+        AttrSpec.Attr == dwarf::DW_AT_sibling) {
       DWARFFormValue::skipValue(AttrSpec.Form, Data, &Offset,
                                 Unit.getFormParams());
       continue;
@@ -2767,7 +2768,7 @@
       resolveDIEReference(Linker, CompileUnits, Val, U, InputDIE, RefUnit);
 
   // If the referenced DIE is not found,  drop the attribute.
-  if (!RefDie)
+  if (!RefDie || AttrSpec.Attr == dwarf::DW_AT_sibling)
     return 0;
 
   unsigned Idx = RefUnit->getOrigUnit().getDIEIndex(RefDie);
Index: llvm/trunk/test/tools/dsymutil/PowerPC/sibling.test
===================================================================
--- llvm/trunk/test/tools/dsymutil/PowerPC/sibling.test
+++ llvm/trunk/test/tools/dsymutil/PowerPC/sibling.test
@@ -1,20 +1,33 @@
 # Verify that we don't follow DW_AT_sibling references.
 #
 # Source:
-#   struct A { int a; } a;
-#   struct B { int b; } b;
+#   struct A { };
+#   struct B { };
+#
+#   struct C {
+#     A a;
+#   };
+#
+#   B b;
+#   C c;
+#
+# Compiled with Apple-GCC 4.0.1 (build 5370):
+#   g++ -g -c sibling.cpp -o sibling.o
 
 # RUN: llvm-dsymutil -arch ppc -f -oso-prepend-path=%p/../Inputs/ -y %s -o - | llvm-dwarfdump -debug-info - | FileCheck %s
 
-# CHECK: DW_TAG_variable
-# CHECK-NEXT: DW_AT_name ("a")
-# CHECK-NOT: DW_AT_name	("b")
+# CHECK: DW_TAG_structure_type
+# CHECK-NEXT: DW_AT_name	("A")
+# CHECK: DW_TAG_structure_type
+# CHECK-NEXT: DW_AT_name	("C")
+
+# CHECK-NOT: DW_AT_name	("B")
 
 ---
 triple:          'ppc-apple-darwin'
 objects:
   - filename:        sibling.o
     timestamp:       1518197670
     symbols:
-      - { sym: _a, objAddr: 0x00000000000000cb, binAddr: 0x0000000100000FA0, size: 0x00000010 }
+      - { sym: _c, objAddr: 0x000000000000017e, binAddr: 0x0000000100000FA0, size: 0x00000010 }
 ...


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43439.136116.patch
Type: text/x-patch
Size: 2232 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180227/57c697a5/attachment.bin>


More information about the llvm-commits mailing list