mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 02:07:16 +00:00
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
This commit is contained in:
parent
2a8cd57566
commit
43e6f7624f
237
docs/ObjCPropertyDebugInfo.html
Normal file
237
docs/ObjCPropertyDebugInfo.html
Normal file
@ -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>
|
Loading…
Reference in New Issue
Block a user