OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [doc/] [stabs.info-1] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
This is stabs.info, produced by makeinfo version 4.1 from
2
./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,1993,1994,1995,1997,1998,2000,2001    Free Software
11
Foundation, Inc.  Contributed by Cygnus Support.  Written by Julia
12
Menapace, Jim Kingdon, and David MacKenzie.
13
 
14
   Permission is granted to copy, distribute and/or modify this document
15
under the terms of the GNU Free Documentation License, Version 1.1 or
16
any later version published by the Free Software Foundation; with no
17
Invariant Sections, with the Front-Cover Texts being "A GNU Manual,"
18
and with the Back-Cover Texts as in (a) below.
19
 
20
   (a) The FSF's Back-Cover Text is: "You have freedom to copy and
21
modify this GNU Manual, like GNU software.  Copies published by the Free
22
Software Foundation raise funds for GNU development."
23
 
24

25
File: stabs.info,  Node: Top,  Next: Overview,  Up: (dir)
26
 
27
The "stabs" representation of debugging information
28
***************************************************
29
 
30
   This document describes the stabs debugging format.
31
 
32
* Menu:
33
 
34
* Overview::                    Overview of stabs
35
* Program Structure::           Encoding of the structure of the program
36
* Constants::                   Constants
37
* Variables::
38
* Types::                       Type definitions
39
* Symbol Tables::               Symbol information in symbol tables
40
* Cplusplus::                   Stabs specific to C++
41
* Stab Types::                  Symbol types in a.out files
42
* Symbol Descriptors::          Table of symbol descriptors
43
* Type Descriptors::            Table of type descriptors
44
* Expanded Reference::          Reference information by stab type
45
* Questions::                   Questions and anomalies
46
* Stab Sections::               In some object file formats, stabs are
47
                                in sections.
48
* Symbol Types Index::          Index of symbolic stab symbol type names.
49
 
50

51
File: stabs.info,  Node: Overview,  Next: Program Structure,  Prev: Top,  Up: Top
52
 
53
Overview of Stabs
54
*****************
55
 
56
   "Stabs" refers to a format for information that describes a program
57
to a debugger.  This format was apparently invented by Peter Kessler at
58
the University of California at Berkeley, for the `pdx' Pascal
59
debugger; the format has spread widely since then.
60
 
61
   This document is one of the few published sources of documentation on
62
stabs.  It is believed to be comprehensive for stabs used by C.  The
63
lists of symbol descriptors (*note Symbol Descriptors::) and type
64
descriptors (*note Type Descriptors::) are believed to be completely
65
comprehensive.  Stabs for COBOL-specific features and for variant
66
records (used by Pascal and Modula-2) are poorly documented here.
67
 
68
   Other sources of information on stabs are `Dbx and Dbxtool
69
Interfaces', 2nd edition, by Sun, 1988, and `AIX Version 3.2 Files
70
Reference', Fourth Edition, September 1992, "dbx Stabstring Grammar" in
71
the a.out section, page 2-31.  This document is believed to incorporate
72
the information from those two sources except where it explicitly
73
directs you to them for more information.
74
 
75
* Menu:
76
 
77
* Flow::                        Overview of debugging information flow
78
* Stabs Format::                Overview of stab format
79
* String Field::                The string field
80
* C Example::                   A simple example in C source
81
* Assembly Code::               The simple example at the assembly level
82
 
83

84
File: stabs.info,  Node: Flow,  Next: Stabs Format,  Up: Overview
85
 
86
Overview of Debugging Information Flow
87
======================================
88
 
89
   The GNU C compiler compiles C source in a `.c' file into assembly
90
language in a `.s' file, which the assembler translates into a `.o'
91
file, which the linker combines with other `.o' files and libraries to
92
produce an executable file.
93
 
94
   With the `-g' option, GCC puts in the `.s' file additional debugging
95
information, which is slightly transformed by the assembler and linker,
96
and carried through into the final executable.  This debugging
97
information describes features of the source file like line numbers,
98
the types and scopes of variables, and function names, parameters, and
99
scopes.
100
 
101
   For some object file formats, the debugging information is
102
encapsulated in assembler directives known collectively as "stab"
103
(symbol table) directives, which are interspersed with the generated
104
code.  Stabs are the native format for debugging information in the
105
a.out and XCOFF object file formats.  The GNU tools can also emit stabs
106
in the COFF and ECOFF object file formats.
107
 
108
   The assembler adds the information from stabs to the symbol
109
information it places by default in the symbol table and the string
110
table of the `.o' file it is building.  The linker consolidates the `.o'
111
files into one executable file, with one symbol table and one string
112
table.  Debuggers use the symbol and string tables in the executable as
113
a source of debugging information about the program.
114
 
115

116
File: stabs.info,  Node: Stabs Format,  Next: String Field,  Prev: Flow,  Up: Overview
117
 
118
Overview of Stab Format
119
=======================
120
 
121
   There are three overall formats for stab assembler directives,
122
differentiated by the first word of the stab.  The name of the directive
123
describes which combination of four possible data fields follows.  It is
124
either `.stabs' (string), `.stabn' (number), or `.stabd' (dot).  IBM's
125
XCOFF assembler uses `.stabx' (and some other directives such as
126
`.file' and `.bi') instead of `.stabs', `.stabn' or `.stabd'.
127
 
128
   The overall format of each class of stab is:
129
 
130
     .stabs "STRING",TYPE,OTHER,DESC,VALUE
131
     .stabn TYPE,OTHER,DESC,VALUE
132
     .stabd TYPE,OTHER,DESC
133
     .stabx "STRING",VALUE,TYPE,SDB-TYPE
134
 
135
   For `.stabn' and `.stabd', there is no STRING (the `n_strx' field is
136
zero; see *Note Symbol Tables::).  For `.stabd', the VALUE field is
137
implicit and has the value of the current file location.  For `.stabx',
138
the SDB-TYPE field is unused for stabs and can always be set to zero.
139
The OTHER field is almost always unused and can be set to zero.
140
 
141
   The number in the TYPE field gives some basic information about
142
which type of stab this is (or whether it _is_ a stab, as opposed to an
143
ordinary symbol).  Each valid type number defines a different stab
144
type; further, the stab type defines the exact interpretation of, and
145
possible values for, any remaining STRING, DESC, or VALUE fields
146
present in the stab.  *Note Stab Types::, for a list in numeric order
147
of the valid TYPE field values for stab directives.
148
 
149

150
File: stabs.info,  Node: String Field,  Next: C Example,  Prev: Stabs Format,  Up: Overview
151
 
