4c36dd8cb94ff3ddccb35f64d6c36b07a5d92f94
[external/binutils.git] / gdb / doc / stabs.info-1
1 This is Info file stabs.info, produced by Makeinfo version 1.68 from
2 the input file ./stabs.texinfo.
3
4 START-INFO-DIR-ENTRY
5 * Stabs: (stabs).                 The "stabs" debugging information format.
6 END-INFO-DIR-ENTRY
7
8    This document describes the stabs debugging symbol tables.
9
10    Copyright 1992, 93, 94, 95, 97, 1998 Free Software Foundation, Inc.
11 Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
12 and David MacKenzie.
13
14    Permission is granted to make and distribute verbatim copies of this
15 manual provided the copyright notice and this permission notice are
16 preserved on all copies.
17
18    Permission is granted to copy or distribute modified versions of this
19 manual under the terms of the GPL (for which purpose this text may be
20 regarded as a program in the language TeX).
21
22 \1f
23 File: stabs.info,  Node: Top,  Next: Overview,  Up: (dir)
24
25 The "stabs" representation of debugging information
26 ***************************************************
27
28    This document describes the stabs debugging format.
29
30 * Menu:
31
32 * Overview::                    Overview of stabs
33 * Program Structure::           Encoding of the structure of the program
34 * Constants::                   Constants
35 * Variables::
36 * Types::                       Type definitions
37 * Symbol Tables::               Symbol information in symbol tables
38 * Cplusplus::                   Stabs specific to C++
39 * Stab Types::                  Symbol types in a.out files
40 * Symbol Descriptors::          Table of symbol descriptors
41 * Type Descriptors::            Table of type descriptors
42 * Expanded Reference::          Reference information by stab type
43 * Questions::                   Questions and anomolies
44 * Stab Sections::               In some object file formats, stabs are
45                                 in sections.
46 * Symbol Types Index::          Index of symbolic stab symbol type names.
47
48 \1f
49 File: stabs.info,  Node: Overview,  Next: Program Structure,  Prev: Top,  Up: Top
50
51 Overview of Stabs
52 *****************
53
54    "Stabs" refers to a format for information that describes a program
55 to a debugger.  This format was apparently invented by Peter Kessler at
56 the University of California at Berkeley, for the `pdx' Pascal
57 debugger; the format has spread widely since then.
58
59    This document is one of the few published sources of documentation on
60 stabs.  It is believed to be comprehensive for stabs used by C.  The
61 lists of symbol descriptors (*note Symbol Descriptors::.) and type
62 descriptors (*note Type Descriptors::.) are believed to be completely
63 comprehensive.  Stabs for COBOL-specific features and for variant
64 records (used by Pascal and Modula-2) are poorly documented here.
65
66    Other sources of information on stabs are `Dbx and Dbxtool
67 Interfaces', 2nd edition, by Sun, 1988, and `AIX Version 3.2 Files
68 Reference', Fourth Edition, September 1992, "dbx Stabstring Grammar" in
69 the a.out section, page 2-31.  This document is believed to incorporate
70 the information from those two sources except where it explicitly
71 directs you to them for more information.
72
73 * Menu:
74
75 * Flow::                        Overview of debugging information flow
76 * Stabs Format::                Overview of stab format
77 * String Field::                The string field
78 * C Example::                   A simple example in C source
79 * Assembly Code::               The simple example at the assembly level
80
81 \1f
82 File: stabs.info,  Node: Flow,  Next: Stabs Format,  Up: Overview
83
84 Overview of Debugging Information Flow
85 ======================================
86
87    The GNU C compiler compiles C source in a `.c' file into assembly
88 language in a `.s' file, which the assembler translates into a `.o'
89 file, which the linker combines with other `.o' files and libraries to
90 produce an executable file.
91
92    With the `-g' option, GCC puts in the `.s' file additional debugging
93 information, which is slightly transformed by the assembler and linker,
94 and carried through into the final executable.  This debugging
95 information describes features of the source file like line numbers,
96 the types and scopes of variables, and function names, parameters, and
97 scopes.
98
99    For some object file formats, the debugging information is
100 encapsulated in assembler directives known collectively as "stab"
101 (symbol table) directives, which are interspersed with the generated
102 code.  Stabs are the native format for debugging information in the
103 a.out and XCOFF object file formats.  The GNU tools can also emit stabs
104 in the COFF and ECOFF object file formats.
105
106    The assembler adds the information from stabs to the symbol
107 information it places by default in the symbol table and the string
108 table of the `.o' file it is building.  The linker consolidates the `.o'
109 files into one executable file, with one symbol table and one string
110 table.  Debuggers use the symbol and string tables in the executable as
111 a source of debugging information about the program.
112
113 \1f
114 File: stabs.info,  Node: Stabs Format,  Next: String Field,  Prev: Flow,  Up: Overview
115
116 Overview of Stab Format
117 =======================
118
119    There are three overall formats for stab assembler directives,
120 differentiated by the first word of the stab.  The name of the directive
121 describes which combination of four possible data fields follows.  It is
122 either `.stabs' (string), `.stabn' (number), or `.stabd' (dot).  IBM's
123 XCOFF assembler uses `.stabx' (and some other directives such as
124 `.file' and `.bi') instead of `.stabs', `.stabn' or `.stabd'.
125
126    The overall format of each class of stab is:
127
128      .stabs "STRING",TYPE,OTHER,DESC,VALUE
129      .stabn TYPE,OTHER,DESC,VALUE
130      .stabd TYPE,OTHER,DESC
131      .stabx "STRING",VALUE,TYPE,SDB-TYPE
132
133    For `.stabn' and `.stabd', there is no STRING (the `n_strx' field is
134 zero; see *Note Symbol Tables::).  For `.stabd', the VALUE field is
135 implicit and has the value of the current file location.  For `.stabx',
136 the SDB-TYPE field is unused for stabs and can always be set to zero.
137 The OTHER field is almost always unused and can be set to zero.
138
139    The number in the TYPE field gives some basic information about
140 which type of stab this is (or whether it *is* a stab, as opposed to an
141 ordinary symbol).  Each valid type number defines a different stab
142 type; further, the stab type defines the exact interpretation of, and
143 possible values for, any remaining STRING, DESC, or VALUE fields
144 present in the stab.  *Note Stab Types::, for a list in numeric order
145 of the valid TYPE field values for stab directives.
146
147 \1f
148 File: stabs.info,  Node: String Field,  Next: C Example,  Prev: Stabs Format,  Up: Overview
149
150 The String Field
151 ================
152
153    For most stabs the string field holds the meat of the debugging
154 information.  The flexible nature of this field is what makes stabs
155 extensible.  For some stab types the string field contains only a name.
156 For other stab types the contents can be a great deal more complex.
157
158    The overall format of the string field for most stab types is:
159
160      "NAME:SYMBOL-DESCRIPTOR TYPE-INFORMATION"
161
162    NAME is the name of the symbol represented by the stab; it can
163 contain a pair of colons (*note Nested Symbols::.).  NAME can be
164 omitted, which means the stab represents an unnamed object.  For
165 example, `:t10=*2' defines type 10 as a pointer to type 2, but does not
166 give the type a name.  Omitting the NAME field is supported by AIX dbx
167 and GDB after about version 4.8, but not other debuggers.  GCC
168 sometimes uses a single space as the name instead of omitting the name
169 altogether; apparently that is supported by most debuggers.
170
171    The SYMBOL-DESCRIPTOR following the `:' is an alphabetic character
172 that tells more specifically what kind of symbol the stab represents.
173 If the SYMBOL-DESCRIPTOR is omitted, but type information follows, then
174 the stab represents a local variable.  For a list of symbol
175 descriptors, see *Note Symbol Descriptors::.  The `c' symbol descriptor
176 is an exception in that it is not followed by type information.  *Note
177 Constants::.
178
179    TYPE-INFORMATION is either a TYPE-NUMBER, or `TYPE-NUMBER='.  A
180 TYPE-NUMBER alone is a type reference, referring directly to a type
181 that has already been defined.
182
183    The `TYPE-NUMBER=' form is a type definition, where the number
184 represents a new type which is about to be defined.  The type
185 definition may refer to other types by number, and those type numbers
186 may be followed by `=' and nested definitions.  Also, the Lucid
187 compiler will repeat `TYPE-NUMBER=' more than once if it wants to
188 define several type numbers at once.
189
190    In a type definition, if the character that follows the equals sign
191 is non-numeric then it is a TYPE-DESCRIPTOR, and tells what kind of
192 type is about to be defined.  Any other values following the
193 TYPE-DESCRIPTOR vary, depending on the TYPE-DESCRIPTOR.  *Note Type
194 Descriptors::, for a list of TYPE-DESCRIPTOR values.  If a number
195 follows the `=' then the number is a TYPE-REFERENCE.  For a full
196 description of types, *Note Types::.
197
198    A TYPE-NUMBER is often a single number.  The GNU and Sun tools
199 additionally permit a TYPE-NUMBER to be a pair
200 (FILE-NUMBER,FILETYPE-NUMBER) (the parentheses appear in the string,
201 and serve to distinguish the two cases).  The FILE-NUMBER is a number
202 starting with 1 which is incremented for each seperate source file in
203 the compilation (e.g., in C, each header file gets a different number).
204 The FILETYPE-NUMBER is a number starting with 1 which is incremented
205 for each new type defined in the file.  (Separating the file number and
206 the type number permits the `N_BINCL' optimization to succeed more
207 often; see *Note Include Files::).
208
209    There is an AIX extension for type attributes.  Following the `='
210 are any number of type attributes.  Each one starts with `@' and ends
211 with `;'.  Debuggers, including AIX's dbx and GDB 4.10, skip any type
212 attributes they do not recognize.  GDB 4.9 and other versions of dbx
213 may not do this.  Because of a conflict with C++ (*note Cplusplus::.),
214 new attributes should not be defined which begin with a digit, `(', or
215 `-'; GDB may be unable to distinguish those from the C++ type
216 descriptor `@'.  The attributes are:
217
218 `aBOUNDARY'
219      BOUNDARY is an integer specifying the alignment.  I assume it
220      applies to all variables of this type.
221
222 `pINTEGER'
223      Pointer class (for checking).  Not sure what this means, or how
224      INTEGER is interpreted.
225
226 `P'
227      Indicate this is a packed type, meaning that structure fields or
228      array elements are placed more closely in memory, to save memory
229      at the expense of speed.
230
231 `sSIZE'
232      Size in bits of a variable of this type.  This is fully supported
233      by GDB 4.11 and later.
234
235 `S'
236      Indicate that this type is a string instead of an array of
237      characters, or a bitstring instead of a set.  It doesn't change
238      the layout of the data being represented, but does enable the
239      debugger to know which type it is.
240
241    All of this can make the string field quite long.  All versions of
242 GDB, and some versions of dbx, can handle arbitrarily long strings.
243 But many versions of dbx (or assemblers or linkers, I'm not sure which)
244 cretinously limit the strings to about 80 characters, so compilers which
245 must work with such systems need to split the `.stabs' directive into
246 several `.stabs' directives.  Each stab duplicates every field except
247 the string field.  The string field of every stab except the last is
248 marked as continued with a backslash at the end (in the assembly code
249 this may be written as a double backslash, depending on the assembler).
250 Removing the backslashes and concatenating the string fields of each
251 stab produces the original, long string.  Just to be incompatible (or so
252 they don't have to worry about what the assembler does with
253 backslashes), AIX can use `?' instead of backslash.
254
255 \1f
256 File: stabs.info,  Node: C Example,  Next: Assembly Code,  Prev: String Field,  Up: Overview
257
258 A Simple Example in C Source
259 ============================
260
261    To get the flavor of how stabs describe source information for a C
262 program, let's look at the simple program:
263
264      main()
265      {
266              printf("Hello world");
267      }
268
269    When compiled with `-g', the program above yields the following `.s'
270 file.  Line numbers have been added to make it easier to refer to parts
271 of the `.s' file in the description of the stabs that follows.
272
273 \1f
274 File: stabs.info,  Node: Assembly Code,  Prev: C Example,  Up: Overview
275
276 The Simple Example at the Assembly Level
277 ========================================
278
279    This simple "hello world" example demonstrates several of the stab
280 types used to describe C language source files.
281
282      1  gcc2_compiled.:
283      2  .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
284      3  .stabs "hello.c",100,0,0,Ltext0
285      4  .text
286      5  Ltext0:
287      6  .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
288      7  .stabs "char:t2=r2;0;127;",128,0,0,0
289      8  .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
290      9  .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
291      10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
292      11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
293      12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
294      13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
295      14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
296      15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
297      16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
298      17 .stabs "float:t12=r1;4;0;",128,0,0,0
299      18 .stabs "double:t13=r1;8;0;",128,0,0,0
300      19 .stabs "long double:t14=r1;8;0;",128,0,0,0
301      20 .stabs "void:t15=15",128,0,0,0
302      21      .align 4
303      22 LC0:
304      23      .ascii "Hello, world!\12\0"
305      24      .align 4
306      25      .global _main
307      26      .proc 1
308      27 _main:
309      28 .stabn 68,0,4,LM1
310      29 LM1:
311      30      !#PROLOGUE# 0
312      31      save %sp,-136,%sp
313      32      !#PROLOGUE# 1
314      33      call ___main,0
315      34      nop
316      35 .stabn 68,0,5,LM2
317      36 LM2:
318      37 LBB2:
319      38      sethi %hi(LC0),%o1
320      39      or %o1,%lo(LC0),%o0
321      40      call _printf,0
322      41      nop
323      42 .stabn 68,0,6,LM3
324      43 LM3:
325      44 LBE2:
326      45 .stabn 68,0,6,LM4
327      46 LM4:
328      47 L1:
329      48      ret
330      49      restore
331      50 .stabs "main:F1",36,0,0,_main
332      51 .stabn 192,0,0,LBB2
333      52 .stabn 224,0,0,LBE2
334
335 \1f
336 File: stabs.info,  Node: Program Structure,  Next: Constants,  Prev: Overview,  Up: Top
337
338 Encoding the Structure of the Program
339 *************************************
340
341    The elements of the program structure that stabs encode include the
342 name of the main function, the names of the source and include files,
343 the line numbers, procedure names and types, and the beginnings and
344 ends of blocks of code.
345
346 * Menu:
347
348 * Main Program::                Indicate what the main program is
349 * Source Files::                The path and name of the source file
350 * Include Files::               Names of include files
351 * Line Numbers::
352 * Procedures::
353 * Nested Procedures::
354 * Block Structure::
355 * Alternate Entry Points::      Entering procedures except at the beginning.
356
357 \1f
358 File: stabs.info,  Node: Main Program,  Next: Source Files,  Up: Program Structure
359
360 Main Program
361 ============
362
363    Most languages allow the main program to have any name.  The
364 `N_MAIN' stab type tells the debugger the name that is used in this
365 program.  Only the string field is significant; it is the name of a
366 function which is the main program.  Most C compilers do not use this
367 stab (they expect the debugger to assume that the name is `main'), but
368 some C compilers emit an `N_MAIN' stab for the `main' function.  I'm
369 not sure how XCOFF handles this.
370
371 \1f
372 File: stabs.info,  Node: Source Files,  Next: Include Files,  Prev: Main Program,  Up: Program Structure
373
374 Paths and Names of the Source Files
375 ===================================
376
377    Before any other stabs occur, there must be a stab specifying the
378 source file.  This information is contained in a symbol of stab type
379 `N_SO'; the string field contains the name of the file.  The value of
380 the symbol is the start address of the portion of the text section
381 corresponding to that file.
382
383    With the Sun Solaris2 compiler, the desc field contains a
384 source-language code.
385
386    Some compilers (for example, GCC2 and SunOS4 `/bin/cc') also include
387 the directory in which the source was compiled, in a second `N_SO'
388 symbol preceding the one containing the file name.  This symbol can be
389 distinguished by the fact that it ends in a slash.  Code from the
390 `cfront' C++ compiler can have additional `N_SO' symbols for
391 nonexistent source files after the `N_SO' for the real source file;
392 these are believed to contain no useful information.
393
394    For example:
395
396      .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0     # 100 is N_SO
397      .stabs "hello.c",100,0,0,Ltext0
398              .text
399      Ltext0:
400
401    Instead of `N_SO' symbols, XCOFF uses a `.file' assembler directive
402 which assembles to a `C_FILE' symbol; explaining this in detail is
403 outside the scope of this document.
404
405    If it is useful to indicate the end of a source file, this is done
406 with an `N_SO' symbol with an empty string for the name.  The value is
407 the address of the end of the text section for the file.  For some
408 systems, there is no indication of the end of a source file, and you
409 just need to figure it ended when you see an `N_SO' for a different
410 source file, or a symbol ending in `.o' (which at least some linkers
411 insert to mark the start of a new `.o' file).
412
413 \1f
414 File: stabs.info,  Node: Include Files,  Next: Line Numbers,  Prev: Source Files,  Up: Program Structure
415
416 Names of Include Files
417 ======================
418
419    There are several schemes for dealing with include files: the
420 traditional `N_SOL' approach, Sun's `N_BINCL' approach, and the XCOFF
421 `C_BINCL' approach (which despite the similar name has little in common
422 with `N_BINCL').
423
424    An `N_SOL' symbol specifies which include file subsequent symbols
425 refer to.  The string field is the name of the file and the value is the
426 text address corresponding to the end of the previous include file and
427 the start of this one.  To specify the main source file again, use an
428 `N_SOL' symbol with the name of the main source file.
429
430    The `N_BINCL' approach works as follows.  An `N_BINCL' symbol
431 specifies the start of an include file.  In an object file, only the
432 string is significant; the linker puts data into some of the other
433 fields.  The end of the include file is marked by an `N_EINCL' symbol
434 (which has no string field).  In an object file, there is no
435 significant data in the `N_EINCL' symbol.  `N_BINCL' and `N_EINCL' can
436 be nested.
437
438    If the linker detects that two source files have identical stabs
439 between an `N_BINCL' and `N_EINCL' pair (as will generally be the case
440 for a header file), then it only puts out the stabs once.  Each
441 additional occurance is replaced by an `N_EXCL' symbol.  I believe the
442 GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
443 ones which supports this feature.
444
445    A linker which supports this feature will set the value of a
446 `N_BINCL' symbol to the total of all the characters in the stabs
447 strings included in the header file, omitting any file numbers.  The
448 value of an `N_EXCL' symbol is the same as the value of the `N_BINCL'
449 symbol it replaces.  This information can be used to match up `N_EXCL'
450 and `N_BINCL' symbols which have the same filename.  The `N_EINCL'
451 value, and the values of the other and description fields for all
452 three, appear to always be zero.
453
454    For the start of an include file in XCOFF, use the `.bi' assembler
455 directive, which generates a `C_BINCL' symbol.  A `.ei' directive,
456 which generates a `C_EINCL' symbol, denotes the end of the include
457 file.  Both directives are followed by the name of the source file in
458 quotes, which becomes the string for the symbol.  The value of each
459 symbol, produced automatically by the assembler and linker, is the
460 offset into the executable of the beginning (inclusive, as you'd
461 expect) or end (inclusive, as you would not expect) of the portion of
462 the COFF line table that corresponds to this include file.  `C_BINCL'
463 and `C_EINCL' do not nest.
464
465 \1f
466 File: stabs.info,  Node: Line Numbers,  Next: Procedures,  Prev: Include Files,  Up: Program Structure
467
468 Line Numbers
469 ============
470
471    An `N_SLINE' symbol represents the start of a source line.  The desc
472 field contains the line number and the value contains the code address
473 for the start of that source line.  On most machines the address is
474 absolute; for stabs in sections (*note Stab Sections::.), it is
475 relative to the function in which the `N_SLINE' symbol occurs.
476
477    GNU documents `N_DSLINE' and `N_BSLINE' symbols for line numbers in
478 the data or bss segments, respectively.  They are identical to
479 `N_SLINE' but are relocated differently by the linker.  They were
480 intended to be used to describe the source location of a variable
481 declaration, but I believe that GCC2 actually puts the line number in
482 the desc field of the stab for the variable itself.  GDB has been
483 ignoring these symbols (unless they contain a string field) since at
484 least GDB 3.5.
485
486    For single source lines that generate discontiguous code, such as
487 flow of control statements, there may be more than one line number
488 entry for the same source line.  In this case there is a line number
489 entry at the start of each code range, each with the same line number.
490
491    XCOFF does not use stabs for line numbers.  Instead, it uses COFF
492 line numbers (which are outside the scope of this document).  Standard
493 COFF line numbers cannot deal with include files, but in XCOFF this is
494 fixed with the `C_BINCL' method of marking include files (*note Include
495 Files::.).
496
497 \1f
498 File: stabs.info,  Node: Procedures,  Next: Nested Procedures,  Prev: Line Numbers,  Up: Program Structure
499
500 Procedures
501 ==========
502
503    All of the following stabs normally use the `N_FUN' symbol type.
504 However, Sun's `acc' compiler on SunOS4 uses `N_GSYM' and `N_STSYM',
505 which means that the value of the stab for the function is useless and
506 the debugger must get the address of the function from the non-stab
507 symbols instead.  On systems where non-stab symbols have leading
508 underscores, the stabs will lack underscores and the debugger needs to
509 know about the leading underscore to match up the stab and the non-stab
510 symbol.  BSD Fortran is said to use `N_FNAME' with the same
511 restriction; the value of the symbol is not useful (I'm not sure it
512 really does use this, because GDB doesn't handle this and no one has
513 complained).
514
515    A function is represented by an `F' symbol descriptor for a global
516 (extern) function, and `f' for a static (local) function.  For a.out,
517 the value of the symbol is the address of the start of the function; it
518 is already relocated.  For stabs in ELF, the SunPRO compiler version
519 2.0.1 and GCC put out an address which gets relocated by the linker.
520 In a future release SunPRO is planning to put out zero, in which case
521 the address can be found from the ELF (non-stab) symbol.  Because
522 looking things up in the ELF symbols would probably be slow, I'm not
523 sure how to find which symbol of that name is the right one, and this
524 doesn't provide any way to deal with nested functions, it would
525 probably be better to make the value of the stab an address relative to
526 the start of the file, or just absolute.  See *Note ELF Linker
527 Relocation:: for more information on linker relocation of stabs in ELF
528 files.  For XCOFF, the stab uses the `C_FUN' storage class and the
529 value of the stab is meaningless; the address of the function can be
530 found from the csect symbol (XTY_LD/XMC_PR).
531
532    The type information of the stab represents the return type of the
533 function; thus `foo:f5' means that foo is a function returning type 5.
534 There is no need to try to get the line number of the start of the
535 function from the stab for the function; it is in the next `N_SLINE'
536 symbol.
537
538    Some compilers (such as Sun's Solaris compiler) support an extension
539 for specifying the types of the arguments.  I suspect this extension is
540 not used for old (non-prototyped) function definitions in C.  If the
541 extension is in use, the type information of the stab for the function
542 is followed by type information for each argument, with each argument
543 preceded by `;'.  An argument type of 0 means that additional arguments
544 are being passed, whose types and number may vary (`...'  in ANSI C).
545 GDB has tolerated this extension (parsed the syntax, if not necessarily
546 used the information) since at least version 4.8; I don't know whether
547 all versions of dbx tolerate it.  The argument types given here are not
548 redundant with the symbols for the formal parameters (*note
549 Parameters::.); they are the types of the arguments as they are passed,
550 before any conversions might take place.  For example, if a C function
551 which is declared without a prototype takes a `float' argument, the
552 value is passed as a `double' but then converted to a `float'.
553 Debuggers need to use the types given in the arguments when printing
554 values, but when calling the function they need to use the types given
555 in the symbol defining the function.
556
557    If the return type and types of arguments of a function which is
558 defined in another source file are specified (i.e., a function
559 prototype in ANSI C), traditionally compilers emit no stab; the only
560 way for the debugger to find the information is if the source file
561 where the function is defined was also compiled with debugging symbols.
562 As an extension the Solaris compiler uses symbol descriptor `P'
563 followed by the return type of the function, followed by the arguments,
564 each preceded by `;', as in a stab with symbol descriptor `f' or `F'.
565 This use of symbol descriptor `P' can be distinguished from its use for
566 register parameters (*note Register Parameters::.) by the fact that it
567 has symbol type `N_FUN'.
568
569    The AIX documentation also defines symbol descriptor `J' as an
570 internal function.  I assume this means a function nested within another
571 function.  It also says symbol descriptor `m' is a module in Modula-2
572 or extended Pascal.
573
574    Procedures (functions which do not return values) are represented as
575 functions returning the `void' type in C.  I don't see why this couldn't
576 be used for all languages (inventing a `void' type for this purpose if
577 necessary), but the AIX documentation defines `I', `P', and `Q' for
578 internal, global, and static procedures, respectively.  These symbol
579 descriptors are unusual in that they are not followed by type
580 information.
581
582    The following example shows a stab for a function `main' which
583 returns type number `1'.  The `_main' specified for the value is a
584 reference to an assembler label which is used to fill in the start
585 address of the function.
586
587      .stabs "main:F1",36,0,0,_main      # 36 is N_FUN
588
589    The stab representing a procedure is located immediately following
590 the code of the procedure.  This stab is in turn directly followed by a
591 group of other stabs describing elements of the procedure.  These other
592 stabs describe the procedure's parameters, its block local variables,
593 and its block structure.
594
595    If functions can appear in different sections, then the debugger may
596 not be able to find the end of a function.  Recent versions of GCC will
597 mark the end of a function with an `N_FUN' symbol with an empty string
598 for the name.  The value is the address of the end of the current
599 function.  Without such a symbol, there is no indication of the address
600 of the end of a function, and you must assume that it ended at the
601 starting address of the next function or at the end of the text section
602 for the program.
603
604 \1f
605 File: stabs.info,  Node: Nested Procedures,  Next: Block Structure,  Prev: Procedures,  Up: Program Structure
606
607 Nested Procedures
608 =================
609
610    For any of the symbol descriptors representing procedures, after the
611 symbol descriptor and the type information is optionally a scope
612 specifier.  This consists of a comma, the name of the procedure, another
613 comma, and the name of the enclosing procedure.  The first name is local
614 to the scope specified, and seems to be redundant with the name of the
615 symbol (before the `:').  This feature is used by GCC, and presumably
616 Pascal, Modula-2, etc., compilers, for nested functions.
617
618    If procedures are nested more than one level deep, only the
619 immediately containing scope is specified.  For example, this code:
620
621      int
622      foo (int x)
623      {
624        int bar (int y)
625          {
626            int baz (int z)
627              {
628                return x + y + z;
629              }
630            return baz (x + 2 * y);
631          }
632        return x + bar (3 * x);
633      }
634
635 produces the stabs:
636
637      .stabs "baz:f1,baz,bar",36,0,0,_baz.15         # 36 is N_FUN
638      .stabs "bar:f1,bar,foo",36,0,0,_bar.12
639      .stabs "foo:F1",36,0,0,_foo
640
641 \1f
642 File: stabs.info,  Node: Block Structure,  Next: Alternate Entry Points,  Prev: Nested Procedures,  Up: Program Structure
643
644 Block Structure
645 ===============
646
647    The program's block structure is represented by the `N_LBRAC' (left
648 brace) and the `N_RBRAC' (right brace) stab types.  The variables
649 defined inside a block precede the `N_LBRAC' symbol for most compilers,
650 including GCC.  Other compilers, such as the Convex, Acorn RISC
651 machine, and Sun `acc' compilers, put the variables after the `N_LBRAC'
652 symbol.  The values of the `N_LBRAC' and `N_RBRAC' symbols are the
653 start and end addresses of the code of the block, respectively.  For
654 most machines, they are relative to the starting address of this source
655 file.  For the Gould NP1, they are absolute.  For stabs in sections
656 (*note Stab Sections::.), they are relative to the function in which
657 they occur.
658
659    The `N_LBRAC' and `N_RBRAC' stabs that describe the block scope of a
660 procedure are located after the `N_FUN' stab that represents the
661 procedure itself.
662
663    Sun documents the desc field of `N_LBRAC' and `N_RBRAC' symbols as
664 containing the nesting level of the block.  However, dbx seems to not
665 care, and GCC always sets desc to zero.
666
667    For XCOFF, block scope is indicated with `C_BLOCK' symbols.  If the
668 name of the symbol is `.bb', then it is the beginning of the block; if
669 the name of the symbol is `.be'; it is the end of the block.
670
671 \1f
672 File: stabs.info,  Node: Alternate Entry Points,  Prev: Block Structure,  Up: Program Structure
673
674 Alternate Entry Points
675 ======================
676
677    Some languages, like Fortran, have the ability to enter procedures at
678 some place other than the beginning.  One can declare an alternate entry
679 point.  The `N_ENTRY' stab is for this; however, the Sun FORTRAN
680 compiler doesn't use it.  According to AIX documentation, only the name
681 of a `C_ENTRY' stab is significant; the address of the alternate entry
682 point comes from the corresponding external symbol.  A previous
683 revision of this document said that the value of an `N_ENTRY' stab was
684 the address of the alternate entry point, but I don't know the source
685 for that information.
686
687 \1f
688 File: stabs.info,  Node: Constants,  Next: Variables,  Prev: Program Structure,  Up: Top
689
690 Constants
691 *********
692
693    The `c' symbol descriptor indicates that this stab represents a
694 constant.  This symbol descriptor is an exception to the general rule
695 that symbol descriptors are followed by type information.  Instead, it
696 is followed by `=' and one of the following:
697
698 `b VALUE'
699      Boolean constant.  VALUE is a numeric value; I assume it is 0 for
700      false or 1 for true.
701
702 `c VALUE'
703      Character constant.  VALUE is the numeric value of the constant.
704
705 `e TYPE-INFORMATION , VALUE'
706      Constant whose value can be represented as integral.
707      TYPE-INFORMATION is the type of the constant, as it would appear
708      after a symbol descriptor (*note String Field::.).  VALUE is the
709      numeric value of the constant.  GDB 4.9 does not actually get the
710      right value if VALUE does not fit in a host `int', but it does not
711      do anything violent, and future debuggers could be extended to
712      accept integers of any size (whether unsigned or not).  This
713      constant type is usually documented as being only for enumeration
714      constants, but GDB has never imposed that restriction; I don't
715      know about other debuggers.
716
717 `i VALUE'
718      Integer constant.  VALUE is the numeric value.  The type is some
719      sort of generic integer type (for GDB, a host `int'); to specify
720      the type explicitly, use `e' instead.
721
722 `r VALUE'
723      Real constant.  VALUE is the real value, which can be `INF'
724      (optionally preceded by a sign) for infinity, `QNAN' for a quiet
725      NaN (not-a-number), or `SNAN' for a signalling NaN.  If it is a
726      normal number the format is that accepted by the C library function
727      `atof'.
728
729 `s STRING'
730      String constant.  STRING is a string enclosed in either `'' (in
731      which case `'' characters within the string are represented as
732      `\'' or `"' (in which case `"' characters within the string are
733      represented as `\"').
734
735 `S TYPE-INFORMATION , ELEMENTS , BITS , PATTERN'
736      Set constant.  TYPE-INFORMATION is the type of the constant, as it
737      would appear after a symbol descriptor (*note String Field::.).
738      ELEMENTS is the number of elements in the set (does this means how
739      many bits of PATTERN are actually used, which would be redundant
740      with the type, or perhaps the number of bits set in PATTERN?  I
741      don't get it), BITS is the number of bits in the constant (meaning
742      it specifies the length of PATTERN, I think), and PATTERN is a
743      hexadecimal representation of the set.  AIX documentation refers
744      to a limit of 32 bytes, but I see no reason why this limit should
745      exist.  This form could probably be used for arbitrary constants,
746      not just sets; the only catch is that PATTERN should be understood
747      to be target, not host, byte order and format.
748
749    The boolean, character, string, and set constants are not supported
750 by GDB 4.9, but it ignores them.  GDB 4.8 and earlier gave an error
751 message and refused to read symbols from the file containing the
752 constants.
753
754    The above information is followed by `;'.
755
756 \1f
757 File: stabs.info,  Node: Variables,  Next: Types,  Prev: Constants,  Up: Top
758
759 Variables
760 *********
761
762    Different types of stabs describe the various ways that variables
763 can be allocated: on the stack, globally, in registers, in common
764 blocks, statically, or as arguments to a function.
765
766 * Menu:
767
768 * Stack Variables::             Variables allocated on the stack.
769 * Global Variables::            Variables used by more than one source file.
770 * Register Variables::          Variables in registers.
771 * Common Blocks::               Variables statically allocated together.
772 * Statics::                     Variables local to one source file.
773 * Based Variables::             Fortran pointer based variables.
774 * Parameters::                  Variables for arguments to functions.
775
776 \1f
777 File: stabs.info,  Node: Stack Variables,  Next: Global Variables,  Up: Variables
778
779 Automatic Variables Allocated on the Stack
780 ==========================================
781
782    If a variable's scope is local to a function and its lifetime is
783 only as long as that function executes (C calls such variables
784 "automatic"), it can be allocated in a register (*note Register
785 Variables::.) or on the stack.
786
787    Each variable allocated on the stack has a stab with the symbol
788 descriptor omitted.  Since type information should begin with a digit,
789 `-', or `(', only those characters precluded from being used for symbol
790 descriptors.  However, the Acorn RISC machine (ARM) is said to get this
791 wrong: it puts out a mere type definition here, without the preceding
792 `TYPE-NUMBER='.  This is a bad idea; there is no guarantee that type
793 descriptors are distinct from symbol descriptors.  Stabs for stack
794 variables use the `N_LSYM' stab type, or `C_LSYM' for XCOFF.
795
796    The value of the stab is the offset of the variable within the local
797 variables.  On most machines this is an offset from the frame pointer
798 and is negative.  The location of the stab specifies which block it is
799 defined in; see *Note Block Structure::.
800
801    For example, the following C code:
802
803      int
804      main ()
805      {
806        int x;
807      }
808
809    produces the following stabs:
810
811      .stabs "main:F1",36,0,0,_main   # 36 is N_FUN
812      .stabs "x:1",128,0,0,-12        # 128 is N_LSYM
813      .stabn 192,0,0,LBB2             # 192 is N_LBRAC
814      .stabn 224,0,0,LBE2             # 224 is N_RBRAC
815
816    *Note Procedures:: for more information on the `N_FUN' stab, and
817 *Note Block Structure:: for more information on the `N_LBRAC' and
818 `N_RBRAC' stabs.
819
820 \1f
821 File: stabs.info,  Node: Global Variables,  Next: Register Variables,  Prev: Stack Variables,  Up: Variables
822
823 Global Variables
824 ================
825
826    A variable whose scope is not specific to just one source file is
827 represented by the `G' symbol descriptor.  These stabs use the `N_GSYM'
828 stab type (C_GSYM for XCOFF).  The type information for the stab (*note
829 String Field::.) gives the type of the variable.
830
831    For example, the following source code:
832
833      char g_foo = 'c';
834
835 yields the following assembly code:
836
837      .stabs "g_foo:G2",32,0,0,0     # 32 is N_GSYM
838           .global _g_foo
839           .data
840      _g_foo:
841           .byte 99
842
843    The address of the variable represented by the `N_GSYM' is not
844 contained in the `N_GSYM' stab.  The debugger gets this information
845 from the external symbol for the global variable.  In the example above,
846 the `.global _g_foo' and `_g_foo:' lines tell the assembler to produce
847 an external symbol.
848
849    Some compilers, like GCC, output `N_GSYM' stabs only once, where the
850 variable is defined.  Other compilers, like SunOS4 /bin/cc, output a
851 `N_GSYM' stab for each compilation unit which references the variable.
852
853 \1f
854 File: stabs.info,  Node: Register Variables,  Next: Common Blocks,  Prev: Global Variables,  Up: Variables
855
856 Register Variables
857 ==================
858
859    Register variables have their own stab type, `N_RSYM' (`C_RSYM' for
860 XCOFF), and their own symbol descriptor, `r'.  The stab's value is the
861 number of the register where the variable data will be stored.
862
863    AIX defines a separate symbol descriptor `d' for floating point
864 registers.  This seems unnecessary; why not just just give floating
865 point registers different register numbers?  I have not verified whether
866 the compiler actually uses `d'.
867
868    If the register is explicitly allocated to a global variable, but not
869 initialized, as in:
870
871      register int g_bar asm ("%g5");
872
873 then the stab may be emitted at the end of the object file, with the
874 other bss symbols.
875
876 \1f
877 File: stabs.info,  Node: Common Blocks,  Next: Statics,  Prev: Register Variables,  Up: Variables
878
879 Common Blocks
880 =============
881
882    A common block is a statically allocated section of memory which can
883 be referred to by several source files.  It may contain several
884 variables.  I believe Fortran is the only language with this feature.
885
886    A `N_BCOMM' stab begins a common block and an `N_ECOMM' stab ends
887 it.  The only field that is significant in these two stabs is the
888 string, which names a normal (non-debugging) symbol that gives the
889 address of the common block.  According to IBM documentation, only the
890 `N_BCOMM' has the name of the common block (even though their compiler
891 actually puts it both places).
892
893    The stabs for the members of the common block are between the
894 `N_BCOMM' and the `N_ECOMM'; the value of each stab is the offset
895 within the common block of that variable.  IBM uses the `C_ECOML' stab
896 type, and there is a corresponding `N_ECOML' stab type, but Sun's
897 Fortran compiler uses `N_GSYM' instead.  The variables within a common
898 block use the `V' symbol descriptor (I believe this is true of all
899 Fortran variables).  Other stabs (at least type declarations using
900 `C_DECL') can also be between the `N_BCOMM' and the `N_ECOMM'.
901
902 \1f
903 File: stabs.info,  Node: Statics,  Next: Based Variables,  Prev: Common Blocks,  Up: Variables
904
905 Static Variables
906 ================
907
908    Initialized static variables are represented by the `S' and `V'
909 symbol descriptors.  `S' means file scope static, and `V' means
910 procedure scope static.  One exception: in XCOFF, IBM's xlc compiler
911 always uses `V', and whether it is file scope or not is distinguished
912 by whether the stab is located within a function.
913
914    In a.out files, `N_STSYM' means the data section, `N_FUN' means the
915 text section, and `N_LCSYM' means the bss section.  For those systems
916 with a read-only data section separate from the text section (Solaris),
917 `N_ROSYM' means the read-only data section.
918
919    For example, the source lines:
920
921      static const int var_const = 5;
922      static int var_init = 2;
923      static int var_noinit;
924
925 yield the following stabs:
926
927      .stabs "var_const:S1",36,0,0,_var_const      # 36 is N_FUN
928      ...
929      .stabs "var_init:S1",38,0,0,_var_init        # 38 is N_STSYM
930      ...
931      .stabs "var_noinit:S1",40,0,0,_var_noinit    # 40 is N_LCSYM
932
933    In XCOFF files, the stab type need not indicate the section;
934 `C_STSYM' can be used for all statics.  Also, each static variable is
935 enclosed in a static block.  A `C_BSTAT' (emitted with a `.bs'
936 assembler directive) symbol begins the static block; its value is the
937 symbol number of the csect symbol whose value is the address of the
938 static block, its section is the section of the variables in that
939 static block, and its name is `.bs'.  A `C_ESTAT' (emitted with a `.es'
940 assembler directive) symbol ends the static block; its name is `.es'
941 and its value and section are ignored.
942
943    In ECOFF files, the storage class is used to specify the section, so
944 the stab type need not indicate the section.
945
946    In ELF files, for the SunPRO compiler version 2.0.1, symbol
947 descriptor `S' means that the address is absolute (the linker relocates
948 it) and symbol descriptor `V' means that the address is relative to the
949 start of the relevant section for that compilation unit.  SunPRO has
950 plans to have the linker stop relocating stabs; I suspect that their the
951 debugger gets the address from the corresponding ELF (not stab) symbol.
952 I'm not sure how to find which symbol of that name is the right one.
953 The clean way to do all this would be to have a the value of a symbol
954 descriptor `S' symbol be an offset relative to the start of the file,
955 just like everything else, but that introduces obvious compatibility
956 problems.  For more information on linker stab relocation, *Note ELF
957 Linker Relocation::.
958
959 \1f
960 File: stabs.info,  Node: Based Variables,  Next: Parameters,  Prev: Statics,  Up: Variables
961
962 Fortran Based Variables
963 =======================
964
965    Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a
966 feature which allows allocating arrays with `malloc', but which avoids
967 blurring the line between arrays and pointers the way that C does.  In
968 stabs such a variable uses the `b' symbol descriptor.
969
970    For example, the Fortran declarations
971
972      real foo, foo10(10), foo10_5(10,5)
973      pointer (foop, foo)
974      pointer (foo10p, foo10)
975      pointer (foo105p, foo10_5)
976
977    produce the stabs
978
979      foo:b6
980      foo10:bar3;1;10;6
981      foo10_5:bar3;1;5;ar3;1;10;6
982
983    In this example, `real' is type 6 and type 3 is an integral type
984 which is the type of the subscripts of the array (probably `integer').
985
986    The `b' symbol descriptor is like `V' in that it denotes a
987 statically allocated symbol whose scope is local to a function; see
988 *Note Statics::.  The value of the symbol, instead of being the address
989 of the variable itself, is the address of a pointer to that variable.
990 So in the above example, the value of the `foo' stab is the address of
991 a pointer to a real, the value of the `foo10' stab is the address of a
992 pointer to a 10-element array of reals, and the value of the `foo10_5'
993 stab is the address of a pointer to a 5-element array of 10-element
994 arrays of reals.
995
996 \1f
997 File: stabs.info,  Node: Parameters,  Prev: Based Variables,  Up: Variables
998
999 Parameters
1000 ==========
1001
1002    Formal parameters to a function are represented by a stab (or
1003 sometimes two; see below) for each parameter.  The stabs are in the
1004 order in which the debugger should print the parameters (i.e., the
1005 order in which the parameters are declared in the source file).  The
1006 exact form of the stab depends on how the parameter is being passed.
1007
1008    Parameters passed on the stack use the symbol descriptor `p' and the
1009 `N_PSYM' symbol type (or `C_PSYM' for XCOFF).  The value of the symbol
1010 is an offset used to locate the parameter on the stack; its exact
1011 meaning is machine-dependent, but on most machines it is an offset from
1012 the frame pointer.
1013
1014    As a simple example, the code:
1015
1016      main (argc, argv)
1017           int argc;
1018           char **argv;
1019
1020    produces the stabs:
1021
1022      .stabs "main:F1",36,0,0,_main                 # 36 is N_FUN
1023      .stabs "argc:p1",160,0,0,68                   # 160 is N_PSYM
1024      .stabs "argv:p20=*21=*2",160,0,0,72
1025
1026    The type definition of `argv' is interesting because it contains
1027 several type definitions.  Type 21 is pointer to type 2 (char) and
1028 `argv' (type 20) is pointer to type 21.
1029
1030    The following symbol descriptors are also said to go with `N_PSYM'.
1031 The value of the symbol is said to be an offset from the argument
1032 pointer (I'm not sure whether this is true or not).
1033
1034      pP (<<??>>)
1035      pF Fortran function parameter
1036      X  (function result variable)
1037
1038 * Menu:
1039
1040 * Register Parameters::
1041 * Local Variable Parameters::
1042 * Reference Parameters::
1043 * Conformant Arrays::
1044
1045 \1f
1046 File: stabs.info,  Node: Register Parameters,  Next: Local Variable Parameters,  Up: Parameters
1047
1048 Passing Parameters in Registers
1049 -------------------------------
1050
1051    If the parameter is passed in a register, then traditionally there
1052 are two symbols for each argument:
1053
1054      .stabs "arg:p1" . . .       ; N_PSYM
1055      .stabs "arg:r1" . . .       ; N_RSYM
1056
1057    Debuggers use the second one to find the value, and the first one to
1058 know that it is an argument.
1059
1060    Because that approach is kind of ugly, some compilers use symbol
1061 descriptor `P' or `R' to indicate an argument which is in a register.
1062 Symbol type `C_RPSYM' is used in XCOFF and `N_RSYM' is used otherwise.
1063 The symbol's value is the register number.  `P' and `R' mean the same
1064 thing; the difference is that `P' is a GNU invention and `R' is an IBM
1065 (XCOFF) invention.  As of version 4.9, GDB should handle either one.
1066
1067    There is at least one case where GCC uses a `p' and `r' pair rather
1068 than `P'; this is where the argument is passed in the argument list and
1069 then loaded into a register.
1070
1071    According to the AIX documentation, symbol descriptor `D' is for a
1072 parameter passed in a floating point register.  This seems
1073 unnecessary--why not just use `R' with a register number which
1074 indicates that it's a floating point register?  I haven't verified
1075 whether the system actually does what the documentation indicates.
1076
1077    On the sparc and hppa, for a `P' symbol whose type is a structure or
1078 union, the register contains the address of the structure.  On the
1079 sparc, this is also true of a `p' and `r' pair (using Sun `cc') or a
1080 `p' symbol.  However, if a (small) structure is really in a register,
1081 `r' is used.  And, to top it all off, on the hppa it might be a
1082 structure which was passed on the stack and loaded into a register and
1083 for which there is a `p' and `r' pair!  I believe that symbol
1084 descriptor `i' is supposed to deal with this case (it is said to mean
1085 "value parameter by reference, indirect access"; I don't know the
1086 source for this information), but I don't know details or what
1087 compilers or debuggers use it, if any (not GDB or GCC).  It is not
1088 clear to me whether this case needs to be dealt with differently than
1089 parameters passed by reference (*note Reference Parameters::.).
1090
1091 \1f
1092 File: stabs.info,  Node: Local Variable Parameters,  Next: Reference Parameters,  Prev: Register Parameters,  Up: Parameters
1093
1094 Storing Parameters as Local Variables
1095 -------------------------------------
1096
1097    There is a case similar to an argument in a register, which is an
1098 argument that is actually stored as a local variable.  Sometimes this
1099 happens when the argument was passed in a register and then the compiler
1100 stores it as a local variable.  If possible, the compiler should claim
1101 that it's in a register, but this isn't always done.
1102
1103    If a parameter is passed as one type and converted to a smaller type
1104 by the prologue (for example, the parameter is declared as a `float',
1105 but the calling conventions specify that it is passed as a `double'),
1106 then GCC2 (sometimes) uses a pair of symbols.  The first symbol uses
1107 symbol descriptor `p' and the type which is passed.  The second symbol
1108 has the type and location which the parameter actually has after the
1109 prologue.  For example, suppose the following C code appears with no
1110 prototypes involved:
1111
1112      void
1113      subr (f)
1114           float f;
1115      {
1116
1117    if `f' is passed as a double at stack offset 8, and the prologue
1118 converts it to a float in register number 0, then the stabs look like:
1119
1120      .stabs "f:p13",160,0,3,8   # 160 is `N_PSYM', here 13 is `double'
1121      .stabs "f:r12",64,0,3,0    # 64 is `N_RSYM', here 12 is `float'
1122
1123    In both stabs 3 is the line number where `f' is declared (*note Line
1124 Numbers::.).
1125
1126    GCC, at least on the 960, has another solution to the same problem.
1127 It uses a single `p' symbol descriptor for an argument which is stored
1128 as a local variable but uses `N_LSYM' instead of `N_PSYM'.  In this
1129 case, the value of the symbol is an offset relative to the local
1130 variables for that function, not relative to the arguments; on some
1131 machines those are the same thing, but not on all.
1132
1133    On the VAX or on other machines in which the calling convention
1134 includes the number of words of arguments actually passed, the debugger
1135 (GDB at least) uses the parameter symbols to keep track of whether it
1136 needs to print nameless arguments in addition to the formal parameters
1137 which it has printed because each one has a stab.  For example, in
1138
1139      extern int fprintf (FILE *stream, char *format, ...);
1140      ...
1141      fprintf (stdout, "%d\n", x);
1142
1143    there are stabs for `stream' and `format'.  On most machines, the
1144 debugger can only print those two arguments (because it has no way of
1145 knowing that additional arguments were passed), but on the VAX or other
1146 machines with a calling convention which indicates the number of words
1147 of arguments, the debugger can print all three arguments.  To do so,
1148 the parameter symbol (symbol descriptor `p') (not necessarily `r' or
1149 symbol descriptor omitted symbols) needs to contain the actual type as
1150 passed (for example, `double' not `float' if it is passed as a double
1151 and converted to a float).
1152
1153 \1f
1154 File: stabs.info,  Node: Reference Parameters,  Next: Conformant Arrays,  Prev: Local Variable Parameters,  Up: Parameters
1155
1156 Passing Parameters by Reference
1157 -------------------------------
1158
1159    If the parameter is passed by reference (e.g., Pascal `VAR'
1160 parameters), then the symbol descriptor is `v' if it is in the argument
1161 list, or `a' if it in a register.  Other than the fact that these
1162 contain the address of the parameter rather than the parameter itself,
1163 they are identical to `p' and `R', respectively.  I believe `a' is an
1164 AIX invention; `v' is supported by all stabs-using systems as far as I
1165 know.
1166