diff options
author | Devang Patel <dpatel@apple.com> | 2011-11-15 01:11:58 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-11-15 01:11:58 +0000 |
commit | 43e6f7624f100c048db34eb0c64d535421f323ff (patch) | |
tree | bb40dd100e395dc7fd44d5536044357b6c37cdfd /docs | |
parent | 2a8cd57566dd0eb62831b4c7429e46947a52a879 (diff) | |
download | external_llvm-43e6f7624f100c048db34eb0c64d535421f323ff.zip external_llvm-43e6f7624f100c048db34eb0c64d535421f323ff.tar.gz external_llvm-43e6f7624f100c048db34eb0c64d535421f323ff.tar.bz2 |
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
Diffstat (limited to 'docs')
-rw-r--r-- | docs/ObjCPropertyDebugInfo.html | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/docs/ObjCPropertyDebugInfo.html b/docs/ObjCPropertyDebugInfo.html new file mode 100644 index 0000000..c1482cf --- /dev/null +++ b/docs/ObjCPropertyDebugInfo.html @@ -0,0 +1,237 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Debugging Information Extension for Objective C Properties</title> + <link rel="stylesheet" href="llvm.css" type="text/css"> +</head> +<body> + +<h1> + Debugging Information Extension for Objective C Properties +</h1> + +<ol> + <li><a href="#introduction">Introduction</a></li> + <li><a href="#proposal">Proposal</a></li> + <li><a href="#newattributes">New DWARF Attributes</a></li> + <li><a href="#newconstants">New DWARF Constants</a></li> + +</ol> + +<div class="doc_author"> + <p>Written by Jim Ingham and Devang Patel </p> +</div> + +<!-- *********************************************************************** --> +<h2> + <a name="introduction">Introduction</a> +</h2> +<!-- *********************************************************************** --> + +<div> +<p>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. +</p> + +<p>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. +</p> + +</div> + + +<!-- *********************************************************************** --> +<h2> + <a name="proposal">Proposal</a> +</h2> +<!-- *********************************************************************** --> + +<div> +<p>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. +</p> + +<div class="doc_code"> +<pre> +@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 ) ) +</pre> +</div> + +<p> Developers can decorate a property with attributes which are encoded using +DW_AT_APPLE_property_attribute. +</p> + +<div class="doc_code"> +<pre> +@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) +</pre> +</div> + +<p> The setter and getter method names are attached to the property using +DW_AT_APPLE_property_setter and DW_AT_APPLE_property_getter attributes. +</p> +<div class="doc_code"> +<pre> +@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 ) ) +</pre> +</div> + +</div> + +<!-- *********************************************************************** --> +<h2> + <a name="newattributes">New DWARF Attributes</a> +</h2> +<!-- *********************************************************************** --> + +<div> +<table border="1" cellspacing="0"> + <tr> + <th width=200 >Attribute</th> + <th width=200 >Value</th> + <th width=200 >Classes</th> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_property_name</td> + <td width=200 >0x3fe8</td> + <td width=200 >String</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_property_getter</td> + <td width=200 >0x3fe9</td> + <td width=200 >String</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_property_setter</td> + <td width=200 >0x3fea</td> + <td width=200 >String</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_property_attribute</td> + <td width=200 >0x3feb</td> + <td width=200 >Constant</td> + </tr> +</table> + +</div> + +<!-- *********************************************************************** --> +<h2> + <a name="newconstants">New DWARF Constants</a> +</h2> +<!-- *********************************************************************** --> + +<div> +<table border="1" cellspacing="0"> + <tr> + <th width=200 >Name</th> + <th width=200 >Value</th> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_readonly</td> + <td width=200 >0x1</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_readwrite</td> + <td width=200 >0x2</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_assign</td> + <td width=200 >0x4</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_retain</td> + <td width=200 >0x8</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_copy</td> + <td width=200 >0x10</td> + </tr> + <tr> + <td width=200 >DW_AT_APPLE_PROPERTY_nonatomic</td> + <td width=200 >0x20</td> + </tr> +</table> + +</div> + +<!-- *********************************************************************** --> + +<hr> +<address> + <a href="http://jigsaw.w3.org/css-validator/check/referer"><img + src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a> + <a href="http://validator.w3.org/check/referer"><img + src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a> + + <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br> + Last modified: $Date: 2011-11-14 $ +</address> + +</body> +</html> |