152
The String Field
153
================
154
 
155
   For most stabs the string field holds the meat of the debugging
156
information.  The flexible nature of this field is what makes stabs
157
extensible.  For some stab types the string field contains only a name.
158
For other stab types the contents can be a great deal more complex.
159
 
160
   The overall format of the string field for most stab types is:
161
 
162
     "NAME:SYMBOL-DESCRIPTOR TYPE-INFORMATION"
163
 
164
   NAME is the name of the symbol represented by the stab; it can
165
contain a pair of colons (*note Nested Symbols::).  NAME can be
166
omitted, which means the stab represents an unnamed object.  For
167
example, `:t10=*2' defines type 10 as a pointer to type 2, but does not
168
give the type a name.  Omitting the NAME field is supported by AIX dbx
169
and GDB after about version 4.8, but not other debuggers.  GCC
170
sometimes uses a single space as the name instead of omitting the name
171
altogether; apparently that is supported by most debuggers.
172
 
173
   The SYMBOL-DESCRIPTOR following the `:' is an alphabetic character
174
that tells more specifically what kind of symbol the stab represents.
175
If the SYMBOL-DESCRIPTOR is omitted, but type information follows, then
176
the stab represents a local variable.  For a list of symbol
177
descriptors, see *Note Symbol Descriptors::.  The `c' symbol descriptor
178
is an exception in that it is not followed by type information.  *Note
179
Constants::.
180
 
181
   TYPE-INFORMATION is either a TYPE-NUMBER, or `TYPE-NUMBER='.  A
182
TYPE-NUMBER alone is a type reference, referring directly to a type
183
that has already been defined.
184
 
185
   The `TYPE-NUMBER=' form is a type definition, where the number
186
represents a new type which is about to be defined.  The type
187
definition may refer to other types by number, and those type numbers
188
may be followed by `=' and nested definitions.  Also, the Lucid
189
compiler will repeat `TYPE-NUMBER=' more than once if it wants to
190
define several type numbers at once.
191
 
192
   In a type definition, if the character that follows the equals sign
193
is non-numeric then it is a TYPE-DESCRIPTOR, and tells what kind of
194
type is about to be defined.  Any other values following the
195
TYPE-DESCRIPTOR vary, depending on the TYPE-DESCRIPTOR.  *Note Type
196
Descriptors::, for a list of TYPE-DESCRIPTOR values.  If a number
197
follows the `=' then the number is a TYPE-REFERENCE.  For a full
198
description of types, *Note Types::.
199
 
200
   A TYPE-NUMBER is often a single number.  The GNU and Sun tools
