From 43e6f7624f100c048db34eb0c64d535421f323ff Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 15 Nov 2011 01:11:58 +0000 Subject: [PATCH] Document debug info support for objective-c properties. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144599 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/ObjCPropertyDebugInfo.html | 237 ++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 docs/ObjCPropertyDebugInfo.html diff --git a/docs/ObjCPropertyDebugInfo.html b/docs/ObjCPropertyDebugInfo.html new file mode 100644 index 00000000000..c1482cf173c --- /dev/null +++ b/docs/ObjCPropertyDebugInfo.html @@ -0,0 +1,237 @@ + + + + + Debugging Information Extension for Objective C Properties + + + + +

+ Debugging Information Extension for Objective C Properties +

+ +
    +
  1. Introduction
  2. +
  3. Proposal
  4. +
  5. New DWARF Attributes
  6. +
  7. New DWARF Constants
  8. + +
+ +
+

Written by Jim Ingham and Devang Patel

+
+ + +

+ Introduction +

+ + +
+

Objective C provides a simpler way to declare and define accessor methods +using declared properties. The language provides features to declare a +property and to let compiler synthesize accessor methods. +

+ +

The debugger lets developer inspect Objective C interfaces and their +instance variables and class variables. However, the debugger does not know +anything about the properties defined in Objective C interfaces. The debugger +consumes information generated by compiler in DWARF format. The format does +not support encoding of Objective C properties. This proposal describes DWARF +extensions to encode Objective C properties, which the debugger can use to let +developers inspect Objective C properties. +

+ +
+ + + +

+ Proposal +

+ + +
+

Objective C properties are always backed by an instance variable. The +instance variables backing properties are identified using +DW_AT_APPLE_property_name attribute. The instance variables with this +attribute may not have data location attributes. The location of instance +variables is determined by debugger only after consulting Objective C runtime. +

+ +
+
+@interface I1 { 
+  int n2;
+} 
+
+@property p1; 
+@property p2; 
+@end
+
+@implementation I1 
+@synthesize p1; 
+@synthesize p2 = n2; 
+@end
+
+
+TAG_structure_type [7] * 
+  AT_APPLE_runtime_class( 0x10 )
+  AT_name( "I1" )
+  AT_decl_file( "Objc_Property.m" ) 
+  AT_decl_line( 3 )
+
+  TAG_member [8] 
+    AT_name( "p1" )
+    AT_APPLE_property_name(“p1”) 
+    AT_type( {0x00000147} ( int ) )
+
+  TAG_member [8] 
+    AT_name( "n2" )
+    AT_APPLE_property_name(“p2”) 
+    AT_type( {0x00000147} ( int ) )
+
+
+ +

Developers can decorate a property with attributes which are encoded using +DW_AT_APPLE_property_attribute. +

+ +
+
+@property (readonly, nonatomic) int pr;
+
+
+TAG_member [8] 
+  AT_name(“pr”) 
+  AT_APPLE_property_name(“pr”) 
+  AT_type ( {0x00000147} (int) ) 
+  AT_APPLE_property_attribute (DW_APPLE_PROPERTY_readonly, DW_APPLE_PROPERTY_nonatomic)
+
+
+ +

The setter and getter method names are attached to the property using +DW_AT_APPLE_property_setter and DW_AT_APPLE_property_getter attributes. +

+
+
+@interface I1 
+@property (setter=myOwnP3Setter:) int p3; 
+-(void)myOwnP3Setter:(int)a; 
+@end
+
+@implementation I1 
+@synthesize p3;
+-(void)myOwnP3Setter:(int)a{ } 
+@end
+
+0x000003bd: TAG_structure_type [7] * 
+              AT_APPLE_runtime_class( 0x10 )
+              AT_name( "I1" )
+              AT_decl_file( "Objc_Property.m" ) 
+              AT_decl_line( 3 )
+0x000003f3: TAG_member [8] 
+              AT_name( "p3" ) 
+              AT_APPLE_property_name(“p3”) 
+              AT_APPLE_property_setter(“myOwnP3Setter:”)
+              AT_type( {0x00000147} ( int ) )
+
+
+ +
+ + +

+ New DWARF Attributes +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeValueClasses
DW_AT_APPLE_property_name0x3fe8String
DW_AT_APPLE_property_getter0x3fe9String
DW_AT_APPLE_property_setter0x3feaString
DW_AT_APPLE_property_attribute0x3febConstant
+ +
+ + +

+ New DWARF Constants +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValue
DW_AT_APPLE_PROPERTY_readonly0x1
DW_AT_APPLE_PROPERTY_readwrite0x2
DW_AT_APPLE_PROPERTY_assign0x4
DW_AT_APPLE_PROPERTY_retain0x8
DW_AT_APPLE_PROPERTY_copy0x10
DW_AT_APPLE_PROPERTY_nonatomic0x20
+ +
+ + + +
+
+ Valid CSS + Valid HTML 4.01 + + LLVM Compiler Infrastructure
+ Last modified: $Date: 2011-11-14 $ +
+ + +