aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2011-11-15 01:11:58 +0000
committerDevang Patel <dpatel@apple.com>2011-11-15 01:11:58 +0000
commit43e6f7624f100c048db34eb0c64d535421f323ff (patch)
treebb40dd100e395dc7fd44d5536044357b6c37cdfd /docs
parent2a8cd57566dd0eb62831b4c7429e46947a52a879 (diff)
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.html237
1 files changed, 237 insertions, 0 deletions
diff --git a/docs/ObjCPropertyDebugInfo.html b/docs/ObjCPropertyDebugInfo.html
new file mode 100644
index 0000000000..c1482cf173
--- /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>