201
additionally permit a TYPE-NUMBER to be a pair
202
(FILE-NUMBER,FILETYPE-NUMBER) (the parentheses appear in the string,
203
and serve to distinguish the two cases).  The FILE-NUMBER is 0 for the
204
base source file, 1 for the first included file, 2 for the next, and so
205
on.  The FILETYPE-NUMBER is a number starting with 1 which is
206
incremented for each new type defined in the file.  (Separating the
207
file number and the type number permits the `N_BINCL' optimization to
208
succeed more often; see *Note Include Files::).
209
 
210
   There is an AIX extension for type attributes.  Following the `='
211
are any number of type attributes.  Each one starts with `@' and ends
212
with `;'.  Debuggers, including AIX's dbx and GDB 4.10, skip any type
213
attributes they do not recognize.  GDB 4.9 and other versions of dbx
214
may not do this.  Because of a conflict with C++ (*note Cplusplus::),
215
new attributes should not be defined which begin with a digit, `(', or
216
`-'; GDB may be unable to distinguish those from the C++ type
217
descriptor `@'.  The attributes are:
218
 
219
`aBOUNDARY'
220
     BOUNDARY is an integer specifying the alignment.  I assume it
221
     applies to all variables of this type.
222
 
223
`pINTEGER'
224
     Pointer class (for checking).  Not sure what this means, or how
225
     INTEGER is interpreted.
226
 
227
`P'
228
     Indicate this is a packed type, meaning that structure fields or
229
     array elements are placed more closely in memory, to save memory
230
     at the expense of speed.
231
 
232
`sSIZE'
233
     Size in bits of a variable of this type.  This is fully supported
234
     by GDB 4.11 and later.
235
 
236
`S'
237
     Indicate that this type is a string instead of an array of
238
     characters, or a bitstring instead of a set.  It doesn't change
239
     the layout of the data being represented, but does enable the
240
     debugger to know which type it is.
241
 
242
`V'
243
     Indicate that this type is a vector instead of an array.  The only
244
     major difference between vectors and arrays is that vectors are
245
     passed by value instead of by reference (vector coprocessor
246
     extension).
247
 
248
   All of this can make the string field quite long.  All versions of
249
GDB, and some versions of dbx, can handle arbitrarily long strings.
250
But many versions of dbx (or assemblers or linkers, I'm not sure which)
251
cretinously limit the strings to about 80 characters, so compilers which
252
must work with such systems need to split the `.stabs' directive into
253
several `.stabs' directives.  Each stab duplicates every field except
254
the string field.  The string field of every stab except the last is
255
marked as continued with a backslash at the end (in the assembly code
256
this may be written as a double backslash, depending on the assembler).
257
Removing the backslashes and concatenating the string fields of each
258
stab produces the original, long string.  Just to be incompatible (or so
259
they don't have to worry about what the assembler does with
260
backslashes), AIX can use `?' instead of backslash.
261
 
262

263
File: stabs.info,  Node: C Example,  Next: Assembly Code,  Prev: String Field,  Up: Overview
264
 
265
A Simple Example in C Source
266
============================
267
 
268
   To get the flavor of how stabs describe source information for a C
269
program, let's look at the simple program:
270
 
271
     main()
272
     {
273
             printf("Hello world");
274
     }
275
 
276
   When compiled with `-g', the program above yields the following `.s'
277
file.  Line numbers have been added to make it easier to refer to parts
278
of the `.s' file in the description of the stabs that follows.
279
 
280

281
File: stabs.info,  Node: Assembly Code,  Prev: C Example,  Up: Overview
282
 
283
The Simple Example at the Assembly Level
284
========================================
285
 
286
   This simple "hello world" example demonstrates several of the stab
287
types used to describe C language source files.
288
 
289
     1  gcc2_compiled.:
290
     2  .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
291
     3  .stabs "hello.c",100,0,0,Ltext0
292
     4  .text
293
     5  Ltext0:
294
     6  .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
295
     7  .stabs "char:t2=r2;0;127;",128,0,0,0
296
     8  .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
297
     9  .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
298
     10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
299
     11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
300
     12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
301
     13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
302
     14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
303
     15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
304
     16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
305
     17 .stabs "float:t12=r1;4;0;",128,0,0,0
306
     18 .stabs "double:t13=r1;8;0;",128,0,0,0
307
     19 .stabs "long double:t14=r1;8;0;",128,0,0,0
308
     20 .stabs "void:t15=15",128,0,0,0
309
     21      .align 4
310
     22 LC0:
311
     23      .ascii "Hello, world!\12\0"
312
     24      .align 4
313
     25      .global _main
314
     26      .proc 1
315
     27 _main:
316
     28 .stabn 68,0,4,LM1
317
     29 LM1:
318
     30      !#PROLOGUE# 0
319
     31      save %sp,-136,%sp
320
     32      !#PROLOGUE# 1
321
     33      call ___main,0
322
     34      nop
323
     35 .stabn 68,0,5,LM2
324
     36 LM2:
325
     37 LBB2:
326
     38      sethi %hi(LC0),%o1
327
     39      or %o1,%lo(LC0),%o0
328
     40      call _printf,0
329
     41      nop
330
     42 .stabn 68,0,6,LM3
331
     43 LM3:
332
     44 LBE2:
333
     45 .stabn 68,0,6,LM4
334
     46 LM4:
335
     47 L1:
336
     48      ret
337
     49      restore
338
     50 .stabs "main:F1",36,0,0,_main
339
     51 .stabn 192,0,0,LBB2
340
     52 .stabn 224,0,0,LBE2
341
 
342

343
File: stabs.info,  Node: Program Structure,  Next: Constants,  Prev: Overview,  Up: Top
344
 
345
Encoding the Structure of the Program
346
*************************************
347
 
348
   The elements of the program structure that stabs encode include the
349
name of the main function, the names of the source and include files,
350
the line numbers, procedure names and types, and the beginnings and
351
ends of blocks of code.
352
 
353
* Menu:
354
 
355
* Main Program::                Indicate what the main program is
356
* Source Files::                The path and name of the source file
357
* Include Files::               Names of include files
358
* Line Numbers::
359
* Procedures::
360
* Nested Procedures::
361
* Block Structure::
362
* Alternate Entry Points::      Entering procedures except at the beginning.
363
 
364

365
File: stabs.info,  Node: Main Program,  Next: Source Files,  Up: Program Structure
366
 
367
Main Program
368
============
369
 
370
   Most languages allow the main program to have any name.  The
371
`N_MAIN' stab type tells the debugger the name that is used in this
372
program.  Only the string field is significant; it is the name of a
373
function which is the main program.  Most C compilers do not use this
374
stab (they expect the debugger to assume that the name is `main'), but
375
some C compilers emit an `N_MAIN' stab for the `main' function.  I'm
376
not sure how XCOFF handles this.
377
 
378

379
File: stabs.info,  Node: Source Files,  Next: Include Files,  Prev: Main Program,  Up: Program Structure
380
 
381
Paths and Names of the Source Files
382
===================================
383
 
384
   Before any other stabs occur, there must be a stab specifying the
385
source file.  This information is contained in a symbol of stab type
386
`N_SO'; the string field contains the name of the file.  The value of
387
the symbol is the start address of the portion of the text section
388
corresponding to that file.
389
 
390
   With the Sun Solaris2 compiler, the desc field contains a
391
source-language code.
392
 
393
   Some compilers (for example, GCC2 and SunOS4 `/bin/cc') also include
394
the directory in which the source was compiled, in a second `N_SO'
395
symbol preceding the one containing the file name.  This symbol can be
396
distinguished by the fact that it ends in a slash.  Code from the
397
`cfront' C++ compiler can have additional `N_SO' symbols for
398
nonexistent source files after the `N_SO' for the real source file;
399
these are believed to contain no useful information.
400
 
401
   For example:
402
 
403
     .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0     # 100 is N_SO
404
     .stabs "hello.c",100,0,0,Ltext0
405
             .text
406
     Ltext0:
407
 
408
   Instead of `N_SO' symbols, XCOFF uses a `.file' assembler directive
409
which assembles to a `C_FILE' symbol; explaining this in detail is
410
outside the scope of this document.
411
 
412
   If it is useful to indicate the end of a source file, this is done
413
with an `N_SO' symbol with an empty string for the name.  The value is
414
the address of the end of the text section for the file.  For some
415
systems, there is no indication of the end of a source file, and you
416
just need to figure it ended when you see an `N_SO' for a different
417
source file, or a symbol ending in `.o' (which at least some linkers
418
insert to mark the start of a new `.o' file).
419
 
420

421
File: stabs.info,  Node: Include Files,  Next: Line Numbers,  Prev: Source Files,  Up: Program Structure
422
 
423
Names of Include Files
424
======================
425
 
426
   There are several schemes for dealing with include files: the
427
traditional `N_SOL' approach, Sun's `N_BINCL' approach, and the XCOFF
428
`C_BINCL' approach (which despite the similar name has little in common
429
with `N_BINCL').
430
 
431
   An `N_SOL' symbol specifies which include file subsequent symbols
432
refer to.  The string field is the name of the file and the value is the
433
text address corresponding to the end of the previous include file and
434
the start of this one.  To specify the main source file again, use an
435
`N_SOL' symbol with the name of the main source file.
436
 
437
   The `N_BINCL' approach works as follows.  An `N_BINCL' symbol
438
specifies the start of an include file.  In an object file, only the
439
string is significant; the linker puts data into some of the other
440
fields.  The end of the include file is marked by an `N_EINCL' symbol
441
(which has no string field).  In an object file, there is no
442
significant data in the `N_EINCL' symbol.  `N_BINCL' and `N_EINCL' can
443
be nested.
444
 
445
   If the linker detects that two source files have identical stabs
446
between an `N_BINCL' and `N_EINCL' pair (as will generally be the case
447
for a header file), then it only puts out the stabs once.  Each
448
additional occurrence is replaced by an `N_EXCL' symbol.  I believe the
449
GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
450
ones which supports this feature.
451
 
452
   A linker which supports this feature will set the value of a
453
`N_BINCL' symbol to the total of all the characters in the stabs
454
strings included in the header file, omitting any file numbers.  The
455
value of an `N_EXCL' symbol is the same as the value of the `N_BINCL'
456
symbol it replaces.  This information can be used to match up `N_EXCL'
457
and `N_BINCL' symbols which have the same filename.  The `N_EINCL'
458
value, and the values of the other and description fields for all
459
three, appear to always be zero.
460
 
461
   For the start of an include file in XCOFF, use the `.bi' assembler
462
directive, which generates a `C_BINCL' symbol.  A `.ei' directive,
463
which generates a `C_EINCL' symbol, denotes the end of the include
464
file.  Both directives are followed by the name of the source file in
465
quotes, which becomes the string for the symbol.  The value of each
466
symbol, produced automatically by the assembler and linker, is the
467
offset into the executable of the beginning (inclusive, as you'd
468
expect) or end (inclusive, as you would not expect) of the portion of
469
the COFF line table that corresponds to this include file.  `C_BINCL'
470
and `C_EINCL' do not nest.
471
 
472

473
File: stabs.info,  Node: Line Numbers,  Next: Procedures,  Prev: Include Files,  Up: Program Structure
474
 
475
Line Numbers
476
============
477
 
478
   An `N_SLINE' symbol represents the start of a source line.  The desc
479
field contains the line number and the value contains the code address
480
for the start of that source line.  On most machines the address is
481
absolute; for stabs in sections (*note Stab Sections::), it is relative
482
to the function in which the `N_SLINE' symbol occurs.
483
 
484
   GNU documents `N_DSLINE' and `N_BSLINE' symbols for line numbers in
485
the data or bss segments, respectively.  They are identical to
486
`N_SLINE' but are relocated differently by the linker.  They were
487
intended to be used to describe the source location of a variable
488
declaration, but I believe that GCC2 actually puts the line number in
489
the desc field of the stab for the variable itself.  GDB has been
490
ignoring these symbols (unless they contain a string field) since at
491
least GDB 3.5.
492
 
493
   For single source lines that generate discontiguous code, such as
494
flow of control statements, there may be more than one line number
495
entry for the same source line.  In this case there is a line number
496
entry at the start of each code range, each with the same line number.
497
 
498
   XCOFF does not use stabs for line numbers.  Instead, it uses COFF
499
line numbers (which are outside the scope of this document).  Standard
500
COFF line numbers cannot deal with include files, but in XCOFF this is
501
fixed with the `C_BINCL' method of marking include files (*note Include
502
Files::).
503
 
504

505
File: stabs.info,  Node: Procedures,  Next: Nested Procedures,  Prev: Line Numbers,  Up: Program Structure
506
 
507
Procedures
508
==========
509
 
510
   All of the following stabs normally use the `N_FUN' symbol type.
511
However, Sun's `acc' compiler on SunOS4 uses `N_GSYM' and `N_STSYM',
512
which means that the value of the stab for the function is useless and
513
the debugger must get the address of the function from the non-stab
514
symbols instead.  On systems where non-stab symbols have leading
515
underscores, the stabs will lack underscores and the debugger needs to
516
know about the leading underscore to match up the stab and the non-stab
517
symbol.  BSD Fortran is said to use `N_FNAME' with the same
518
restriction; the value of the symbol is not useful (I'm not sure it
519
really does use this, because GDB doesn't handle this and no one has
520
complained).
521
 
522
   A function is represented by an `F' symbol descriptor for a global
523
(extern) function, and `f' for a static (local) function.  For a.out,
524
the value of the symbol is the address of the start of the function; it
525
is already relocated.  For stabs in ELF, the SunPRO compiler version
526
2.0.1 and GCC put out an address which gets relocated by the linker.
527
In a future release SunPRO is planning to put out zero, in which case
528
the address can be found from the ELF (non-stab) symbol.  Because
529
looking things up in the ELF symbols would probably be slow, I'm not
530
sure how to find which symbol of that name is the right one, and this
531
doesn't provide any way to deal with nested functions, it would
532
probably be better to make the value of the stab an address relative to
533
the start of the file, or just absolute.  See *Note ELF Linker
534
Relocation:: for more information on linker relocation of stabs in ELF
535
files.  For XCOFF, the stab uses the `C_FUN' storage class and the
536
value of the stab is meaningless; the address of the function can be
537
found from the csect symbol (XTY_LD/XMC_PR).
538
 
539
   The type information of the stab represents the return type of the
540
function; thus `foo:f5' means that foo is a function returning type 5.
541
There is no need to try to get the line number of the start of the
542
function from the stab for the function; it is in the next `N_SLINE'
543
symbol.
544
 
545
   Some compilers (such as Sun's Solaris compiler) support an extension
546
for specifying the types of the arguments.  I suspect this extension is
547
not used for old (non-prototyped) function definitions in C.  If the
548
extension is in use, the type information of the stab for the function
549
is followed by type information for each argument, with each argument
550
preceded by `;'.  An argument type of 0 means that additional arguments
551
are being passed, whose types and number may vary (`...' in ANSI C).
552
GDB has tolerated this extension (parsed the syntax, if not necessarily
553
used the information) since at least version 4.8; I don't know whether
554
all versions of dbx tolerate it.  The argument types given here are not
555
redundant with the symbols for the formal parameters (*note
556
Parameters::); they are the types of the arguments as they are passed,
557
before any conversions might take place.  For example, if a C function
558
which is declared without a prototype takes a `float' argument, the
559
value is passed as a `double' but then converted to a `float'.
560
Debuggers need to use the types given in the arguments when printing
561
values, but when calling the function they need to use the types given
562
in the symbol defining the function.
563
 
564
   If the return type and types of arguments of a function which is
565
defined in another source file are specified (i.e., a function
566
prototype in ANSI C), traditionally compilers emit no stab; the only
567
way for the debugger to find the information is if the source file
568
where the function is defined was also compiled with debugging symbols.
569
As an extension the Solaris compiler uses symbol descriptor `P'
570
followed by the return type of the function, followed by the arguments,
571
each preceded by `;', as in a stab with symbol descriptor `f' or `F'.
572
This use of symbol descriptor `P' can be distinguished from its use for
573
register parameters (*note Register Parameters::) by the fact that it
574
has symbol type `N_FUN'.
575
 
576
   The AIX documentation also defines symbol descriptor `J' as an
577
internal function.  I assume this means a function nested within another
578
function.  It also says symbol descriptor `m' is a module in Modula-2
579
or extended Pascal.
580
 
581
   Procedures (functions which do not return values) are represented as
582
functions returning the `void' type in C.  I don't see why this couldn't
583
be used for all languages (inventing a `void' type for this purpose if
584
necessary), but the AIX documentation defines `I', `P', and `Q' for
585
internal, global, and static procedures, respectively.  These symbol
586
descriptors are unusual in that they are not followed by type
587
information.
588
 
589
   The following example shows a stab for a function `main' which
590
returns type number `1'.  The `_main' specified for the value is a
591
reference to an assembler label which is used to fill in the start
592
address of the function.
593
 
594
     .stabs "main:F1",36,0,0,_main      # 36 is N_FUN
595
 
596
   The stab representing a procedure is located immediately following
597
the code of the procedure.  This stab is in turn directly followed by a
598
group of other stabs describing elements of the procedure.  These other
599
stabs describe the procedure's parameters, its block local variables,
600
and its block structure.
601
 
602
   If functions can appear in different sections, then the debugger may
603
not be able to find the end of a function.  Recent versions of GCC will
604
mark the end of a function with an `N_FUN' symbol with an empty string
605
for the name.  The value is the address of the end of the current
606
function.  Without such a symbol, there is no indication of the address
607
of the end of a function, and you must assume that it ended at the
608
starting address of the next function or at the end of the text section
609
for the program.
610
 
611

612
File: stabs.info,  Node: Nested Procedures,  Next: Block Structure,  Prev: Procedures,  Up: Program Structure
613
 
614
Nested Procedures
615
=================
616
 
617
   For any of the symbol descriptors representing procedures, after the
618
symbol descriptor and the type information is optionally a scope
619
specifier.  This consists of a comma, the name of the procedure, another
620
comma, and the name of the enclosing procedure.  The first name is local
621
to the scope specified, and seems to be redundant with the name of the
622
symbol (before the `:').  This feature is used by GCC, and presumably
623
Pascal, Modula-2, etc., compilers, for nested functions.
624
 
625
   If procedures are nested more than one level deep, only the
626
immediately containing scope is specified.  For example, this code:
627
 
628
     int
629
     foo (int x)
630
     {
631
       int bar (int y)
632
         {
633
           int baz (int z)
634
             {
635
               return x + y + z;
636
             }
637
           return baz (x + 2 * y);
638
         }
639
       return x + bar (3 * x);
640
     }
641
 
642
produces the stabs:
643
 
644
     .stabs "baz:f1,baz,bar",36,0,0,_baz.15         # 36 is N_FUN
645
     .stabs "bar:f1,bar,foo",36,0,0,_bar.12
646
     .stabs "foo:F1",36,0,0,_foo
647
 
648

649
File: stabs.info,  Node: Block Structure,  Next: Alternate Entry Points,  Prev: Nested Procedures,  Up: Program Structure
650
 
651
Block Structure
652
===============
653
 
654
   The program's block structure is represented by the `N_LBRAC' (left
655
brace) and the `N_RBRAC' (right brace) stab types.  The variables
656
defined inside a block precede the `N_LBRAC' symbol for most compilers,
657
including GCC.  Other compilers, such as the Convex, Acorn RISC
658
machine, and Sun `acc' compilers, put the variables after the `N_LBRAC'
659
symbol.  The values of the `N_LBRAC' and `N_RBRAC' symbols are the
660
start and end addresses of the code of the block, respectively.  For
661
most machines, they are relative to the starting address of this source
662
file.  For the Gould NP1, they are absolute.  For stabs in sections
663
(*note Stab Sections::), they are relative to the function in which
664
they occur.
665
 
666
   The `N_LBRAC' and `N_RBRAC' stabs that describe the block scope of a
667
procedure are located after the `N_FUN' stab that represents the
668
procedure itself.
669
 
670
   Sun documents the desc field of `N_LBRAC' and `N_RBRAC' symbols as
671
containing the nesting level of the block.  However, dbx seems to not
672
care, and GCC always sets desc to zero.
673
 
674
   For XCOFF, block scope is indicated with `C_BLOCK' symbols.  If the
675
name of the symbol is `.bb', then it is the beginning of the block; if
676
the name of the symbol is `.be'; it is the end of the block.
677
 
678

679
File: stabs.info,  Node: Alternate Entry Points,  Prev: Block Structure,  Up: Program Structure
680
 
681
Alternate Entry Points
682
======================
683
 
684
   Some languages, like Fortran, have the ability to enter procedures at
685
some place other than the beginning.  One can declare an alternate entry
686
point.  The `N_ENTRY' stab is for this; however, the Sun FORTRAN
687
compiler doesn't use it.  According to AIX documentation, only the name
688
of a `C_ENTRY' stab is significant; the address of the alternate entry
689
point comes from the corresponding external symbol.  A previous
690
revision of this document said that the value of an `N_ENTRY' stab was
691
the address of the alternate entry point, but I don't know the source
692
for that information.
693
 
694

695
File: stabs.info,  Node: Constants,  Next: Variables,  Prev: Program Structure,  Up: Top
696
 
697
Constants
698
*********
699
 
700
   The `c' symbol descriptor indicates that this stab represents a
701
constant.  This symbol descriptor is an exception to the general rule
702
that symbol descriptors are followed by type information.  Instead, it
703
is followed by `=' and one of the following:
704
 
705
`b VALUE'
706
     Boolean constant.  VALUE is a numeric value; I assume it is 0 for
707
     false or 1 for true.
708
 
709
`c VALUE'
710
     Character constant.  VALUE is the numeric value of the constant.
711
 
712
`e TYPE-INFORMATION , VALUE'
713
     Constant whose value can be represented as integral.
714
     TYPE-INFORMATION is the type of the constant, as it would appear
715
     after a symbol descriptor (*note String Field::).  VALUE is the
716
     numeric value of the constant.  GDB 4.9 does not actually get the
717
     right value if VALUE does not fit in a host `int', but it does not
718
     do anything violent, and future debuggers could be extended to
719
     accept integers of any size (whether unsigned or not).  This
720
     constant type is usually documented as being only for enumeration
721
     constants, but GDB has never imposed that restriction; I don't
722
     know about other debuggers.
723
 
724
`i VALUE'
725
     Integer constant.  VALUE is the numeric value.  The type is some
726
     sort of generic integer type (for GDB, a host `int'); to specify
727
     the type explicitly, use `e' instead.
728
 
729
`r VALUE'
730
     Real constant.  VALUE is the real value, which can be `INF'
731
     (optionally preceded by a sign) for infinity, `QNAN' for a quiet
732
     NaN (not-a-number), or `SNAN' for a signalling NaN.  If it is a
733
     normal number the format is that accepted by the C library function
734
     `atof'.
735
 
736
`s STRING'
737
     String constant.  STRING is a string enclosed in either `'' (in
738
     which case `'' characters within the string are represented as
739
     `\'' or `"' (in which case `"' characters within the string are
740
     represented as `\"').
741
 
742
`S TYPE-INFORMATION , ELEMENTS , BITS , PATTERN'
743
     Set constant.  TYPE-INFORMATION is the type of the constant, as it
744
     would appear after a symbol descriptor (*note String Field::).
745
     ELEMENTS is the number of elements in the set (does this means how
746
     many bits of PATTERN are actually used, which would be redundant
747
     with the type, or perhaps the number of bits set in PATTERN?  I
748
     don't get it), BITS is the number of bits in the constant (meaning
749
     it specifies the length of PATTERN, I think), and PATTERN is a
750
     hexadecimal representation of the set.  AIX documentation refers
751
     to a limit of 32 bytes, but I see no reason why this limit should
752
     exist.  This form could probably be used for arbitrary constants,
753
     not just sets; the only catch is that PATTERN should be understood
754
     to be target, not host, byte order and format.
755
 
756
   The boolean, character, string, and set constants are not supported
757
by GDB 4.9, but it ignores them.  GDB 4.8 and earlier gave an error
758
message and refused to read symbols from the file containing the
759
constants.
760
 
761
   The above information is followed by `;'.
762
 
763

764
File: stabs.info,  Node: Variables,  Next: Types,  Prev: Constants,  Up: Top
765
 
766
Variables
767
*********
768
 
769
   Different types of stabs describe the various ways that variables
770
can be allocated: on the stack, globally, in registers, in common
771
blocks, statically, or as arguments to a function.
772
 
773
* Menu:
774
 
775
* Stack Variables::             Variables allocated on the stack.
776
* Global Variables::            Variables used by more than one source file.
777
* Register Variables::          Variables in registers.
778
* Common Blocks::               Variables statically allocated together.
779
* Statics::                     Variables local to one source file.
780
* Based Variables::             Fortran pointer based variables.
781
* Parameters::                  Variables for arguments to functions.
782
 
783

784
File: stabs.info,  Node: Stack Variables,  Next: Global Variables,  Up: Variables
785
 
786
Automatic Variables Allocated on the Stack
787
==========================================
788
 
789
   If a variable's scope is local to a function and its lifetime is
790
only as long as that function executes (C calls such variables
791
"automatic"), it can be allocated in a register (*note Register
792
Variables::) or on the stack.
793
 
794
   Each variable allocated on the stack has a stab with the symbol
795
descriptor omitted.  Since type information should begin with a digit,
796
`-', or `(', only those characters precluded from being used for symbol
797
descriptors.  However, the Acorn RISC machine (ARM) is said to get this
798
wrong: it puts out a mere type definition here, without the preceding
799
`TYPE-NUMBER='.  This is a bad idea; there is no guarantee that type
800
descriptors are distinct from symbol descriptors.  Stabs for stack
801
variables use the `N_LSYM' stab type, or `C_LSYM' for XCOFF.
802
 
803
   The value of the stab is the offset of the variable within the local
804
variables.  On most machines this is an offset from the frame pointer
805
and is negative.  The location of the stab specifies which block it is
806
defined in; see *Note Block Structure::.
807
 
808
   For example, the following C code:
809
 
810
     int
811
     main ()
812
     {
813
       int x;
814
     }
815
 
816
   produces the following stabs:
817
 
818
     .stabs "main:F1",36,0,0,_main   # 36 is N_FUN
819
     .stabs "x:1",128,0,0,-12        # 128 is N_LSYM
820
     .stabn 192,0,0,LBB2             # 192 is N_LBRAC
821
     .stabn 224,0,0,LBE2             # 224 is N_RBRAC
822
 
823
   See *Note Procedures:: for more information on the `N_FUN' stab, and
824
*Note Block Structure:: for more information on the `N_LBRAC' and
825
`N_RBRAC' stabs.
826
 
827

828
File: stabs.info,  Node: Global Variables,  Next: Register Variables,  Prev: Stack Variables,  Up: Variables
829
 
830
Global Variables
831
================
832
 
833
   A variable whose scope is not specific to just one source file is
834
represented by the `G' symbol descriptor.  These stabs use the `N_GSYM'
835
stab type (C_GSYM for XCOFF).  The type information for the stab (*note
836
String Field::) gives the type of the variable.
837
 
838
   For example, the following source code:
839
 
840
     char g_foo = 'c';
841
 
842
yields the following assembly code:
843
 
844
     .stabs "g_foo:G2",32,0,0,0     # 32 is N_GSYM
845
          .global _g_foo
846
          .data
847
     _g_foo:
848
          .byte 99
849
 
850
   The address of the variable represented by the `N_GSYM' is not
851
contained in the `N_GSYM' stab.  The debugger gets this information
852
from the external symbol for the global variable.  In the example above,
853
the `.global _g_foo' and `_g_foo:' lines tell the assembler to produce
854
an external symbol.
855
 
856
   Some compilers, like GCC, output `N_GSYM' stabs only once, where the
857
variable is defined.  Other compilers, like SunOS4 /bin/cc, output a
858
`N_GSYM' stab for each compilation unit which references the variable.
859
 
860

861
File: stabs.info,  Node: Register Variables,  Next: Common Blocks,  Prev: Global Variables,  Up: Variables
862
 
863
Register Variables
864
==================
865
 
866
   Register variables have their own stab type, `N_RSYM' (`C_RSYM' for
867
XCOFF), and their own symbol descriptor, `r'.  The stab's value is the
868
number of the register where the variable data will be stored.
869
 
870
   AIX defines a separate symbol descriptor `d' for floating point
871
registers.  This seems unnecessary; why not just just give floating
872
point registers different register numbers?  I have not verified whether
873
the compiler actually uses `d'.
874
 
875
   If the register is explicitly allocated to a global variable, but not
876
initialized, as in:
877
 
878
     register int g_bar asm ("%g5");
879
 
880
then the stab may be emitted at the end of the object file, with the
881
other bss symbols.
882
 
883

884
File: stabs.info,  Node: Common Blocks,  Next: Statics,  Prev: Register Variables,  Up: Variables
885
 
886
Common Blocks
887
=============
888
 
889
   A common block is a statically allocated section of memory which can
890
be referred to by several source files.  It may contain several
891
variables.  I believe Fortran is the only language with this feature.
892
 
893
   A `N_BCOMM' stab begins a common block and an `N_ECOMM' stab ends
894
it.  The only field that is significant in these two stabs is the
895
string, which names a normal (non-debugging) symbol that gives the
896
address of the common block.  According to IBM documentation, only the
897
`N_BCOMM' has the name of the common block (even though their compiler
898
actually puts it both places).
899
 
900
   The stabs for the members of the common block are between the
901
`N_BCOMM' and the `N_ECOMM'; the value of each stab is the offset
902
within the common block of that variable.  IBM uses the `C_ECOML' stab
903
type, and there is a corresponding `N_ECOML' stab type, but Sun's
904
Fortran compiler uses `N_GSYM' instead.  The variables within a common
905
block use the `V' symbol descriptor (I believe this is true of all
906
Fortran variables).  Other stabs (at least type declarations using
907
`C_DECL') can also be between the `N_BCOMM' and the `N_ECOMM'.
908
 
909

910
File: stabs.info,  Node: Statics,  Next: Based Variables,  Prev: Common Blocks,  Up: Variables
911
 
912
Static Variables
913
================
914
 
915
   Initialized static variables are represented by the `S' and `V'
916
symbol descriptors.  `S' means file scope static, and `V' means
917
procedure scope static.  One exception: in XCOFF, IBM's xlc compiler
918
always uses `V', and whether it is file scope or not is distinguished
919
by whether the stab is located within a function.
920
 
921
   In a.out files, `N_STSYM' means the data section, `N_FUN' means the
922
text section, and `N_LCSYM' means the bss section.  For those systems
923
with a read-only data section separate from the text section (Solaris),
924
`N_ROSYM' means the read-only data section.
925
 
926
   For example, the source lines:
927
 
928
     static const int var_const = 5;
929
     static int var_init = 2;
930
     static int var_noinit;
931
 
932
yield the following stabs:
933
 
934
     .stabs "var_const:S1",36,0,0,_var_const      # 36 is N_FUN
935
     ...
936
     .stabs "var_init:S1",38,0,0,_var_init        # 38 is N_STSYM
937
     ...
938
     .stabs "var_noinit:S1",40,0,0,_var_noinit    # 40 is N_LCSYM
939
 
940
   In XCOFF files, the stab type need not indicate the section;
941
`C_STSYM' can be used for all statics.  Also, each static variable is
942
enclosed in a static block.  A `C_BSTAT' (emitted with a `.bs'
943
assembler directive) symbol begins the static block; its value is the
944
symbol number of the csect symbol whose value is the address of the
945
static block, its section is the section of the variables in that
946
static block, and its name is `.bs'.  A `C_ESTAT' (emitted with a `.es'
947
assembler directive) symbol ends the static block; its name is `.es'
948
and its value and section are ignored.
949
 
950
   In ECOFF files, the storage class is used to specify the section, so
951
the stab type need not indicate the section.
952
 
953
   In ELF files, for the SunPRO compiler version 2.0.1, symbol
954
descriptor `S' means that the address is absolute (the linker relocates
955
it) and symbol descriptor `V' means that the address is relative to the
956
start of the relevant section for that compilation unit.  SunPRO has
957
plans to have the linker stop relocating stabs; I suspect that their the
958
debugger gets the address from the corresponding ELF (not stab) symbol.
959
I'm not sure how to find which symbol of that name is the right one.
960
The clean way to do all this would be to have a the value of a symbol
961
descriptor `S' symbol be an offset relative to the start of the file,
962
just like everything else, but that introduces obvious compatibility
963
problems.  For more information on linker stab relocation, *Note ELF
964
Linker Relocation::.
965
 
