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