Next: , Previous: Class Instance, Up: Cplusplus


8.6 Method Definition

The class definition shown above declares Ameth. The C++ source below defines Ameth:

     int
     baseA::Ameth(int in, char other)
     {
             return in;
     };

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 this pointer. The this 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 arm (The Annotated C++ Reference Manual, by Ellis and Stroustrup, isbn 0-201-51459-1); gpcompare.texi in Cygnus GCC distributions describes the differences between GNU mangling and arm mangling.

     .stabs "name:symbol_descriptor(global function)return_type(int)",
             N_FUN, NIL, NIL, code_addr_of_method_start
     
     .stabs "Ameth__5baseAic:F1",36,0,0,_Ameth__5baseAic

Here is the stab for the this pointer implicit argument. The name of the this pointer is always this. Type 19, the this pointer is defined as a pointer to type 20, baseA, but a stab defining baseA 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 ‘xs’.

     .stabs "name:sym_desc(register param)type_def(19)=
             type_desc(ptr to)type_ref(baseA)=
             type_desc(cross-reference to)baseA:",N_RSYM,NIL,NIL,register_number
     
     .stabs "this:P19=*20=xsbaseA:",64,0,0,8

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.

     .stabs "name:sym_desc(value parameter)type_ref(int)",
             N_PSYM,NIL,NIL,offset_from_arg_ptr
     
     .stabs "in:p1",160,0,0,72

<< The examples that follow are based on A1.C >>