966

967
File: stabs.info,  Node: Based Variables,  Next: Parameters,  Prev: Statics,  Up: Variables
968
 
969
Fortran Based Variables
970
=======================
971
 
972
   Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a
973
feature which allows allocating arrays with `malloc', but which avoids
974
blurring the line between arrays and pointers the way that C does.  In
975
stabs such a variable uses the `b' symbol descriptor.
976
 
977
   For example, the Fortran declarations
978
 
979
     real foo, foo10(10), foo10_5(10,5)
980
     pointer (foop, foo)
981
     pointer (foo10p, foo10)
982
     pointer (foo105p, foo10_5)
983
 
984
   produce the stabs
985
 
986
     foo:b6
987
     foo10:bar3;1;10;6
988
     foo10_5:bar3;1;5;ar3;1;10;6
989
 
990
   In this example, `real' is type 6 and type 3 is an integral type
991
which is the type of the subscripts of the array (probably `integer').
992
 
993
   The `b' symbol descriptor is like `V' in that it denotes a
994
statically allocated symbol whose scope is local to a function; see
995
*Note Statics::.  The value of the symbol, instead of being the address
996
of the variable itself, is the address of a pointer to that variable.
997
So in the above example, the value of the `foo' stab is the address of
998
a pointer to a real, the value of the `foo10' stab is the address of a
999
pointer to a 10-element array of reals, and the value of the `foo10_5'
1000
stab is the address of a pointer to a 5-element array of 10-element
1001
arrays of reals.
1002
 
1003

1004
File: stabs.info,  Node: Parameters,  Prev: Based Variables,  Up: Variables
1005
 
1006
Parameters
1007
==========
1008
 
1009
   Formal parameters to a function are represented by a stab (or
1010
sometimes two; see below) for each parameter.  The stabs are in the
1011
order in which the debugger should print the parameters (i.e., the
1012
order in which the parameters are declared in the source file).  The
1013
exact form of the stab depends on how the parameter is being passed.
1014
 
1015
   Parameters passed on the stack use the symbol descriptor `p' and the
