mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-20 17:03:09 +00:00
[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
This commit is contained in:
parent
dd2cb9cae7
commit
0f65dfd92b
@ -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<uint64_t> OptVal = formValue.getAsUnsignedConstant())
|
||||
dumpApplePropertyAttribute(OS, *OptVal);
|
||||
}
|
||||
|
||||
OS << ")\n";
|
||||
|
16
test/DebugInfo/Inputs/dwarfdump-objc.m
Normal file
16
test/DebugInfo/Inputs/dwarfdump-objc.m
Normal file
@ -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
|
BIN
test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o
Normal file
BIN
test/DebugInfo/Inputs/dwarfdump-objc.x86_64.o
Normal file
Binary file not shown.
40
test/DebugInfo/dwarfdump-objc.test
Normal file
40
test/DebugInfo/dwarfdump-objc.test
Normal file
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user