From 0f65dfd92b0a2b07a87812f9bb01e4d43adcfdb0 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Fri, 10 Oct 2014 15:51:10 +0000 Subject: [PATCH] [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219507 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/DebugInfo/DWARFDebugInfoEntry.cpp | 19 +++++++++ test/DebugInfo/Inputs/dwarfdump-objc.m | 16 +++++++ test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o | Bin 0 -> 11512 bytes test/DebugInfo/dwarfdump-objc.test | 40 ++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 test/DebugInfo/Inputs/dwarfdump-objc.m create mode 100644 test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o create mode 100644 test/DebugInfo/dwarfdump-objc.test diff --git a/lib/DebugInfo/DWARFDebugInfoEntry.cpp b/lib/DebugInfo/DWARFDebugInfoEntry.cpp index 559667299ca..15c04cb949b 100644 --- a/lib/DebugInfo/DWARFDebugInfoEntry.cpp +++ b/lib/DebugInfo/DWARFDebugInfoEntry.cpp @@ -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(raw_ostream &OS, DWARFUnit *u, } } +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::dumpAttribute(raw_ostream &OS, 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 OptVal = formValue.getAsUnsignedConstant()) + dumpApplePropertyAttribute(OS, *OptVal); } OS << ")\n"; diff --git a/test/DebugInfo/Inputs/dwarfdump-objc.m b/test/DebugInfo/Inputs/dwarfdump-objc.m new file mode 100644 index 00000000000..54fbee2ac39 --- /dev/null +++ b/test/DebugInfo/Inputs/dwarfdump-objc.m @@ -0,0 +1,16 @@ +// Compile with clang -g dwarfdump-objc.m -c -Wno-objc-root-class + +@interface NSObject {} @end + + +@interface TestInterface +@property (readonly) int ReadOnly; +@property (assign) int Assign; +@property (readwrite) int ReadWrite; +@property (retain) NSObject *Retain; +@property (copy) NSObject *Copy; +@property (nonatomic) int NonAtomic; +@end + +@implementation TestInterface +@end diff --git a/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o b/test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o new file mode 100644 index 0000000000000000000000000000000000000000..6b55d38ce91db67d1f11e3a5c78c5ebc82f3ee98 GIT binary patch literal 11512 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 literal 0 HcmV?d00001 diff --git a/test/DebugInfo/dwarfdump-objc.test b/test/DebugInfo/dwarfdump-objc.test new file mode 100644 index 00000000000..6890c3a0471 --- /dev/null +++ b/test/DebugInfo/dwarfdump-objc.test @@ -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)) + -- 2.34.1