1016
`N_PSYM' symbol type (or `C_PSYM' for XCOFF).  The value of the symbol
1017
is an offset used to locate the parameter on the stack; its exact
1018
meaning is machine-dependent, but on most machines it is an offset from
1019
the frame pointer.
1020
 
1021
   As a simple example, the code:
1022
 
1023
     main (argc, argv)
1024
          int argc;
1025
          char **argv;
1026
 
1027
   produces the stabs:
1028
 
1029
     .stabs "main:F1",36,0,0,_main                 # 36 is N_FUN
1030
     .stabs "argc:p1",160,0,0,68                   # 160 is N_PSYM
1031
     .stabs "argv:p20=*21=*2",160,0,0,72
1032
 
1033
   The type definition of `argv' is interesting because it contains
1034
several type definitions.  Type 21 is pointer to type 2 (char) and
1035
`argv' (type 20) is pointer to type 21.
1036
 
1037
   The following symbol descriptors are also said to go with `N_PSYM'.
1038
The value of the symbol is said to be an offset from the argument
1039
pointer (I'm not sure whether this is true or not).
1040
 
1041
     pP (<>)
1042
     pF Fortran function parameter
1043
     X  (function result variable)
1044
 
1045
* Menu:
1046
 
1047
* Register Parameters::
1048
* Local Variable Parameters::
1049
* Reference Parameters::
1050
* Conformant Arrays::
1051
 
1052

1053
File: stabs.info,  Node: Register Parameters,  Next: Local Variable Parameters,  Up: Parameters
1054
 
1055
Passing Parameters in Registers
1056
-------------------------------
1057
 
1058
   If the parameter is passed in a register, then traditionally there
1059
are two symbols for each argument:
1060
 
1061
     .stabs "arg:p1" . . .       ; N_PSYM
1062
     .stabs "arg:r1" . . .       ; N_RSYM
1063
 
1064
   Debuggers use the second one to find the value, and the first one to
1065
know that it is an argument.
1066
 
1067
   Because that approach is kind of ugly, some compilers use symbol
1068
descriptor `P' or `R' to indicate an argument which is in a register.
1069
Symbol type `C_RPSYM' is used in XCOFF and `N_RSYM' is used otherwise.
1070
The symbol's value is the register number.  `P' and `R' mean the same
1071
thing; the difference is that `P' is a GNU invention and `R' is an IBM
1072
(XCOFF) invention.  As of version 4.9, GDB should handle either one.
1073
 
