hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1992-2017 Free Software Foundation, Inc.
Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
and David MacKenzie.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License". -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>STABS: Methods</title>
 
<meta name="description" content="STABS: Methods">
<meta name="keywords" content="STABS: Methods">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Symbol-Types-Index.html#Symbol-Types-Index" rel="index" title="Symbol Types Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Cplusplus.html#Cplusplus" rel="up" title="Cplusplus">
<link href="Method-Type-Descriptor.html#Method-Type-Descriptor" rel="next" title="Method Type Descriptor">
<link href="Class-Instance.html#Class-Instance" rel="prev" title="Class Instance">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Methods"></a>
<div class="header">
<p>
Next: <a href="Method-Type-Descriptor.html#Method-Type-Descriptor" accesskey="n" rel="next">Method Type Descriptor</a>, Previous: <a href="Class-Instance.html#Class-Instance" accesskey="p" rel="prev">Class Instance</a>, Up: <a href="Cplusplus.html#Cplusplus" accesskey="u" rel="up">Cplusplus</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Types-Index.html#Symbol-Types-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Method-Definition"></a>
<h3 class="section">8.6 Method Definition</h3>
 
<p>The class definition shown above declares Ameth.  The C<tt>++</tt> source below
defines Ameth:
</p>
<div class="example">
<pre class="example">int
baseA::Ameth(int in, char other)
{
        return in;
};
</pre></div>
 
 
<p>This method definition yields three stabs following the code of the
method.  One stab describes the method itself and following two describe
its parameters.  Although there is only one formal argument all methods
have an implicit argument which is the <code>this</code> pointer.  The <code>this</code>
pointer is a pointer to the object on which the method was called.  Note
that the method name is mangled to encode the class name and argument
types.  Name mangling is described in the <small>ARM</small> (<cite>The Annotated
C++ Reference Manual</cite>, by Ellis and Stroustrup, <small>ISBN</small>
0-201-51459-1); <samp>gpcompare.texi</samp> in Cygnus GCC distributions
describes the differences between GNU mangling and <small>ARM</small>
mangling.
</p>
<div class="example">
<pre class="example">.stabs &quot;name:symbol_descriptor(global function)return_type(int)&quot;,
        N_FUN, NIL, NIL, code_addr_of_method_start
 
.stabs &quot;Ameth__5baseAic:F1&quot;,36,0,0,_Ameth__5baseAic
</pre></div>
 
<p>Here is the stab for the <code>this</code> pointer implicit argument.  The
name of the <code>this</code> pointer is always <code>this</code>.  Type 19, the
<code>this</code> pointer is defined as a pointer to type 20, <code>baseA</code>,
but a stab defining <code>baseA</code> has not yet been emitted.  Since the
compiler knows it will be emitted shortly, here it just outputs a cross
reference to the undefined symbol, by prefixing the symbol name with
&lsquo;<samp>xs</samp>&rsquo;.
</p>
<div class="example">
<pre class="example">.stabs &quot;name:sym_desc(register param)type_def(19)=
        type_desc(ptr to)type_ref(baseA)=
        type_desc(cross-reference to)baseA:&quot;,N_RSYM,NIL,NIL,register_number
 
.stabs &quot;this:P19=*20=xsbaseA:&quot;,64,0,0,8
</pre></div>
 
<p>The stab for the explicit integer argument looks just like a parameter
to a C function.  The last field of the stab is the offset from the
argument pointer, which in most systems is the same as the frame
pointer.
</p>
<div class="example">
<pre class="example">.stabs &quot;name:sym_desc(value parameter)type_ref(int)&quot;,
        N_PSYM,NIL,NIL,offset_from_arg_ptr
 
.stabs &quot;in:p1&quot;,160,0,0,72
</pre></div>
 
<p>&lt;&lt; The examples that follow are based on A1.C &gt;&gt;
</p>
<hr>
<div class="header">
<p>
Next: <a href="Method-Type-Descriptor.html#Method-Type-Descriptor" accesskey="n" rel="next">Method Type Descriptor</a>, Previous: <a href="Class-Instance.html#Class-Instance" accesskey="p" rel="prev">Class Instance</a>, Up: <a href="Cplusplus.html#Cplusplus" accesskey="u" rel="up">Cplusplus</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Types-Index.html#Symbol-Types-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>