From 8cd896404aee9f112fa7f00a7c7f64e2d015b28e Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 15 Nov 2011 22:59:54 +0000 Subject: Merge ObjCPropertyDebugInfo.html into SourceLevelDebugging.html llvm-svn: 144724 --- llvm/docs/SourceLevelDebugging.html | 224 ++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) (limited to 'llvm/docs/SourceLevelDebugging.html') diff --git a/llvm/docs/SourceLevelDebugging.html b/llvm/docs/SourceLevelDebugging.html index 6eaaa240c14..f2741a2e017 100644 --- a/llvm/docs/SourceLevelDebugging.html +++ b/llvm/docs/SourceLevelDebugging.html @@ -53,6 +53,19 @@
  • C/C++ struct/union types
  • C/C++ enumeration types
  • +
  • LLVM Dwarf Extensions +
      +
    1. Debugging Information Extension + for Objective C Properties
    2. + + +
    +
  • @@ -1803,6 +1816,217 @@ enum Trees { + + +

    + Debugging information format +

    + +
    + +

    + Debugging Information Extension for Objective C +Properties +

    +
    + +

    + 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
    + +
    +
    +
    +
    -- cgit v1.2.3