1074
   There is at least one case where GCC uses a `p' and `r' pair rather
1075
than `P'; this is where the argument is passed in the argument list and
1076
then loaded into a register.
1077
 
1078
   According to the AIX documentation, symbol descriptor `D' is for a
1079
parameter passed in a floating point register.  This seems
1080
unnecessary--why not just use `R' with a register number which
1081
indicates that it's a floating point register?  I haven't verified
1082
whether the system actually does what the documentation indicates.
1083
 
1084
   On the sparc and hppa, for a `P' symbol whose type is a structure or
1085
union, the register contains the address of the structure.  On the
1086
sparc, this is also true of a `p' and `r' pair (using Sun `cc') or a
1087
`p' symbol.  However, if a (small) structure is really in a register,
1088
`r' is used.  And, to top it all off, on the hppa it might be a
1089
structure which was passed on the stack and loaded into a register and
1090
for which there is a `p' and `r' pair!  I believe that symbol
1091
descriptor `i' is supposed to deal with this case (it is said to mean
1092
"value parameter by reference, indirect access"; I don't know the
1093
source for this information), but I don't know details or what
1094
compilers or debuggers use it, if any (not GDB or GCC).  It is not
1095
clear to me whether this case needs to be dealt with differently than
1096
parameters passed by reference (*note Reference Parameters::).
1097
 
1098

1099
File: stabs.info,  Node: Local Variable Parameters,  Next: Reference Parameters,  Prev: Register Parameters,  Up: Parameters
1100
 
1101
Storing Parameters as Local Variables
1102
-------------------------------------
1103
 
1104
   There is a case similar to an argument in a register, which is an
1105
argument that is actually stored as a local variable.  Sometimes this
1106
happens when the argument was passed in a register and then the compiler
1107
stores it as a local variable.  If possible, the compiler should claim
1108
that it's in a register, but this isn't always done.
1109
 
1110
   If a parameter is passed as one type and converted to a smaller type
1111
by the prologue (for example, the parameter is declared as a `float',
1112
but the calling conventions specify that it is passed as a `double'),
1113
then GCC2 (sometimes) uses a pair of symbols.  The first symbol uses
1114
symbol descriptor `p' and the type which is passed.  The second symbol
1115
has the type and location which the parameter actually has after the
1116
prologue.  For example, suppose the following C code appears with no
1117
prototypes involved:
1118
 
