[llvm] r219507 - [dwarfdump] Prettyprint DW_AT_APPLE_property_attribute bitfield values.

Frederic Riss friss at apple.com
Fri Oct 10 08:51:10 PDT 2014


Author: friss
Date: Fri Oct 10 10:51:10 2014
New Revision: 219507

URL: http://llvm.org/viewvc/llvm-project?rev=219507&view=rev
Log:
[dwarfdump] Prettyprint DW_AT_APPLE_property_attribute bitfield values.

This change depends on the ApplePropertyString helper that I sent spearately.
Not sure how you want this tested: as a tool test by adding a binary to dump, or as an llvm test starting from an IR file?

Reviewers: dblaikie, samsonov

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D5689

Added:
    llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.m
    llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o
    llvm/trunk/test/DebugInfo/dwarfdump-objc.test
Modified:
    llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp

Modified: llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp?rev=219507&r1=219506&r2=219507&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp (original)
+++ llvm/trunk/lib/DebugInfo/DWARFDebugInfoEntry.cpp Fri Oct 10 10:51:10 2014
@@ -12,6 +12,7 @@
 #include "DWARFContext.h"
 #include "DWARFDebugAbbrev.h"
 #include "llvm/DebugInfo/DWARFFormValue.h"
+#include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/Dwarf.h"
 #include "llvm/Support/Format.h"
@@ -72,6 +73,21 @@ void DWARFDebugInfoEntryMinimal::dump(ra
   }
 }
 
+static void dumpApplePropertyAttribute(raw_ostream &OS, uint64_t Val) {
+  OS << " (";
+  do {
+    uint64_t Bit = 1ULL << countTrailingZeros(Val);
+    if (const char *PropName = ApplePropertyString(Bit))
+      OS << PropName;
+    else
+      OS << format("DW_APPLE_PROPERTY_0x%" PRIx64, Bit);
+    if (!(Val ^= Bit))
+      break;
+    OS << ", ";
+  } while (true);
+  OS << ")";
+}
+
 void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
                                                DWARFUnit *u,
                                                uint32_t *offset_ptr,
@@ -130,6 +146,9 @@ void DWARFDebugInfoEntryMinimal::dumpAtt
     if (const DWARFUnit *RefU = findUnitAndExtractFast(DIE, u, &Ref))
       if (const char *Ref = DIE.getName(RefU, DINameKind::LinkageName))
         OS << " \"" << Ref << '\"';
+  } else if (attr == DW_AT_APPLE_property_attribute) {
+    if (Optional<uint64_t> OptVal = formValue.getAsUnsignedConstant())
+      dumpApplePropertyAttribute(OS, *OptVal);
   }
 
   OS << ")\n";

Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.m
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.m?rev=219507&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.m (added)
+++ llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.m Fri Oct 10 10:51:10 2014
@@ -0,0 +1,16 @@
+// Compile with clang -g dwarfdump-objc.m -c -Wno-objc-root-class
+
+ at interface NSObject {} @end
+
+
+ at interface TestInterface
+ at property (readonly) int ReadOnly;
+ at property (assign) int Assign;
+ at property (readwrite) int ReadWrite;
+ at property (retain) NSObject *Retain;
+ at property (copy) NSObject *Copy;
+ at property (nonatomic) int NonAtomic;
+ at end
+
+ at implementation TestInterface
+ at end

Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o?rev=219507&view=auto
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o (added) and llvm/trunk/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o Fri Oct 10 10:51:10 2014 differ

Added: llvm/trunk/test/DebugInfo/dwarfdump-objc.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwarfdump-objc.test?rev=219507&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/dwarfdump-objc.test (added)
+++ llvm/trunk/test/DebugInfo/dwarfdump-objc.test Fri Oct 10 10:51:10 2014
@@ -0,0 +1,40 @@
+RUN: llvm-dwarfdump %p/Inputs/dwarfdump-objc.x86_64.o | FileCheck %s
+
+CHECK:      .debug_info contents:
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:    DW_AT_APPLE_property_name {{.*}} "ReadOnly"
+CHECK-NOT: TAG
+CHECK:    DW_AT_APPLE_property_attribute {{.*}} (0x01 (DW_APPLE_PROPERTY_readonly))
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_name {{.*}} "Assign"
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_attribute {{.*}} (0x0c (DW_APPLE_PROPERTY_assign, DW_APPLE_PROPERTY_readwrite))
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_name {{.*}} "ReadWrite"
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_attribute {{.*}} (0x0c (DW_APPLE_PROPERTY_assign, DW_APPLE_PROPERTY_readwrite))
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_name {{.*}} "Retain"
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_attribute {{.*}} (0x18 (DW_APPLE_PROPERTY_readwrite, DW_APPLE_PROPERTY_retain))
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_name {{.*}} "Copy"
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_attribute {{.*}} (0x28 (DW_APPLE_PROPERTY_readwrite, DW_APPLE_PROPERTY_copy))
+
+CHECK: DW_TAG_APPLE_property
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_name {{.*}} "NonAtomic"
+CHECK-NOT: TAG
+CHECK:   DW_AT_APPLE_property_attribute {{.*}} (0x4c (DW_APPLE_PROPERTY_assign, DW_APPLE_PROPERTY_readwrite, DW_APPLE_PROPERTY_nonatomic))
+





More information about the llvm-commits mailing list