1119
     void
1120
     subr (f)
1121
          float f;
1122
     {
1123
 
1124
   if `f' is passed as a double at stack offset 8, and the prologue
1125
converts it to a float in register number 0, then the stabs look like:
1126
 
1127
     .stabs "f:p13",160,0,3,8   # 160 is `N_PSYM', here 13 is `double'
1128
     .stabs "f:r12",64,0,3,0    # 64 is `N_RSYM', here 12 is `float'
1129
 
1130
   In both stabs 3 is the line number where `f' is declared (*note Line
1131
Numbers::).
1132
 
1133
   GCC, at least on the 960, has another solution to the same problem.
1134
It uses a single `p' symbol descriptor for an argument which is stored
1135
as a local variable but uses `N_LSYM' instead of `N_PSYM'.  In this
1136
case, the value of the symbol is an offset relative to the local
1137
variables for that function, not relative to the arguments; on some
1138
machines those are the same thing, but not on all.
1139
 
1140
   On the VAX or on other machines in which the calling convention
1141
includes the number of words of arguments actually passed, the debugger
1142
(GDB at least) uses the parameter symbols to keep track of whether it
1143
needs to print nameless arguments in addition to the formal parameters
1144
which it has printed because each one has a stab.  For example, in
1145
 
1146
     extern int fprintf (FILE *stream, char *format, ...);
1147
     ...
1148
     fprintf (stdout, "%d\n", x);
1149
 
1150
   there are stabs for `stream' and `format'.  On most machines, the
1151
debugger can only print those two arguments (because it has no way of
1152
knowing that additional arguments were passed), but on the VAX or other
1153
machines with a calling convention which indicates the number of words
1154
of arguments, the debugger can print all three arguments.  To do so,
1155
the parameter symbol (symbol descriptor `p') (not necessarily `r' or
1156
symbol descriptor omitted symbols) needs to contain the actual type as
1157
passed (for example, `double' not `float' if it is passed as a double
1158
and converted to a float).
1159
 
1160

1161
File: stabs.info,  Node: Reference Parameters,  Next: Conformant Arrays,  Prev: Local Variable Parameters,  Up: Parameters
1162
 
1163
Passing Parameters by Reference
1164
-------------------------------
1165
 
1166
   If the parameter is passed by reference (e.g., Pascal `VAR'
1167
parameters), then the symbol descriptor is `v' if it is in the argument
1168
list, or `a' if it in a register.  Other than the fact that these
1169
contain the address of the parameter rather than the parameter itself,
1170
they are identical to `p' and `R', respectively.  I believe `a' is an
1171
AIX invention; `v' is supported by all stabs-using systems as far as I
1172
know.
1173
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.