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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [doc/] [stabs.texinfo] - Blame information for rev 1767

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
\input texinfo
2
@setfilename stabs.info
3
 
4
@c @finalout
5
 
6
@ifinfo
7
@format
8
START-INFO-DIR-ENTRY
9
* Stabs: (stabs).                 The "stabs" debugging information format.
10
END-INFO-DIR-ENTRY
11
@end format
12
@end ifinfo
13
 
14
@ifinfo
15
This document describes the stabs debugging symbol tables.
16
 
17
Copyright 1992,1993,1994,1995,1997,1998,2000,2001
18
   Free Software Foundation, Inc.
19
Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
20
and David MacKenzie.
21
 
22
Permission is granted to copy, distribute and/or modify this document
23
under the terms of the GNU Free Documentation License, Version 1.1 or
24
any later version published by the Free Software Foundation; with the
25
Invariant Sections being ``Stabs Types'' and ``Stabs Sections'', with
26
the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover
27
Texts as in (a) below.
28
 
29
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
30
this GNU Manual, like GNU software.  Copies published by the Free
31
Software Foundation raise funds for GNU development.''
32
@end ifinfo
33
 
34
@setchapternewpage odd
35
@settitle STABS
36
@titlepage
37
@title The ``stabs'' debug format
38
@author Julia Menapace, Jim Kingdon, David MacKenzie
39
@author Cygnus Support
40
@page
41
@tex
42
\def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
43
\xdef\manvers{\$Revision: 1.1.1.1 $}  % For use in headers, footers too
44
{\parskip=0pt
45
\hfill Cygnus Support\par
46
\hfill \manvers\par
47
\hfill \TeX{}info \texinfoversion\par
48
}
49
@end tex
50
 
51
@vskip 0pt plus 1filll
52
Copyright @copyright{} 1992,1993,1994,1995,1997,1998,2000,2001 Free Software Foundation, Inc.
53
Contributed by Cygnus Support.
54
 
55
Permission is granted to copy, distribute and/or modify this document
56
under the terms of the GNU Free Documentation License, Version 1.1 or
57
any later version published by the Free Software Foundation; with the
58
Invariant Sections being ``Stabs Types'' and ``Stabs Sections'', with
59
the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover
60
Texts as in (a) below.
61
 
62
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
63
this GNU Manual, like GNU software.  Copies published by the Free
64
Software Foundation raise funds for GNU development.''
65
 
66
@end titlepage
67
 
68
@ifinfo
69
@node Top
70
@top The "stabs" representation of debugging information
71
 
72
This document describes the stabs debugging format.
73
 
74
@menu
75
* Overview::                    Overview of stabs
76
* Program Structure::           Encoding of the structure of the program
77
* Constants::                   Constants
78
* Variables::
79
* Types::                       Type definitions
80
* Symbol Tables::               Symbol information in symbol tables
81
* Cplusplus::                   Stabs specific to C++
82
* Stab Types::                  Symbol types in a.out files
83
* Symbol Descriptors::          Table of symbol descriptors
84
* Type Descriptors::            Table of type descriptors
85
* Expanded Reference::          Reference information by stab type
86
* Questions::                   Questions and anomalies
87
* Stab Sections::               In some object file formats, stabs are
88
                                in sections.
89
* Symbol Types Index::          Index of symbolic stab symbol type names.
90
@end menu
91
@end ifinfo
92
 
93
@c TeX can handle the contents at the start but makeinfo 3.12 can not
94
@iftex
95
@contents
96
@end iftex
97
 
98
@node Overview
99
@chapter Overview of Stabs
100
 
101
@dfn{Stabs} refers to a format for information that describes a program
102
to a debugger.  This format was apparently invented by
103
Peter Kessler at
104
the University of California at Berkeley, for the @code{pdx} Pascal
105
debugger; the format has spread widely since then.
106
 
107
This document is one of the few published sources of documentation on
108
stabs.  It is believed to be comprehensive for stabs used by C.  The
109
lists of symbol descriptors (@pxref{Symbol Descriptors}) and type
110
descriptors (@pxref{Type Descriptors}) are believed to be completely
111
comprehensive.  Stabs for COBOL-specific features and for variant
112
records (used by Pascal and Modula-2) are poorly documented here.
113
 
114
@c FIXME: Need to document all OS9000 stuff in GDB; see all references
115
@c to os9k_stabs in stabsread.c.
116
 
117
Other sources of information on stabs are @cite{Dbx and Dbxtool
118
Interfaces}, 2nd edition, by Sun, 1988, and @cite{AIX Version 3.2 Files
119
Reference}, Fourth Edition, September 1992, "dbx Stabstring Grammar" in
120
the a.out section, page 2-31.  This document is believed to incorporate
121
the information from those two sources except where it explicitly directs
122
you to them for more information.
123
 
124
@menu
125
* Flow::                        Overview of debugging information flow
126
* Stabs Format::                Overview of stab format
127
* String Field::                The string field
128
* C Example::                   A simple example in C source
129
* Assembly Code::               The simple example at the assembly level
130
@end menu
131
 
132
@node Flow
133
@section Overview of Debugging Information Flow
134
 
135
The GNU C compiler compiles C source in a @file{.c} file into assembly
136
language in a @file{.s} file, which the assembler translates into
137
a @file{.o} file, which the linker combines with other @file{.o} files and
138
libraries to produce an executable file.
139
 
140
With the @samp{-g} option, GCC puts in the @file{.s} file additional
141
debugging information, which is slightly transformed by the assembler
142
and linker, and carried through into the final executable.  This
143
debugging information describes features of the source file like line
144
numbers, the types and scopes of variables, and function names,
145
parameters, and scopes.
146
 
147
For some object file formats, the debugging information is encapsulated
148
in assembler directives known collectively as @dfn{stab} (symbol table)
149
directives, which are interspersed with the generated code.  Stabs are
150
the native format for debugging information in the a.out and XCOFF
151
object file formats.  The GNU tools can also emit stabs in the COFF and
152
ECOFF object file formats.
153
 
154
The assembler adds the information from stabs to the symbol information
155
it places by default in the symbol table and the string table of the
156
@file{.o} file it is building.  The linker consolidates the @file{.o}
157
files into one executable file, with one symbol table and one string
158
table.  Debuggers use the symbol and string tables in the executable as
159
a source of debugging information about the program.
160
 
161
@node Stabs Format
162
@section Overview of Stab Format
163
 
164
There are three overall formats for stab assembler directives,
165
differentiated by the first word of the stab.  The name of the directive
166
describes which combination of four possible data fields follows.  It is
167
either @code{.stabs} (string), @code{.stabn} (number), or @code{.stabd}
168
(dot).  IBM's XCOFF assembler uses @code{.stabx} (and some other
169
directives such as @code{.file} and @code{.bi}) instead of
170
@code{.stabs}, @code{.stabn} or @code{.stabd}.
171
 
172
The overall format of each class of stab is:
173
 
174
@example
175
.stabs "@var{string}",@var{type},@var{other},@var{desc},@var{value}
176
.stabn @var{type},@var{other},@var{desc},@var{value}
177
.stabd @var{type},@var{other},@var{desc}
178
.stabx "@var{string}",@var{value},@var{type},@var{sdb-type}
179
@end example
180
 
181
@c what is the correct term for "current file location"?  My AIX
182
@c assembler manual calls it "the value of the current location counter".
183
For @code{.stabn} and @code{.stabd}, there is no @var{string} (the
184
@code{n_strx} field is zero; see @ref{Symbol Tables}).  For
185
@code{.stabd}, the @var{value} field is implicit and has the value of
186
the current file location.  For @code{.stabx}, the @var{sdb-type} field
187
is unused for stabs and can always be set to zero.  The @var{other}
188
field is almost always unused and can be set to zero.
189
 
190
The number in the @var{type} field gives some basic information about
191
which type of stab this is (or whether it @emph{is} a stab, as opposed
192
to an ordinary symbol).  Each valid type number defines a different stab
193
type; further, the stab type defines the exact interpretation of, and
194
possible values for, any remaining @var{string}, @var{desc}, or
195
@var{value} fields present in the stab.  @xref{Stab Types}, for a list
196
in numeric order of the valid @var{type} field values for stab directives.
197
 
198
@node String Field
199
@section The String Field
200
 
201
For most stabs the string field holds the meat of the
202
debugging information.  The flexible nature of this field
203
is what makes stabs extensible.  For some stab types the string field
204
contains only a name.  For other stab types the contents can be a great
205
deal more complex.
206
 
207
The overall format of the string field for most stab types is:
208
 
209
@example
210
"@var{name}:@var{symbol-descriptor} @var{type-information}"
211
@end example
212
 
213
@var{name} is the name of the symbol represented by the stab; it can
214
contain a pair of colons (@pxref{Nested Symbols}).  @var{name} can be
215
omitted, which means the stab represents an unnamed object.  For
216
example, @samp{:t10=*2} defines type 10 as a pointer to type 2, but does
217
not give the type a name.  Omitting the @var{name} field is supported by
218
AIX dbx and GDB after about version 4.8, but not other debuggers.  GCC
219
sometimes uses a single space as the name instead of omitting the name
220
altogether; apparently that is supported by most debuggers.
221
 
222
The @var{symbol-descriptor} following the @samp{:} is an alphabetic
223
character that tells more specifically what kind of symbol the stab
224
represents. If the @var{symbol-descriptor} is omitted, but type
225
information follows, then the stab represents a local variable.  For a
226
list of symbol descriptors, see @ref{Symbol Descriptors}.  The @samp{c}
227
symbol descriptor is an exception in that it is not followed by type
228
information.  @xref{Constants}.
229
 
230
@var{type-information} is either a @var{type-number}, or
231
@samp{@var{type-number}=}.  A @var{type-number} alone is a type
232
reference, referring directly to a type that has already been defined.
233
 
234
The @samp{@var{type-number}=} form is a type definition, where the
235
number represents a new type which is about to be defined.  The type
236
definition may refer to other types by number, and those type numbers
237
may be followed by @samp{=} and nested definitions.  Also, the Lucid
238
compiler will repeat @samp{@var{type-number}=} more than once if it
239
wants to define several type numbers at once.
240
 
241
In a type definition, if the character that follows the equals sign is
242
non-numeric then it is a @var{type-descriptor}, and tells what kind of
243
type is about to be defined.  Any other values following the
244
@var{type-descriptor} vary, depending on the @var{type-descriptor}.
245
@xref{Type Descriptors}, for a list of @var{type-descriptor} values.  If
246
a number follows the @samp{=} then the number is a @var{type-reference}.
247
For a full description of types, @ref{Types}.
248
 
249
A @var{type-number} is often a single number.  The GNU and Sun tools
250
additionally permit a @var{type-number} to be a pair
251
(@var{file-number},@var{filetype-number}) (the parentheses appear in the
252
string, and serve to distinguish the two cases).  The @var{file-number}
253
is 0 for the base source file, 1 for the first included file, 2 for the
254
next, and so on.  The @var{filetype-number} is a number starting with
255
1 which is incremented for each new type defined in the file.
256
(Separating the file number and the type number permits the
257
@code{N_BINCL} optimization to succeed more often; see @ref{Include
258
Files}).
259
 
260
There is an AIX extension for type attributes.  Following the @samp{=}
261
are any number of type attributes.  Each one starts with @samp{@@} and
262
ends with @samp{;}.  Debuggers, including AIX's dbx and GDB 4.10, skip
263
any type attributes they do not recognize.  GDB 4.9 and other versions
264
of dbx may not do this.  Because of a conflict with C++
265
(@pxref{Cplusplus}), new attributes should not be defined which begin
266
with a digit, @samp{(}, or @samp{-}; GDB may be unable to distinguish
267
those from the C++ type descriptor @samp{@@}.  The attributes are:
268
 
269
@table @code
270
@item a@var{boundary}
271
@var{boundary} is an integer specifying the alignment.  I assume it
272
applies to all variables of this type.
273
 
274
@item p@var{integer}
275
Pointer class (for checking).  Not sure what this means, or how
276
@var{integer} is interpreted.
277
 
278
@item P
279
Indicate this is a packed type, meaning that structure fields or array
280
elements are placed more closely in memory, to save memory at the
281
expense of speed.
282
 
283
@item s@var{size}
284
Size in bits of a variable of this type.  This is fully supported by GDB
285
4.11 and later.
286
 
287
@item S
288
Indicate that this type is a string instead of an array of characters,
289
or a bitstring instead of a set.  It doesn't change the layout of the
290
data being represented, but does enable the debugger to know which type
291
it is.
292
@end table
293
 
294
All of this can make the string field quite long.  All versions of GDB,
295
and some versions of dbx, can handle arbitrarily long strings.  But many
296
versions of dbx (or assemblers or linkers, I'm not sure which)
297
cretinously limit the strings to about 80 characters, so compilers which
298
must work with such systems need to split the @code{.stabs} directive
299
into several @code{.stabs} directives.  Each stab duplicates every field
300
except the string field.  The string field of every stab except the last
301
is marked as continued with a backslash at the end (in the assembly code
302
this may be written as a double backslash, depending on the assembler).
303
Removing the backslashes and concatenating the string fields of each
304
stab produces the original, long string.  Just to be incompatible (or so
305
they don't have to worry about what the assembler does with
306
backslashes), AIX can use @samp{?} instead of backslash.
307
 
308
@node C Example
309
@section A Simple Example in C Source
310
 
311
To get the flavor of how stabs describe source information for a C
312
program, let's look at the simple program:
313
 
314
@example
315
main()
316
@{
317
        printf("Hello world");
318
@}
319
@end example
320
 
321
When compiled with @samp{-g}, the program above yields the following
322
@file{.s} file.  Line numbers have been added to make it easier to refer
323
to parts of the @file{.s} file in the description of the stabs that
324
follows.
325
 
326
@node Assembly Code
327
@section The Simple Example at the Assembly Level
328
 
329
This simple ``hello world'' example demonstrates several of the stab
330
types used to describe C language source files.
331
 
332
@example
333
1  gcc2_compiled.:
334
2  .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
335
3  .stabs "hello.c",100,0,0,Ltext0
336
4  .text
337
5  Ltext0:
338
6  .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
339
7  .stabs "char:t2=r2;0;127;",128,0,0,0
340
8  .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
341
9  .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
342
10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
343
11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
344
12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
345
13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
346
14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
347
15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
348
16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
349
17 .stabs "float:t12=r1;4;0;",128,0,0,0
350
18 .stabs "double:t13=r1;8;0;",128,0,0,0
351
19 .stabs "long double:t14=r1;8;0;",128,0,0,0
352
20 .stabs "void:t15=15",128,0,0,0
353
21      .align 4
354
22 LC0:
355
23      .ascii "Hello, world!\12\0"
356
24      .align 4
357
25      .global _main
358
26      .proc 1
359
27 _main:
360
28 .stabn 68,0,4,LM1
361
29 LM1:
362
30      !#PROLOGUE# 0
363
31      save %sp,-136,%sp
364
32      !#PROLOGUE# 1
365
33      call ___main,0
366
34      nop
367
35 .stabn 68,0,5,LM2
368
36 LM2:
369
37 LBB2:
370
38      sethi %hi(LC0),%o1
371
39      or %o1,%lo(LC0),%o0
372
40      call _printf,0
373
41      nop
374
42 .stabn 68,0,6,LM3
375
43 LM3:
376
44 LBE2:
377
45 .stabn 68,0,6,LM4
378
46 LM4:
379
47 L1:
380
48      ret
381
49      restore
382
50 .stabs "main:F1",36,0,0,_main
383
51 .stabn 192,0,0,LBB2
384
52 .stabn 224,0,0,LBE2
385
@end example
386
 
387
@node Program Structure
388
@chapter Encoding the Structure of the Program
389
 
390
The elements of the program structure that stabs encode include the name
391
of the main function, the names of the source and include files, the
392
line numbers, procedure names and types, and the beginnings and ends of
393
blocks of code.
394
 
395
@menu
396
* Main Program::                Indicate what the main program is
397
* Source Files::                The path and name of the source file
398
* Include Files::               Names of include files
399
* Line Numbers::
400
* Procedures::
401
* Nested Procedures::
402
* Block Structure::
403
* Alternate Entry Points::      Entering procedures except at the beginning.
404
@end menu
405
 
406
@node Main Program
407
@section Main Program
408
 
409
@findex N_MAIN
410
Most languages allow the main program to have any name.  The
411
@code{N_MAIN} stab type tells the debugger the name that is used in this
412
program.  Only the string field is significant; it is the name of
413
a function which is the main program.  Most C compilers do not use this
414
stab (they expect the debugger to assume that the name is @code{main}),
415
but some C compilers emit an @code{N_MAIN} stab for the @code{main}
416
function.  I'm not sure how XCOFF handles this.
417
 
418
@node Source Files
419
@section Paths and Names of the Source Files
420
 
421
@findex N_SO
422
Before any other stabs occur, there must be a stab specifying the source
423
file.  This information is contained in a symbol of stab type
424
@code{N_SO}; the string field contains the name of the file.  The
425
value of the symbol is the start address of the portion of the
426
text section corresponding to that file.
427
 
428
With the Sun Solaris2 compiler, the desc field contains a
429
source-language code.
430
@c Do the debuggers use it?  What are the codes? -djm
431
 
432
Some compilers (for example, GCC2 and SunOS4 @file{/bin/cc}) also
433
include the directory in which the source was compiled, in a second
434
@code{N_SO} symbol preceding the one containing the file name.  This
435
symbol can be distinguished by the fact that it ends in a slash.  Code
436
from the @code{cfront} C++ compiler can have additional @code{N_SO} symbols for
437
nonexistent source files after the @code{N_SO} for the real source file;
438
these are believed to contain no useful information.
439
 
440
For example:
441
 
442
@example
443
.stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0     # @r{100 is N_SO}
444
.stabs "hello.c",100,0,0,Ltext0
445
        .text
446
Ltext0:
447
@end example
448
 
449
@findex C_FILE
450
Instead of @code{N_SO} symbols, XCOFF uses a @code{.file} assembler
451
directive which assembles to a @code{C_FILE} symbol; explaining this in
452
detail is outside the scope of this document.
453
 
454
@c FIXME: Exactly when should the empty N_SO be used?  Why?
455
If it is useful to indicate the end of a source file, this is done with
456
an @code{N_SO} symbol with an empty string for the name.  The value is
457
the address of the end of the text section for the file.  For some
458
systems, there is no indication of the end of a source file, and you
459
just need to figure it ended when you see an @code{N_SO} for a different
460
source file, or a symbol ending in @code{.o} (which at least some
461
linkers insert to mark the start of a new @code{.o} file).
462
 
463
@node Include Files
464
@section Names of Include Files
465
 
466
There are several schemes for dealing with include files: the
467
traditional @code{N_SOL} approach, Sun's @code{N_BINCL} approach, and the
468
XCOFF @code{C_BINCL} approach (which despite the similar name has little in
469
common with @code{N_BINCL}).
470
 
471
@findex N_SOL
472
An @code{N_SOL} symbol specifies which include file subsequent symbols
473
refer to.  The string field is the name of the file and the value is the
474
text address corresponding to the end of the previous include file and
475
the start of this one.  To specify the main source file again, use an
476
@code{N_SOL} symbol with the name of the main source file.
477
 
478
@findex N_BINCL
479
@findex N_EINCL
480
@findex N_EXCL
481
The @code{N_BINCL} approach works as follows.  An @code{N_BINCL} symbol
482
specifies the start of an include file.  In an object file, only the
483
string is significant; the linker puts data into some of the other
484
fields.  The end of the include file is marked by an @code{N_EINCL}
485
symbol (which has no string field).  In an object file, there is no
486
significant data in the @code{N_EINCL} symbol.  @code{N_BINCL} and
487
@code{N_EINCL} can be nested.
488
 
489
If the linker detects that two source files have identical stabs between
490
an @code{N_BINCL} and @code{N_EINCL} pair (as will generally be the case
491
for a header file), then it only puts out the stabs once.  Each
492
additional occurrence is replaced by an @code{N_EXCL} symbol.  I believe
493
the GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
494
ones which supports this feature.
495
 
496
A linker which supports this feature will set the value of a
497
@code{N_BINCL} symbol to the total of all the characters in the stabs
498
strings included in the header file, omitting any file numbers.  The
499
value of an @code{N_EXCL} symbol is the same as the value of the
500
@code{N_BINCL} symbol it replaces.  This information can be used to
501
match up @code{N_EXCL} and @code{N_BINCL} symbols which have the same
502
filename.  The @code{N_EINCL} value, and the values of the other and
503
description fields for all three, appear to always be zero.
504
 
505
@findex C_BINCL
506
@findex C_EINCL
507
For the start of an include file in XCOFF, use the @file{.bi} assembler
508
directive, which generates a @code{C_BINCL} symbol.  A @file{.ei}
509
directive, which generates a @code{C_EINCL} symbol, denotes the end of
510
the include file.  Both directives are followed by the name of the
511
source file in quotes, which becomes the string for the symbol.
512
The value of each symbol, produced automatically by the assembler
513
and linker, is the offset into the executable of the beginning
514
(inclusive, as you'd expect) or end (inclusive, as you would not expect)
515
of the portion of the COFF line table that corresponds to this include
516
file.  @code{C_BINCL} and @code{C_EINCL} do not nest.
517
 
518
@node Line Numbers
519
@section Line Numbers
520
 
521
@findex N_SLINE
522
An @code{N_SLINE} symbol represents the start of a source line.  The
523
desc field contains the line number and the value contains the code
524
address for the start of that source line.  On most machines the address
525
is absolute; for stabs in sections (@pxref{Stab Sections}), it is
526
relative to the function in which the @code{N_SLINE} symbol occurs.
527
 
528
@findex N_DSLINE
529
@findex N_BSLINE
530
GNU documents @code{N_DSLINE} and @code{N_BSLINE} symbols for line
531
numbers in the data or bss segments, respectively.  They are identical
532
to @code{N_SLINE} but are relocated differently by the linker.  They
533
were intended to be used to describe the source location of a variable
534
declaration, but I believe that GCC2 actually puts the line number in
535
the desc field of the stab for the variable itself.  GDB has been
536
ignoring these symbols (unless they contain a string field) since
537
at least GDB 3.5.
538
 
539
For single source lines that generate discontiguous code, such as flow
540
of control statements, there may be more than one line number entry for
541
the same source line.  In this case there is a line number entry at the
542
start of each code range, each with the same line number.
543
 
544
XCOFF does not use stabs for line numbers.  Instead, it uses COFF line
545
numbers (which are outside the scope of this document).  Standard COFF
546
line numbers cannot deal with include files, but in XCOFF this is fixed
547
with the @code{C_BINCL} method of marking include files (@pxref{Include
548
Files}).
549
 
550
@node Procedures
551
@section Procedures
552
 
553
@findex N_FUN, for functions
554
@findex N_FNAME
555
@findex N_STSYM, for functions (Sun acc)
556
@findex N_GSYM, for functions (Sun acc)
557
All of the following stabs normally use the @code{N_FUN} symbol type.
558
However, Sun's @code{acc} compiler on SunOS4 uses @code{N_GSYM} and
559
@code{N_STSYM}, which means that the value of the stab for the function
560
is useless and the debugger must get the address of the function from
561
the non-stab symbols instead.  On systems where non-stab symbols have
562
leading underscores, the stabs will lack underscores and the debugger
563
needs to know about the leading underscore to match up the stab and the
564
non-stab symbol.  BSD Fortran is said to use @code{N_FNAME} with the
565
same restriction; the value of the symbol is not useful (I'm not sure it
566
really does use this, because GDB doesn't handle this and no one has
567
complained).
568
 
569
@findex C_FUN
570
A function is represented by an @samp{F} symbol descriptor for a global
571
(extern) function, and @samp{f} for a static (local) function.  For
572
a.out, the value of the symbol is the address of the start of the
573
function; it is already relocated.  For stabs in ELF, the SunPRO
574
compiler version 2.0.1 and GCC put out an address which gets relocated
575
by the linker.  In a future release SunPRO is planning to put out zero,
576
in which case the address can be found from the ELF (non-stab) symbol.
577
Because looking things up in the ELF symbols would probably be slow, I'm
578
not sure how to find which symbol of that name is the right one, and
579
this doesn't provide any way to deal with nested functions, it would
580
probably be better to make the value of the stab an address relative to
581
the start of the file, or just absolute.  See @ref{ELF Linker
582
Relocation} for more information on linker relocation of stabs in ELF
583
files.  For XCOFF, the stab uses the @code{C_FUN} storage class and the
584
value of the stab is meaningless; the address of the function can be
585
found from the csect symbol (XTY_LD/XMC_PR).
586
 
587
The type information of the stab represents the return type of the
588
function; thus @samp{foo:f5} means that foo is a function returning type
589
5.  There is no need to try to get the line number of the start of the
590
function from the stab for the function; it is in the next
591
@code{N_SLINE} symbol.
592
 
593
@c FIXME: verify whether the "I suspect" below is true or not.
594
Some compilers (such as Sun's Solaris compiler) support an extension for
595
specifying the types of the arguments.  I suspect this extension is not
596
used for old (non-prototyped) function definitions in C.  If the
597
extension is in use, the type information of the stab for the function
598
is followed by type information for each argument, with each argument
599
preceded by @samp{;}.  An argument type of 0 means that additional
600
arguments are being passed, whose types and number may vary (@samp{...}
601
in ANSI C).  GDB has tolerated this extension (parsed the syntax, if not
602
necessarily used the information) since at least version 4.8; I don't
603
know whether all versions of dbx tolerate it.  The argument types given
604
here are not redundant with the symbols for the formal parameters
605
(@pxref{Parameters}); they are the types of the arguments as they are
606
passed, before any conversions might take place.  For example, if a C
607
function which is declared without a prototype takes a @code{float}
608
argument, the value is passed as a @code{double} but then converted to a
609
@code{float}.  Debuggers need to use the types given in the arguments
610
when printing values, but when calling the function they need to use the
611
types given in the symbol defining the function.
612
 
613
If the return type and types of arguments of a function which is defined
614
in another source file are specified (i.e., a function prototype in ANSI
615
C), traditionally compilers emit no stab; the only way for the debugger
616
to find the information is if the source file where the function is
617
defined was also compiled with debugging symbols.  As an extension the
618
Solaris compiler uses symbol descriptor @samp{P} followed by the return
619
type of the function, followed by the arguments, each preceded by
620
@samp{;}, as in a stab with symbol descriptor @samp{f} or @samp{F}.
621
This use of symbol descriptor @samp{P} can be distinguished from its use
622
for register parameters (@pxref{Register Parameters}) by the fact that it has
623
symbol type @code{N_FUN}.
624
 
625
The AIX documentation also defines symbol descriptor @samp{J} as an
626
internal function.  I assume this means a function nested within another
627
function.  It also says symbol descriptor @samp{m} is a module in
628
Modula-2 or extended Pascal.
629
 
630
Procedures (functions which do not return values) are represented as
631
functions returning the @code{void} type in C.  I don't see why this couldn't
632
be used for all languages (inventing a @code{void} type for this purpose if
633
necessary), but the AIX documentation defines @samp{I}, @samp{P}, and
634
@samp{Q} for internal, global, and static procedures, respectively.
635
These symbol descriptors are unusual in that they are not followed by
636
type information.
637
 
638
The following example shows a stab for a function @code{main} which
639
returns type number @code{1}.  The @code{_main} specified for the value
640
is a reference to an assembler label which is used to fill in the start
641
address of the function.
642
 
643
@example
644
.stabs "main:F1",36,0,0,_main      # @r{36 is N_FUN}
645
@end example
646
 
647
The stab representing a procedure is located immediately following the
648
code of the procedure.  This stab is in turn directly followed by a
649
group of other stabs describing elements of the procedure.  These other
650
stabs describe the procedure's parameters, its block local variables, and
651
its block structure.
652
 
653
If functions can appear in different sections, then the debugger may not
654
be able to find the end of a function.  Recent versions of GCC will mark
655
the end of a function with an @code{N_FUN} symbol with an empty string
656
for the name.  The value is the address of the end of the current
657
function.  Without such a symbol, there is no indication of the address
658
of the end of a function, and you must assume that it ended at the
659
starting address of the next function or at the end of the text section
660
for the program.
661
 
662
@node Nested Procedures
663
@section Nested Procedures
664
 
665
For any of the symbol descriptors representing procedures, after the
666
symbol descriptor and the type information is optionally a scope
667
specifier.  This consists of a comma, the name of the procedure, another
668
comma, and the name of the enclosing procedure.  The first name is local
669
to the scope specified, and seems to be redundant with the name of the
670
symbol (before the @samp{:}).  This feature is used by GCC, and
671
presumably Pascal, Modula-2, etc., compilers, for nested functions.
672
 
673
If procedures are nested more than one level deep, only the immediately
674
containing scope is specified.  For example, this code:
675
 
676
@example
677
int
678
foo (int x)
679
@{
680
  int bar (int y)
681
    @{
682
      int baz (int z)
683
        @{
684
          return x + y + z;
685
        @}
686
      return baz (x + 2 * y);
687
    @}
688
  return x + bar (3 * x);
689
@}
690
@end example
691
 
692
@noindent
693
produces the stabs:
694
 
695
@example
696
.stabs "baz:f1,baz,bar",36,0,0,_baz.15         # @r{36 is N_FUN}
697
.stabs "bar:f1,bar,foo",36,0,0,_bar.12
698
.stabs "foo:F1",36,0,0,_foo
699
@end example
700
 
701
@node Block Structure
702
@section Block Structure
703
 
704
@findex N_LBRAC
705
@findex N_RBRAC
706
@c For GCC 2.5.8 or so stabs-in-coff, these are absolute instead of
707
@c function relative (as documented below).  But GDB has never been able
708
@c to deal with that (it had wanted them to be relative to the file, but
709
@c I just fixed that (between GDB 4.12 and 4.13)), so it is function
710
@c relative just like ELF and SOM and the below documentation.
711
The program's block structure is represented by the @code{N_LBRAC} (left
712
brace) and the @code{N_RBRAC} (right brace) stab types.  The variables
713
defined inside a block precede the @code{N_LBRAC} symbol for most
714
compilers, including GCC.  Other compilers, such as the Convex, Acorn
715
RISC machine, and Sun @code{acc} compilers, put the variables after the
716
@code{N_LBRAC} symbol.  The values of the @code{N_LBRAC} and
717
@code{N_RBRAC} symbols are the start and end addresses of the code of
718
the block, respectively.  For most machines, they are relative to the
719
starting address of this source file.  For the Gould NP1, they are
720
absolute.  For stabs in sections (@pxref{Stab Sections}), they are
721
relative to the function in which they occur.
722
 
723
The @code{N_LBRAC} and @code{N_RBRAC} stabs that describe the block
724
scope of a procedure are located after the @code{N_FUN} stab that
725
represents the procedure itself.
726
 
727
Sun documents the desc field of @code{N_LBRAC} and
728
@code{N_RBRAC} symbols as containing the nesting level of the block.
729
However, dbx seems to not care, and GCC always sets desc to
730
zero.
731
 
732
@findex .bb
733
@findex .be
734
@findex C_BLOCK
735
For XCOFF, block scope is indicated with @code{C_BLOCK} symbols.  If the
736
name of the symbol is @samp{.bb}, then it is the beginning of the block;
737
if the name of the symbol is @samp{.be}; it is the end of the block.
738
 
739
@node Alternate Entry Points
740
@section Alternate Entry Points
741
 
742
@findex N_ENTRY
743
@findex C_ENTRY
744
Some languages, like Fortran, have the ability to enter procedures at
745
some place other than the beginning.  One can declare an alternate entry
746
point.  The @code{N_ENTRY} stab is for this; however, the Sun FORTRAN
747
compiler doesn't use it.  According to AIX documentation, only the name
748
of a @code{C_ENTRY} stab is significant; the address of the alternate
749
entry point comes from the corresponding external symbol.  A previous
750
revision of this document said that the value of an @code{N_ENTRY} stab
751
was the address of the alternate entry point, but I don't know the
752
source for that information.
753
 
754
@node Constants
755
@chapter Constants
756
 
757
The @samp{c} symbol descriptor indicates that this stab represents a
758
constant.  This symbol descriptor is an exception to the general rule
759
that symbol descriptors are followed by type information.  Instead, it
760
is followed by @samp{=} and one of the following:
761
 
762
@table @code
763
@item b @var{value}
764
Boolean constant.  @var{value} is a numeric value; I assume it is 0 for
765
false or 1 for true.
766
 
767
@item c @var{value}
768
Character constant.  @var{value} is the numeric value of the constant.
769
 
770
@item e @var{type-information} , @var{value}
771
Constant whose value can be represented as integral.
772
@var{type-information} is the type of the constant, as it would appear
773
after a symbol descriptor (@pxref{String Field}).  @var{value} is the
774
numeric value of the constant.  GDB 4.9 does not actually get the right
775
value if @var{value} does not fit in a host @code{int}, but it does not
776
do anything violent, and future debuggers could be extended to accept
777
integers of any size (whether unsigned or not).  This constant type is
778
usually documented as being only for enumeration constants, but GDB has
779
never imposed that restriction; I don't know about other debuggers.
780
 
781
@item i @var{value}
782
Integer constant.  @var{value} is the numeric value.  The type is some
783
sort of generic integer type (for GDB, a host @code{int}); to specify
784
the type explicitly, use @samp{e} instead.
785
 
786
@item r @var{value}
787
Real constant.  @var{value} is the real value, which can be @samp{INF}
788
(optionally preceded by a sign) for infinity, @samp{QNAN} for a quiet
789
NaN (not-a-number), or @samp{SNAN} for a signalling NaN.  If it is a
790
normal number the format is that accepted by the C library function
791
@code{atof}.
792
 
793
@item s @var{string}
794
String constant.  @var{string} is a string enclosed in either @samp{'}
795
(in which case @samp{'} characters within the string are represented as
796
@samp{\'} or @samp{"} (in which case @samp{"} characters within the
797
string are represented as @samp{\"}).
798
 
799
@item S @var{type-information} , @var{elements} , @var{bits} , @var{pattern}
800
Set constant.  @var{type-information} is the type of the constant, as it
801
would appear after a symbol descriptor (@pxref{String Field}).
802
@var{elements} is the number of elements in the set (does this means
803
how many bits of @var{pattern} are actually used, which would be
804
redundant with the type, or perhaps the number of bits set in
805
@var{pattern}?  I don't get it), @var{bits} is the number of bits in the
806
constant (meaning it specifies the length of @var{pattern}, I think),
807
and @var{pattern} is a hexadecimal representation of the set.  AIX
808
documentation refers to a limit of 32 bytes, but I see no reason why
809
this limit should exist.  This form could probably be used for arbitrary
810
constants, not just sets; the only catch is that @var{pattern} should be
811
understood to be target, not host, byte order and format.
812
@end table
813
 
814
The boolean, character, string, and set constants are not supported by
815
GDB 4.9, but it ignores them.  GDB 4.8 and earlier gave an error
816
message and refused to read symbols from the file containing the
817
constants.
818
 
819
The above information is followed by @samp{;}.
820
 
821
@node Variables
822
@chapter Variables
823
 
824
Different types of stabs describe the various ways that variables can be
825
allocated: on the stack, globally, in registers, in common blocks,
826
statically, or as arguments to a function.
827
 
828
@menu
829
* Stack Variables::             Variables allocated on the stack.
830
* Global Variables::            Variables used by more than one source file.
831
* Register Variables::          Variables in registers.
832
* Common Blocks::               Variables statically allocated together.
833
* Statics::                     Variables local to one source file.
834
* Based Variables::             Fortran pointer based variables.
835
* Parameters::                  Variables for arguments to functions.
836
@end menu
837
 
838
@node Stack Variables
839
@section Automatic Variables Allocated on the Stack
840
 
841
If a variable's scope is local to a function and its lifetime is only as
842
long as that function executes (C calls such variables
843
@dfn{automatic}), it can be allocated in a register (@pxref{Register
844
Variables}) or on the stack.
845
 
846
@findex N_LSYM, for stack variables
847
@findex C_LSYM
848
Each variable allocated on the stack has a stab with the symbol
849
descriptor omitted.  Since type information should begin with a digit,
850
@samp{-}, or @samp{(}, only those characters precluded from being used
851
for symbol descriptors.  However, the Acorn RISC machine (ARM) is said
852
to get this wrong: it puts out a mere type definition here, without the
853
preceding @samp{@var{type-number}=}.  This is a bad idea; there is no
854
guarantee that type descriptors are distinct from symbol descriptors.
855
Stabs for stack variables use the @code{N_LSYM} stab type, or
856
@code{C_LSYM} for XCOFF.
857
 
858
The value of the stab is the offset of the variable within the
859
local variables.  On most machines this is an offset from the frame
860
pointer and is negative.  The location of the stab specifies which block
861
it is defined in; see @ref{Block Structure}.
862
 
863
For example, the following C code:
864
 
865
@example
866
int
867
main ()
868
@{
869
  int x;
870
@}
871
@end example
872
 
873
produces the following stabs:
874
 
875
@example
876
.stabs "main:F1",36,0,0,_main   # @r{36 is N_FUN}
877
.stabs "x:1",128,0,0,-12        # @r{128 is N_LSYM}
878
.stabn 192,0,0,LBB2             # @r{192 is N_LBRAC}
879
.stabn 224,0,0,LBE2             # @r{224 is N_RBRAC}
880
@end example
881
 
882
See @ref{Procedures} for more information on the @code{N_FUN} stab, and
883
@ref{Block Structure} for more information on the @code{N_LBRAC} and
884
@code{N_RBRAC} stabs.
885
 
886
@node Global Variables
887
@section Global Variables
888
 
889
@findex N_GSYM
890
@findex C_GSYM
891
@c FIXME: verify for sure that it really is C_GSYM on XCOFF
892
A variable whose scope is not specific to just one source file is
893
represented by the @samp{G} symbol descriptor.  These stabs use the
894
@code{N_GSYM} stab type (C_GSYM for XCOFF).  The type information for
895
the stab (@pxref{String Field}) gives the type of the variable.
896
 
897
For example, the following source code:
898
 
899
@example
900
char g_foo = 'c';
901
@end example
902
 
903
@noindent
904
yields the following assembly code:
905
 
906
@example
907
.stabs "g_foo:G2",32,0,0,0     # @r{32 is N_GSYM}
908
     .global _g_foo
909
     .data
910
_g_foo:
911
     .byte 99
912
@end example
913
 
914
The address of the variable represented by the @code{N_GSYM} is not
915
contained in the @code{N_GSYM} stab.  The debugger gets this information
916
from the external symbol for the global variable.  In the example above,
917
the @code{.global _g_foo} and @code{_g_foo:} lines tell the assembler to
918
produce an external symbol.
919
 
920
Some compilers, like GCC, output @code{N_GSYM} stabs only once, where
921
the variable is defined.  Other compilers, like SunOS4 /bin/cc, output a
922
@code{N_GSYM} stab for each compilation unit which references the
923
variable.
924
 
925
@node Register Variables
926
@section Register Variables
927
 
928
@findex N_RSYM
929
@findex C_RSYM
930
@c According to an old version of this manual, AIX uses C_RPSYM instead
931
@c of C_RSYM.  I am skeptical; this should be verified.
932
Register variables have their own stab type, @code{N_RSYM}
933
(@code{C_RSYM} for XCOFF), and their own symbol descriptor, @samp{r}.
934
The stab's value is the number of the register where the variable data
935
will be stored.
936
@c .stabs "name:type",N_RSYM,0,RegSize,RegNumber (Sun doc)
937
 
938
AIX defines a separate symbol descriptor @samp{d} for floating point
939
registers.  This seems unnecessary; why not just just give floating
940
point registers different register numbers?  I have not verified whether
941
the compiler actually uses @samp{d}.
942
 
943
If the register is explicitly allocated to a global variable, but not
944
initialized, as in:
945
 
946
@example
947
register int g_bar asm ("%g5");
948
@end example
949
 
950
@noindent
951
then the stab may be emitted at the end of the object file, with
952
the other bss symbols.
953
 
954
@node Common Blocks
955
@section Common Blocks
956
 
957
A common block is a statically allocated section of memory which can be
958
referred to by several source files.  It may contain several variables.
959
I believe Fortran is the only language with this feature.
960
 
961
@findex N_BCOMM
962
@findex N_ECOMM
963
@findex C_BCOMM
964
@findex C_ECOMM
965
A @code{N_BCOMM} stab begins a common block and an @code{N_ECOMM} stab
966
ends it.  The only field that is significant in these two stabs is the
967
string, which names a normal (non-debugging) symbol that gives the
968
address of the common block.  According to IBM documentation, only the
969
@code{N_BCOMM} has the name of the common block (even though their
970
compiler actually puts it both places).
971
 
972
@findex N_ECOML
973
@findex C_ECOML
974
The stabs for the members of the common block are between the
975
@code{N_BCOMM} and the @code{N_ECOMM}; the value of each stab is the
976
offset within the common block of that variable.  IBM uses the
977
@code{C_ECOML} stab type, and there is a corresponding @code{N_ECOML}
978
stab type, but Sun's Fortran compiler uses @code{N_GSYM} instead.  The
979
variables within a common block use the @samp{V} symbol descriptor (I
980
believe this is true of all Fortran variables).  Other stabs (at least
981
type declarations using @code{C_DECL}) can also be between the
982
@code{N_BCOMM} and the @code{N_ECOMM}.
983
 
984
@node Statics
985
@section Static Variables
986
 
987
Initialized static variables are represented by the @samp{S} and
988
@samp{V} symbol descriptors.  @samp{S} means file scope static, and
989
@samp{V} means procedure scope static.  One exception: in XCOFF, IBM's
990
xlc compiler always uses @samp{V}, and whether it is file scope or not
991
is distinguished by whether the stab is located within a function.
992
 
993
@c This is probably not worth mentioning; it is only true on the sparc
994
@c for `double' variables which although declared const are actually in
995
@c the data segment (the text segment can't guarantee 8 byte alignment).
996
@c (although GCC
997
@c 2.4.5 has a bug in that it uses @code{N_FUN}, so neither dbx nor GDB can
998
@c find the variables)
999
@findex N_STSYM
1000
@findex N_LCSYM
1001
@findex N_FUN, for variables
1002
@findex N_ROSYM
1003
In a.out files, @code{N_STSYM} means the data section, @code{N_FUN}
1004
means the text section, and @code{N_LCSYM} means the bss section.  For
1005
those systems with a read-only data section separate from the text
1006
section (Solaris), @code{N_ROSYM} means the read-only data section.
1007
 
1008
For example, the source lines:
1009
 
1010
@example
1011
static const int var_const = 5;
1012
static int var_init = 2;
1013
static int var_noinit;
1014
@end example
1015
 
1016
@noindent
1017
yield the following stabs:
1018
 
1019
@example
1020
.stabs "var_const:S1",36,0,0,_var_const      # @r{36 is N_FUN}
1021
@dots{}
1022
.stabs "var_init:S1",38,0,0,_var_init        # @r{38 is N_STSYM}
1023
@dots{}
1024
.stabs "var_noinit:S1",40,0,0,_var_noinit    # @r{40 is N_LCSYM}
1025
@end example
1026
 
1027
@findex C_STSYM
1028
@findex C_BSTAT
1029
@findex C_ESTAT
1030
In XCOFF files, the stab type need not indicate the section;
1031
@code{C_STSYM} can be used for all statics.  Also, each static variable
1032
is enclosed in a static block.  A @code{C_BSTAT} (emitted with a
1033
@samp{.bs} assembler directive) symbol begins the static block; its
1034
value is the symbol number of the csect symbol whose value is the
1035
address of the static block, its section is the section of the variables
1036
in that static block, and its name is @samp{.bs}.  A @code{C_ESTAT}
1037
(emitted with a @samp{.es} assembler directive) symbol ends the static
1038
block; its name is @samp{.es} and its value and section are ignored.
1039
 
1040
In ECOFF files, the storage class is used to specify the section, so the
1041
stab type need not indicate the section.
1042
 
1043
In ELF files, for the SunPRO compiler version 2.0.1, symbol descriptor
1044
@samp{S} means that the address is absolute (the linker relocates it)
1045
and symbol descriptor @samp{V} means that the address is relative to the
1046
start of the relevant section for that compilation unit.  SunPRO has
1047
plans to have the linker stop relocating stabs; I suspect that their the
1048
debugger gets the address from the corresponding ELF (not stab) symbol.
1049
I'm not sure how to find which symbol of that name is the right one.
1050
The clean way to do all this would be to have a the value of a symbol
1051
descriptor @samp{S} symbol be an offset relative to the start of the
1052
file, just like everything else, but that introduces obvious
1053
compatibility problems.  For more information on linker stab relocation,
1054
@xref{ELF Linker Relocation}.
1055
 
1056
@node Based Variables
1057
@section Fortran Based Variables
1058
 
1059
Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a feature
1060
which allows allocating arrays with @code{malloc}, but which avoids
1061
blurring the line between arrays and pointers the way that C does.  In
1062
stabs such a variable uses the @samp{b} symbol descriptor.
1063
 
1064
For example, the Fortran declarations
1065
 
1066
@example
1067
real foo, foo10(10), foo10_5(10,5)
1068
pointer (foop, foo)
1069
pointer (foo10p, foo10)
1070
pointer (foo105p, foo10_5)
1071
@end example
1072
 
1073
produce the stabs
1074
 
1075
@example
1076
foo:b6
1077
foo10:bar3;1;10;6
1078
foo10_5:bar3;1;5;ar3;1;10;6
1079
@end example
1080
 
1081
In this example, @code{real} is type 6 and type 3 is an integral type
1082
which is the type of the subscripts of the array (probably
1083
@code{integer}).
1084
 
1085
The @samp{b} symbol descriptor is like @samp{V} in that it denotes a
1086
statically allocated symbol whose scope is local to a function; see
1087
@xref{Statics}.  The value of the symbol, instead of being the address
1088
of the variable itself, is the address of a pointer to that variable.
1089
So in the above example, the value of the @code{foo} stab is the address
1090
of a pointer to a real, the value of the @code{foo10} stab is the
1091
address of a pointer to a 10-element array of reals, and the value of
1092
the @code{foo10_5} stab is the address of a pointer to a 5-element array
1093
of 10-element arrays of reals.
1094
 
1095
@node Parameters
1096
@section Parameters
1097
 
1098
Formal parameters to a function are represented by a stab (or sometimes
1099
two; see below) for each parameter.  The stabs are in the order in which
1100
the debugger should print the parameters (i.e., the order in which the
1101
parameters are declared in the source file).  The exact form of the stab
1102
depends on how the parameter is being passed.
1103
 
1104
@findex N_PSYM
1105
@findex C_PSYM
1106
Parameters passed on the stack use the symbol descriptor @samp{p} and
1107
the @code{N_PSYM} symbol type (or @code{C_PSYM} for XCOFF).  The value
1108
of the symbol is an offset used to locate the parameter on the stack;
1109
its exact meaning is machine-dependent, but on most machines it is an
1110
offset from the frame pointer.
1111
 
1112
As a simple example, the code:
1113
 
1114
@example
1115
main (argc, argv)
1116
     int argc;
1117
     char **argv;
1118
@end example
1119
 
1120
produces the stabs:
1121
 
1122
@example
1123
.stabs "main:F1",36,0,0,_main                 # @r{36 is N_FUN}
1124
.stabs "argc:p1",160,0,0,68                   # @r{160 is N_PSYM}
1125
.stabs "argv:p20=*21=*2",160,0,0,72
1126
@end example
1127
 
1128
The type definition of @code{argv} is interesting because it contains
1129
several type definitions.  Type 21 is pointer to type 2 (char) and
1130
@code{argv} (type 20) is pointer to type 21.
1131
 
1132
@c FIXME: figure out what these mean and describe them coherently.
1133
The following symbol descriptors are also said to go with @code{N_PSYM}.
1134
The value of the symbol is said to be an offset from the argument
1135
pointer (I'm not sure whether this is true or not).
1136
 
1137
@example
1138
pP (<<??>>)
1139
pF Fortran function parameter
1140
X  (function result variable)
1141
@end example
1142
 
1143
@menu
1144
* Register Parameters::
1145
* Local Variable Parameters::
1146
* Reference Parameters::
1147
* Conformant Arrays::
1148
@end menu
1149
 
1150
@node Register Parameters
1151
@subsection Passing Parameters in Registers
1152
 
1153
If the parameter is passed in a register, then traditionally there are
1154
two symbols for each argument:
1155
 
1156
@example
1157
.stabs "arg:p1" . . .       ; N_PSYM
1158
.stabs "arg:r1" . . .       ; N_RSYM
1159
@end example
1160
 
1161
Debuggers use the second one to find the value, and the first one to
1162
know that it is an argument.
1163
 
1164
@findex C_RPSYM
1165
@findex N_RSYM, for parameters
1166
Because that approach is kind of ugly, some compilers use symbol
1167
descriptor @samp{P} or @samp{R} to indicate an argument which is in a
1168
register.  Symbol type @code{C_RPSYM} is used in XCOFF and @code{N_RSYM}
1169
is used otherwise.  The symbol's value is the register number.  @samp{P}
1170
and @samp{R} mean the same thing; the difference is that @samp{P} is a
1171
GNU invention and @samp{R} is an IBM (XCOFF) invention.  As of version
1172
4.9, GDB should handle either one.
1173
 
1174
There is at least one case where GCC uses a @samp{p} and @samp{r} pair
1175
rather than @samp{P}; this is where the argument is passed in the
1176
argument list and then loaded into a register.
1177
 
1178
According to the AIX documentation, symbol descriptor @samp{D} is for a
1179
parameter passed in a floating point register.  This seems
1180
unnecessary---why not just use @samp{R} with a register number which
1181
indicates that it's a floating point register?  I haven't verified
1182
whether the system actually does what the documentation indicates.
1183
 
1184
@c FIXME: On the hppa this is for any type > 8 bytes, I think, and not
1185
@c for small structures (investigate).
1186
On the sparc and hppa, for a @samp{P} symbol whose type is a structure
1187
or union, the register contains the address of the structure.  On the
1188
sparc, this is also true of a @samp{p} and @samp{r} pair (using Sun
1189
@code{cc}) or a @samp{p} symbol.  However, if a (small) structure is
1190
really in a register, @samp{r} is used.  And, to top it all off, on the
1191
hppa it might be a structure which was passed on the stack and loaded
1192
into a register and for which there is a @samp{p} and @samp{r} pair!  I
1193
believe that symbol descriptor @samp{i} is supposed to deal with this
1194
case (it is said to mean "value parameter by reference, indirect
1195
access"; I don't know the source for this information), but I don't know
1196
details or what compilers or debuggers use it, if any (not GDB or GCC).
1197
It is not clear to me whether this case needs to be dealt with
1198
differently than parameters passed by reference (@pxref{Reference Parameters}).
1199
 
1200
@node Local Variable Parameters
1201
@subsection Storing Parameters as Local Variables
1202
 
1203
There is a case similar to an argument in a register, which is an
1204
argument that is actually stored as a local variable.  Sometimes this
1205
happens when the argument was passed in a register and then the compiler
1206
stores it as a local variable.  If possible, the compiler should claim
1207
that it's in a register, but this isn't always done.
1208
 
1209
If a parameter is passed as one type and converted to a smaller type by
1210
the prologue (for example, the parameter is declared as a @code{float},
1211
but the calling conventions specify that it is passed as a
1212
@code{double}), then GCC2 (sometimes) uses a pair of symbols.  The first
1213
symbol uses symbol descriptor @samp{p} and the type which is passed.
1214
The second symbol has the type and location which the parameter actually
1215
has after the prologue.  For example, suppose the following C code
1216
appears with no prototypes involved:
1217
 
1218
@example
1219
void
1220
subr (f)
1221
     float f;
1222
@{
1223
@end example
1224
 
1225
if @code{f} is passed as a double at stack offset 8, and the prologue
1226
converts it to a float in register number 0, then the stabs look like:
1227
 
1228
@example
1229
.stabs "f:p13",160,0,3,8   # @r{160 is @code{N_PSYM}, here 13 is @code{double}}
1230
.stabs "f:r12",64,0,3,0    # @r{64 is @code{N_RSYM}, here 12 is @code{float}}
1231
@end example
1232
 
1233
In both stabs 3 is the line number where @code{f} is declared
1234
(@pxref{Line Numbers}).
1235
 
1236
@findex N_LSYM, for parameter
1237
GCC, at least on the 960, has another solution to the same problem.  It
1238
uses a single @samp{p} symbol descriptor for an argument which is stored
1239
as a local variable but uses @code{N_LSYM} instead of @code{N_PSYM}.  In
1240
this case, the value of the symbol is an offset relative to the local
1241
variables for that function, not relative to the arguments; on some
1242
machines those are the same thing, but not on all.
1243
 
1244
@c This is mostly just background info; the part that logically belongs
1245
@c here is the last sentence.
1246
On the VAX or on other machines in which the calling convention includes
1247
the number of words of arguments actually passed, the debugger (GDB at
1248
least) uses the parameter symbols to keep track of whether it needs to
1249
print nameless arguments in addition to the formal parameters which it
1250
has printed because each one has a stab.  For example, in
1251
 
1252
@example
1253
extern int fprintf (FILE *stream, char *format, @dots{});
1254
@dots{}
1255
fprintf (stdout, "%d\n", x);
1256
@end example
1257
 
1258
there are stabs for @code{stream} and @code{format}.  On most machines,
1259
the debugger can only print those two arguments (because it has no way
1260
of knowing that additional arguments were passed), but on the VAX or
1261
other machines with a calling convention which indicates the number of
1262
words of arguments, the debugger can print all three arguments.  To do
1263
so, the parameter symbol (symbol descriptor @samp{p}) (not necessarily
1264
@samp{r} or symbol descriptor omitted symbols) needs to contain the
1265
actual type as passed (for example, @code{double} not @code{float} if it
1266
is passed as a double and converted to a float).
1267
 
1268
@node Reference Parameters
1269
@subsection Passing Parameters by Reference
1270
 
1271
If the parameter is passed by reference (e.g., Pascal @code{VAR}
1272
parameters), then the symbol descriptor is @samp{v} if it is in the
1273
argument list, or @samp{a} if it in a register.  Other than the fact
1274
that these contain the address of the parameter rather than the
1275
parameter itself, they are identical to @samp{p} and @samp{R},
1276
respectively.  I believe @samp{a} is an AIX invention; @samp{v} is
1277
supported by all stabs-using systems as far as I know.
1278
 
1279
@node Conformant Arrays
1280
@subsection Passing Conformant Array Parameters
1281
 
1282
@c Is this paragraph correct?  It is based on piecing together patchy
1283
@c information and some guesswork
1284
Conformant arrays are a feature of Modula-2, and perhaps other
1285
languages, in which the size of an array parameter is not known to the
1286
called function until run-time.  Such parameters have two stabs: a
1287
@samp{x} for the array itself, and a @samp{C}, which represents the size
1288
of the array.  The value of the @samp{x} stab is the offset in the
1289
argument list where the address of the array is stored (it this right?
1290
it is a guess); the value of the @samp{C} stab is the offset in the
1291
argument list where the size of the array (in elements? in bytes?) is
1292
stored.
1293
 
1294
@node Types
1295
@chapter Defining Types
1296
 
1297
The examples so far have described types as references to previously
1298
defined types, or defined in terms of subranges of or pointers to
1299
previously defined types.  This chapter describes the other type
1300
descriptors that may follow the @samp{=} in a type definition.
1301
 
1302
@menu
1303
* Builtin Types::               Integers, floating point, void, etc.
1304
* Miscellaneous Types::         Pointers, sets, files, etc.
1305
* Cross-References::            Referring to a type not yet defined.
1306
* Subranges::                   A type with a specific range.
1307
* Arrays::                      An aggregate type of same-typed elements.
1308
* Strings::                     Like an array but also has a length.
1309
* Enumerations::                Like an integer but the values have names.
1310
* Structures::                  An aggregate type of different-typed elements.
1311
* Typedefs::                    Giving a type a name.
1312
* Unions::                      Different types sharing storage.
1313
* Function Types::
1314
@end menu
1315
 
1316
@node Builtin Types
1317
@section Builtin Types
1318
 
1319
Certain types are built in (@code{int}, @code{short}, @code{void},
1320
@code{float}, etc.); the debugger recognizes these types and knows how
1321
to handle them.  Thus, don't be surprised if some of the following ways
1322
of specifying builtin types do not specify everything that a debugger
1323
would need to know about the type---in some cases they merely specify
1324
enough information to distinguish the type from other types.
1325
 
1326
The traditional way to define builtin types is convoluted, so new ways
1327
have been invented to describe them.  Sun's @code{acc} uses special
1328
builtin type descriptors (@samp{b} and @samp{R}), and IBM uses negative
1329
type numbers.  GDB accepts all three ways, as of version 4.8; dbx just
1330
accepts the traditional builtin types and perhaps one of the other two
1331
formats.  The following sections describe each of these formats.
1332
 
1333
@menu
1334
* Traditional Builtin Types::   Put on your seat belts and prepare for kludgery
1335
* Builtin Type Descriptors::    Builtin types with special type descriptors
1336
* Negative Type Numbers::       Builtin types using negative type numbers
1337
@end menu
1338
 
1339
@node Traditional Builtin Types
1340
@subsection Traditional Builtin Types
1341
 
1342
This is the traditional, convoluted method for defining builtin types.
1343
There are several classes of such type definitions: integer, floating
1344
point, and @code{void}.
1345
 
1346
@menu
1347
* Traditional Integer Types::
1348
* Traditional Other Types::
1349
@end menu
1350
 
1351
@node Traditional Integer Types
1352
@subsubsection Traditional Integer Types
1353
 
1354
Often types are defined as subranges of themselves.  If the bounding values
1355
fit within an @code{int}, then they are given normally.  For example:
1356
 
1357
@example
1358
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0    # @r{128 is N_LSYM}
1359
.stabs "char:t2=r2;0;127;",128,0,0,0
1360
@end example
1361
 
1362
Builtin types can also be described as subranges of @code{int}:
1363
 
1364
@example
1365
.stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
1366
@end example
1367
 
1368
If the lower bound of a subrange is 0 and the upper bound is -1,
1369
the type is an unsigned integral type whose bounds are too
1370
big to describe in an @code{int}.  Traditionally this is only used for
1371
@code{unsigned int} and @code{unsigned long}:
1372
 
1373
@example
1374
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
1375
@end example
1376
 
1377
For larger types, GCC 2.4.5 puts out bounds in octal, with one or more
1378
leading zeroes.  In this case a negative bound consists of a number
1379
which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
1380
the number (except the sign bit), and a positive bound is one which is a
1381
1 bit for each bit in the number (except possibly the sign bit).  All
1382
known versions of dbx and GDB version 4 accept this (at least in the
1383
sense of not refusing to process the file), but GDB 3.5 refuses to read
1384
the whole file containing such symbols.  So GCC 2.3.3 did not output the
1385
proper size for these types.  As an example of octal bounds, the string
1386
fields of the stabs for 64 bit integer types look like:
1387
 
1388
@c .stabs directives, etc., omitted to make it fit on the page.
1389
@example
1390
long int:t3=r1;001000000000000000000000;000777777777777777777777;
1391
long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
1392
@end example
1393
 
1394
If the lower bound of a subrange is 0 and the upper bound is negative,
1395
the type is an unsigned integral type whose size in bytes is the
1396
absolute value of the upper bound.  I believe this is a Convex
1397
convention for @code{unsigned long long}.
1398
 
1399
If the lower bound of a subrange is negative and the upper bound is 0,
1400
the type is a signed integral type whose size in bytes is
1401
the absolute value of the lower bound.  I believe this is a Convex
1402
convention for @code{long long}.  To distinguish this from a legitimate
1403
subrange, the type should be a subrange of itself.  I'm not sure whether
1404
this is the case for Convex.
1405
 
1406
@node Traditional Other Types
1407
@subsubsection Traditional Other Types
1408
 
1409
If the upper bound of a subrange is 0 and the lower bound is positive,
1410
the type is a floating point type, and the lower bound of the subrange
1411
indicates the number of bytes in the type:
1412
 
1413
@example
1414
.stabs "float:t12=r1;4;0;",128,0,0,0
1415
.stabs "double:t13=r1;8;0;",128,0,0,0
1416
@end example
1417
 
1418
However, GCC writes @code{long double} the same way it writes
1419
@code{double}, so there is no way to distinguish.
1420
 
1421
@example
1422
.stabs "long double:t14=r1;8;0;",128,0,0,0
1423
@end example
1424
 
1425
Complex types are defined the same way as floating-point types; there is
1426
no way to distinguish a single-precision complex from a double-precision
1427
floating-point type.
1428
 
1429
The C @code{void} type is defined as itself:
1430
 
1431
@example
1432
.stabs "void:t15=15",128,0,0,0
1433
@end example
1434
 
1435
I'm not sure how a boolean type is represented.
1436
 
1437
@node Builtin Type Descriptors
1438
@subsection Defining Builtin Types Using Builtin Type Descriptors
1439
 
1440
This is the method used by Sun's @code{acc} for defining builtin types.
1441
These are the type descriptors to define builtin types:
1442
 
1443
@table @code
1444
@c FIXME: clean up description of width and offset, once we figure out
1445
@c what they mean
1446
@item b @var{signed} @var{char-flag} @var{width} ; @var{offset} ; @var{nbits} ;
1447
Define an integral type.  @var{signed} is @samp{u} for unsigned or
1448
@samp{s} for signed.  @var{char-flag} is @samp{c} which indicates this
1449
is a character type, or is omitted.  I assume this is to distinguish an
1450
integral type from a character type of the same size, for example it
1451
might make sense to set it for the C type @code{wchar_t} so the debugger
1452
can print such variables differently (Solaris does not do this).  Sun
1453
sets it on the C types @code{signed char} and @code{unsigned char} which
1454
arguably is wrong.  @var{width} and @var{offset} appear to be for small
1455
objects stored in larger ones, for example a @code{short} in an
1456
@code{int} register.  @var{width} is normally the number of bytes in the
1457
type.  @var{offset} seems to always be zero.  @var{nbits} is the number
1458
of bits in the type.
1459
 
1460
Note that type descriptor @samp{b} used for builtin types conflicts with
1461
its use for Pascal space types (@pxref{Miscellaneous Types}); they can
1462
be distinguished because the character following the type descriptor
1463
will be a digit, @samp{(}, or @samp{-} for a Pascal space type, or
1464
@samp{u} or @samp{s} for a builtin type.
1465
 
1466
@item w
1467
Documented by AIX to define a wide character type, but their compiler
1468
actually uses negative type numbers (@pxref{Negative Type Numbers}).
1469
 
1470
@item R @var{fp-type} ; @var{bytes} ;
1471
Define a floating point type.  @var{fp-type} has one of the following values:
1472
 
1473
@table @code
1474
@item 1 (NF_SINGLE)
1475
IEEE 32-bit (single precision) floating point format.
1476
 
1477
@item 2 (NF_DOUBLE)
1478
IEEE 64-bit (double precision) floating point format.
1479
 
1480
@item 3 (NF_COMPLEX)
1481
@item 4 (NF_COMPLEX16)
1482
@item 5 (NF_COMPLEX32)
1483
@c "GDB source" really means @file{include/aout/stab_gnu.h}, but trying
1484
@c to put that here got an overfull hbox.
1485
These are for complex numbers.  A comment in the GDB source describes
1486
them as Fortran @code{complex}, @code{double complex}, and
1487
@code{complex*16}, respectively, but what does that mean?  (i.e., Single
1488
precision?  Double precision?).
1489
 
1490
@item 6 (NF_LDOUBLE)
1491
Long double.  This should probably only be used for Sun format
1492
@code{long double}, and new codes should be used for other floating
1493
point formats (@code{NF_DOUBLE} can be used if a @code{long double} is
1494
really just an IEEE double, of course).
1495
@end table
1496
 
1497
@var{bytes} is the number of bytes occupied by the type.  This allows a
1498
debugger to perform some operations with the type even if it doesn't
1499
understand @var{fp-type}.
1500
 
1501
@item g @var{type-information} ; @var{nbits}
1502
Documented by AIX to define a floating type, but their compiler actually
1503
uses negative type numbers (@pxref{Negative Type Numbers}).
1504
 
1505
@item c @var{type-information} ; @var{nbits}
1506
Documented by AIX to define a complex type, but their compiler actually
1507
uses negative type numbers (@pxref{Negative Type Numbers}).
1508
@end table
1509
 
1510
The C @code{void} type is defined as a signed integral type 0 bits long:
1511
@example
1512
.stabs "void:t19=bs0;0;0",128,0,0,0
1513
@end example
1514
The Solaris compiler seems to omit the trailing semicolon in this case.
1515
Getting sloppy in this way is not a swift move because if a type is
1516
embedded in a more complex expression it is necessary to be able to tell
1517
where it ends.
1518
 
1519
I'm not sure how a boolean type is represented.
1520
 
1521
@node Negative Type Numbers
1522
@subsection Negative Type Numbers
1523
 
1524
This is the method used in XCOFF for defining builtin types.
1525
Since the debugger knows about the builtin types anyway, the idea of
1526
negative type numbers is simply to give a special type number which
1527
indicates the builtin type.  There is no stab defining these types.
1528
 
1529
There are several subtle issues with negative type numbers.
1530
 
1531
One is the size of the type.  A builtin type (for example the C types
1532
@code{int} or @code{long}) might have different sizes depending on
1533
compiler options, the target architecture, the ABI, etc.  This issue
1534
doesn't come up for IBM tools since (so far) they just target the
1535
RS/6000; the sizes indicated below for each size are what the IBM
1536
RS/6000 tools use.  To deal with differing sizes, either define separate
1537
negative type numbers for each size (which works but requires changing
1538
the debugger, and, unless you get both AIX dbx and GDB to accept the
1539
change, introduces an incompatibility), or use a type attribute
1540
(@pxref{String Field}) to define a new type with the appropriate size
1541
(which merely requires a debugger which understands type attributes,
1542
like AIX dbx or GDB).  For example,
1543
 
1544
@example
1545
.stabs "boolean:t10=@@s8;-16",128,0,0,0
1546
@end example
1547
 
1548
defines an 8-bit boolean type, and
1549
 
1550
@example
1551
.stabs "boolean:t10=@@s64;-16",128,0,0,0
1552
@end example
1553
 
1554
defines a 64-bit boolean type.
1555
 
1556
A similar issue is the format of the type.  This comes up most often for
1557
floating-point types, which could have various formats (particularly
1558
extended doubles, which vary quite a bit even among IEEE systems).
1559
Again, it is best to define a new negative type number for each
1560
different format; changing the format based on the target system has
1561
various problems.  One such problem is that the Alpha has both VAX and
1562
IEEE floating types.  One can easily imagine one library using the VAX
1563
types and another library in the same executable using the IEEE types.
1564
Another example is that the interpretation of whether a boolean is true
1565
or false can be based on the least significant bit, most significant
1566
bit, whether it is zero, etc., and different compilers (or different
1567
options to the same compiler) might provide different kinds of boolean.
1568
 
1569
The last major issue is the names of the types.  The name of a given
1570
type depends @emph{only} on the negative type number given; these do not
1571
vary depending on the language, the target system, or anything else.
1572
One can always define separate type numbers---in the following list you
1573
will see for example separate @code{int} and @code{integer*4} types
1574
which are identical except for the name.  But compatibility can be
1575
maintained by not inventing new negative type numbers and instead just
1576
defining a new type with a new name.  For example:
1577
 
1578
@example
1579
.stabs "CARDINAL:t10=-8",128,0,0,0
1580
@end example
1581
 
1582
Here is the list of negative type numbers.  The phrase @dfn{integral
1583
type} is used to mean twos-complement (I strongly suspect that all
1584
machines which use stabs use twos-complement; most machines use
1585
twos-complement these days).
1586
 
1587
@table @code
1588
@item -1
1589
@code{int}, 32 bit signed integral type.
1590
 
1591
@item -2
1592
@code{char}, 8 bit type holding a character.   Both GDB and dbx on AIX
1593
treat this as signed.  GCC uses this type whether @code{char} is signed
1594
or not, which seems like a bad idea.  The AIX compiler (@code{xlc}) seems to
1595
avoid this type; it uses -5 instead for @code{char}.
1596
 
1597
@item -3
1598
@code{short}, 16 bit signed integral type.
1599
 
1600
@item -4
1601
@code{long}, 32 bit signed integral type.
1602
 
1603
@item -5
1604
@code{unsigned char}, 8 bit unsigned integral type.
1605
 
1606
@item -6
1607
@code{signed char}, 8 bit signed integral type.
1608
 
1609
@item -7
1610
@code{unsigned short}, 16 bit unsigned integral type.
1611
 
1612
@item -8
1613
@code{unsigned int}, 32 bit unsigned integral type.
1614
 
1615
@item -9
1616
@code{unsigned}, 32 bit unsigned integral type.
1617
 
1618
@item -10
1619
@code{unsigned long}, 32 bit unsigned integral type.
1620
 
1621
@item -11
1622
@code{void}, type indicating the lack of a value.
1623
 
1624
@item -12
1625
@code{float}, IEEE single precision.
1626
 
1627
@item -13
1628
@code{double}, IEEE double precision.
1629
 
1630
@item -14
1631
@code{long double}, IEEE double precision.  The compiler claims the size
1632
will increase in a future release, and for binary compatibility you have
1633
to avoid using @code{long double}.  I hope when they increase it they
1634
use a new negative type number.
1635
 
1636
@item -15
1637
@code{integer}.  32 bit signed integral type.
1638
 
1639
@item -16
1640
@code{boolean}.  32 bit type.  GDB and GCC assume that zero is false,
1641
one is true, and other values have unspecified meaning.  I hope this
1642
agrees with how the IBM tools use the type.
1643
 
1644
@item -17
1645
@code{short real}.  IEEE single precision.
1646
 
1647
@item -18
1648
@code{real}.  IEEE double precision.
1649
 
1650
@item -19
1651
@code{stringptr}.  @xref{Strings}.
1652
 
1653
@item -20
1654
@code{character}, 8 bit unsigned character type.
1655
 
1656
@item -21
1657
@code{logical*1}, 8 bit type.  This Fortran type has a split
1658
personality in that it is used for boolean variables, but can also be
1659
used for unsigned integers.  0 is false, 1 is true, and other values are
1660
non-boolean.
1661
 
1662
@item -22
1663
@code{logical*2}, 16 bit type.  This Fortran type has a split
1664
personality in that it is used for boolean variables, but can also be
1665
used for unsigned integers.  0 is false, 1 is true, and other values are
1666
non-boolean.
1667
 
1668
@item -23
1669
@code{logical*4}, 32 bit type.  This Fortran type has a split
1670
personality in that it is used for boolean variables, but can also be
1671
used for unsigned integers.  0 is false, 1 is true, and other values are
1672
non-boolean.
1673
 
1674
@item -24
1675
@code{logical}, 32 bit type.  This Fortran type has a split
1676
personality in that it is used for boolean variables, but can also be
1677
used for unsigned integers.  0 is false, 1 is true, and other values are
1678
non-boolean.
1679
 
1680
@item -25
1681
@code{complex}.  A complex type consisting of two IEEE single-precision
1682
floating point values.
1683
 
1684
@item -26
1685
@code{complex}.  A complex type consisting of two IEEE double-precision
1686
floating point values.
1687
 
1688
@item -27
1689
@code{integer*1}, 8 bit signed integral type.
1690
 
1691
@item -28
1692
@code{integer*2}, 16 bit signed integral type.
1693
 
1694
@item -29
1695
@code{integer*4}, 32 bit signed integral type.
1696
 
1697
@item -30
1698
@code{wchar}.  Wide character, 16 bits wide, unsigned (what format?
1699
Unicode?).
1700
 
1701
@item -31
1702
@code{long long}, 64 bit signed integral type.
1703
 
1704
@item -32
1705
@code{unsigned long long}, 64 bit unsigned integral type.
1706
 
1707
@item -33
1708
@code{logical*8}, 64 bit unsigned integral type.
1709
 
1710
@item -34
1711
@code{integer*8}, 64 bit signed integral type.
1712
@end table
1713
 
1714
@node Miscellaneous Types
1715
@section Miscellaneous Types
1716
 
1717
@table @code
1718
@item b @var{type-information} ; @var{bytes}
1719
Pascal space type.  This is documented by IBM; what does it mean?
1720
 
1721
This use of the @samp{b} type descriptor can be distinguished
1722
from its use for builtin integral types (@pxref{Builtin Type
1723
Descriptors}) because the character following the type descriptor is
1724
always a digit, @samp{(}, or @samp{-}.
1725
 
1726
@item B @var{type-information}
1727
A volatile-qualified version of @var{type-information}.  This is
1728
a Sun extension.  References and stores to a variable with a
1729
volatile-qualified type must not be optimized or cached; they
1730
must occur as the user specifies them.
1731
 
1732
@item d @var{type-information}
1733
File of type @var{type-information}.  As far as I know this is only used
1734
by Pascal.
1735
 
1736
@item k @var{type-information}
1737
A const-qualified version of @var{type-information}.  This is a Sun
1738
extension.  A variable with a const-qualified type cannot be modified.
1739
 
1740
@item M @var{type-information} ; @var{length}
1741
Multiple instance type.  The type seems to composed of @var{length}
1742
repetitions of @var{type-information}, for example @code{character*3} is
1743
represented by @samp{M-2;3}, where @samp{-2} is a reference to a
1744
character type (@pxref{Negative Type Numbers}).  I'm not sure how this
1745
differs from an array.  This appears to be a Fortran feature.
1746
@var{length} is a bound, like those in range types; see @ref{Subranges}.
1747
 
1748
@item S @var{type-information}
1749
Pascal set type.  @var{type-information} must be a small type such as an
1750
enumeration or a subrange, and the type is a bitmask whose length is
1751
specified by the number of elements in @var{type-information}.
1752
 
1753
In CHILL, if it is a bitstring instead of a set, also use the @samp{S}
1754
type attribute (@pxref{String Field}).
1755
 
1756
@item * @var{type-information}
1757
Pointer to @var{type-information}.
1758
@end table
1759
 
1760
@node Cross-References
1761
@section Cross-References to Other Types
1762
 
1763
A type can be used before it is defined; one common way to deal with
1764
that situation is just to use a type reference to a type which has not
1765
yet been defined.
1766
 
1767
Another way is with the @samp{x} type descriptor, which is followed by
1768
@samp{s} for a structure tag, @samp{u} for a union tag, or @samp{e} for
1769
a enumerator tag, followed by the name of the tag, followed by @samp{:}.
1770
If the name contains @samp{::} between a @samp{<} and @samp{>} pair (for
1771
C++ templates), such a @samp{::} does not end the name---only a single
1772
@samp{:} ends the name; see @ref{Nested Symbols}.
1773
 
1774
For example, the following C declarations:
1775
 
1776
@example
1777
struct foo;
1778
struct foo *bar;
1779
@end example
1780
 
1781
@noindent
1782
produce:
1783
 
1784
@example
1785
.stabs "bar:G16=*17=xsfoo:",32,0,0,0
1786
@end example
1787
 
1788
Not all debuggers support the @samp{x} type descriptor, so on some
1789
machines GCC does not use it.  I believe that for the above example it
1790
would just emit a reference to type 17 and never define it, but I
1791
haven't verified that.
1792
 
1793
Modula-2 imported types, at least on AIX, use the @samp{i} type
1794
descriptor, which is followed by the name of the module from which the
1795
type is imported, followed by @samp{:}, followed by the name of the
1796
type.  There is then optionally a comma followed by type information for
1797
the type.  This differs from merely naming the type (@pxref{Typedefs}) in
1798
that it identifies the module; I don't understand whether the name of
1799
the type given here is always just the same as the name we are giving
1800
it, or whether this type descriptor is used with a nameless stab
1801
(@pxref{String Field}), or what.  The symbol ends with @samp{;}.
1802
 
1803
@node Subranges
1804
@section Subrange Types
1805
 
1806
The @samp{r} type descriptor defines a type as a subrange of another
1807
type.  It is followed by type information for the type of which it is a
1808
subrange, a semicolon, an integral lower bound, a semicolon, an
1809
integral upper bound, and a semicolon.  The AIX documentation does not
1810
specify the trailing semicolon, in an effort to specify array indexes
1811
more cleanly, but a subrange which is not an array index has always
1812
included a trailing semicolon (@pxref{Arrays}).
1813
 
1814
Instead of an integer, either bound can be one of the following:
1815
 
1816
@table @code
1817
@item A @var{offset}
1818
The bound is passed by reference on the stack at offset @var{offset}
1819
from the argument list.  @xref{Parameters}, for more information on such
1820
offsets.
1821
 
1822
@item T @var{offset}
1823
The bound is passed by value on the stack at offset @var{offset} from
1824
the argument list.
1825
 
1826
@item a @var{register-number}
1827
The bound is passed by reference in register number
1828
@var{register-number}.
1829
 
1830
@item t @var{register-number}
1831
The bound is passed by value in register number @var{register-number}.
1832
 
1833
@item J
1834
There is no bound.
1835
@end table
1836
 
1837
Subranges are also used for builtin types; see @ref{Traditional Builtin Types}.
1838
 
1839
@node Arrays
1840
@section Array Types
1841
 
1842
Arrays use the @samp{a} type descriptor.  Following the type descriptor
1843
is the type of the index and the type of the array elements.  If the
1844
index type is a range type, it ends in a semicolon; otherwise
1845
(for example, if it is a type reference), there does not
1846
appear to be any way to tell where the types are separated.  In an
1847
effort to clean up this mess, IBM documents the two types as being
1848
separated by a semicolon, and a range type as not ending in a semicolon
1849
(but this is not right for range types which are not array indexes,
1850
@pxref{Subranges}).  I think probably the best solution is to specify
1851
that a semicolon ends a range type, and that the index type and element
1852
type of an array are separated by a semicolon, but that if the index
1853
type is a range type, the extra semicolon can be omitted.  GDB (at least
1854
through version 4.9) doesn't support any kind of index type other than a
1855
range anyway; I'm not sure about dbx.
1856
 
1857
It is well established, and widely used, that the type of the index,
1858
unlike most types found in the stabs, is merely a type definition, not
1859
type information (@pxref{String Field}) (that is, it need not start with
1860
@samp{@var{type-number}=} if it is defining a new type).  According to a
1861
comment in GDB, this is also true of the type of the array elements; it
1862
gives @samp{ar1;1;10;ar1;1;10;4} as a legitimate way to express a two
1863
dimensional array.  According to AIX documentation, the element type
1864
must be type information.  GDB accepts either.
1865
 
1866
The type of the index is often a range type, expressed as the type
1867
descriptor @samp{r} and some parameters.  It defines the size of the
1868
array.  In the example below, the range @samp{r1;0;2;} defines an index
1869
type which is a subrange of type 1 (integer), with a lower bound of 0
1870
and an upper bound of 2.  This defines the valid range of subscripts of
1871
a three-element C array.
1872
 
1873
For example, the definition:
1874
 
1875
@example
1876
char char_vec[3] = @{'a','b','c'@};
1877
@end example
1878
 
1879
@noindent
1880
produces the output:
1881
 
1882
@example
1883
.stabs "char_vec:G19=ar1;0;2;2",32,0,0,0
1884
     .global _char_vec
1885
     .align 4
1886
_char_vec:
1887
     .byte 97
1888
     .byte 98
1889
     .byte 99
1890
@end example
1891
 
1892
If an array is @dfn{packed}, the elements are spaced more
1893
closely than normal, saving memory at the expense of speed.  For
1894
example, an array of 3-byte objects might, if unpacked, have each
1895
element aligned on a 4-byte boundary, but if packed, have no padding.
1896
One way to specify that something is packed is with type attributes
1897
(@pxref{String Field}).  In the case of arrays, another is to use the
1898
@samp{P} type descriptor instead of @samp{a}.  Other than specifying a
1899
packed array, @samp{P} is identical to @samp{a}.
1900
 
1901
@c FIXME-what is it?  A pointer?
1902
An open array is represented by the @samp{A} type descriptor followed by
1903
type information specifying the type of the array elements.
1904
 
1905
@c FIXME: what is the format of this type?  A pointer to a vector of pointers?
1906
An N-dimensional dynamic array is represented by
1907
 
1908
@example
1909
D @var{dimensions} ; @var{type-information}
1910
@end example
1911
 
1912
@c Does dimensions really have this meaning?  The AIX documentation
1913
@c doesn't say.
1914
@var{dimensions} is the number of dimensions; @var{type-information}
1915
specifies the type of the array elements.
1916
 
1917
@c FIXME: what is the format of this type?  A pointer to some offsets in
1918
@c another array?
1919
A subarray of an N-dimensional array is represented by
1920
 
1921
@example
1922
E @var{dimensions} ; @var{type-information}
1923
@end example
1924
 
1925
@c Does dimensions really have this meaning?  The AIX documentation
1926
@c doesn't say.
1927
@var{dimensions} is the number of dimensions; @var{type-information}
1928
specifies the type of the array elements.
1929
 
1930
@node Strings
1931
@section Strings
1932
 
1933
Some languages, like C or the original Pascal, do not have string types,
1934
they just have related things like arrays of characters.  But most
1935
Pascals and various other languages have string types, which are
1936
indicated as follows:
1937
 
1938
@table @code
1939
@item n @var{type-information} ; @var{bytes}
1940
@var{bytes} is the maximum length.  I'm not sure what
1941
@var{type-information} is; I suspect that it means that this is a string
1942
of @var{type-information} (thus allowing a string of integers, a string
1943
of wide characters, etc., as well as a string of characters).  Not sure
1944
what the format of this type is.  This is an AIX feature.
1945
 
1946
@item z @var{type-information} ; @var{bytes}
1947
Just like @samp{n} except that this is a gstring, not an ordinary
1948
string.  I don't know the difference.
1949
 
1950
@item N
1951
Pascal Stringptr.  What is this?  This is an AIX feature.
1952
@end table
1953
 
1954
Languages, such as CHILL which have a string type which is basically
1955
just an array of characters use the @samp{S} type attribute
1956
(@pxref{String Field}).
1957
 
1958
@node Enumerations
1959
@section Enumerations
1960
 
1961
Enumerations are defined with the @samp{e} type descriptor.
1962
 
1963
@c FIXME: Where does this information properly go?  Perhaps it is
1964
@c redundant with something we already explain.
1965
The source line below declares an enumeration type at file scope.
1966
The type definition is located after the @code{N_RBRAC} that marks the end of
1967
the previous procedure's block scope, and before the @code{N_FUN} that marks
1968
the beginning of the next procedure's block scope.  Therefore it does not
1969
describe a block local symbol, but a file local one.
1970
 
1971
The source line:
1972
 
1973
@example
1974
enum e_places @{first,second=3,last@};
1975
@end example
1976
 
1977
@noindent
1978
generates the following stab:
1979
 
1980
@example
1981
.stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0
1982
@end example
1983
 
1984
The symbol descriptor (@samp{T}) says that the stab describes a
1985
structure, enumeration, or union tag.  The type descriptor @samp{e},
1986
following the @samp{22=} of the type definition narrows it down to an
1987
enumeration type.  Following the @samp{e} is a list of the elements of
1988
the enumeration.  The format is @samp{@var{name}:@var{value},}.  The
1989
list of elements ends with @samp{;}.  The fact that @var{value} is
1990
specified as an integer can cause problems if the value is large.  GCC
1991
2.5.2 tries to output it in octal in that case with a leading zero,
1992
which is probably a good thing, although GDB 4.11 supports octal only in
1993
cases where decimal is perfectly good.  Negative decimal values are
1994
supported by both GDB and dbx.
1995
 
1996
There is no standard way to specify the size of an enumeration type; it
1997
is determined by the architecture (normally all enumerations types are
1998
32 bits).  Type attributes can be used to specify an enumeration type of
1999
another size for debuggers which support them; see @ref{String Field}.
2000
 
2001
Enumeration types are unusual in that they define symbols for the
2002
enumeration values (@code{first}, @code{second}, and @code{third} in the
2003
above example), and even though these symbols are visible in the file as
2004
a whole (rather than being in a more local namespace like structure
2005
member names), they are defined in the type definition for the
2006
enumeration type rather than each having their own symbol.  In order to
2007
be fast, GDB will only get symbols from such types (in its initial scan
2008
of the stabs) if the type is the first thing defined after a @samp{T} or
2009
@samp{t} symbol descriptor (the above example fulfills this
2010
requirement).  If the type does not have a name, the compiler should
2011
emit it in a nameless stab (@pxref{String Field}); GCC does this.
2012
 
2013
@node Structures
2014
@section Structures
2015
 
2016
The encoding of structures in stabs can be shown with an example.
2017
 
2018
The following source code declares a structure tag and defines an
2019
instance of the structure in global scope. Then a @code{typedef} equates the
2020
structure tag with a new type.  Separate stabs are generated for the
2021
structure tag, the structure @code{typedef}, and the structure instance.  The
2022
stabs for the tag and the @code{typedef} are emitted when the definitions are
2023
encountered.  Since the structure elements are not initialized, the
2024
stab and code for the structure variable itself is located at the end
2025
of the program in the bss section.
2026
 
2027
@example
2028
struct s_tag @{
2029
  int   s_int;
2030
  float s_float;
2031
  char  s_char_vec[8];
2032
  struct s_tag* s_next;
2033
@} g_an_s;
2034
 
2035
typedef struct s_tag s_typedef;
2036
@end example
2037
 
2038
The structure tag has an @code{N_LSYM} stab type because, like the
2039
enumeration, the symbol has file scope.  Like the enumeration, the
2040
symbol descriptor is @samp{T}, for enumeration, structure, or tag type.
2041
The type descriptor @samp{s} following the @samp{16=} of the type
2042
definition narrows the symbol type to structure.
2043
 
2044
Following the @samp{s} type descriptor is the number of bytes the
2045
structure occupies, followed by a description of each structure element.
2046
The structure element descriptions are of the form @var{name:type, bit
2047
offset from the start of the struct, number of bits in the element}.
2048
 
2049
@c FIXME: phony line break.  Can probably be fixed by using an example
2050
@c with fewer fields.
2051
@example
2052
# @r{128 is N_LSYM}
2053
.stabs "s_tag:T16=s20s_int:1,0,32;s_float:12,32,32;
2054
        s_char_vec:17=ar1;0;7;2,64,64;s_next:18=*16,128,32;;",128,0,0,0
2055
@end example
2056
 
2057
In this example, the first two structure elements are previously defined
2058
types.  For these, the type following the @samp{@var{name}:} part of the
2059
element description is a simple type reference.  The other two structure
2060
elements are new types.  In this case there is a type definition
2061
embedded after the @samp{@var{name}:}.  The type definition for the
2062
array element looks just like a type definition for a stand-alone array.
2063
The @code{s_next} field is a pointer to the same kind of structure that
2064
the field is an element of.  So the definition of structure type 16
2065
contains a type definition for an element which is a pointer to type 16.
2066
 
2067
If a field is a static member (this is a C++ feature in which a single
2068
variable appears to be a field of every structure of a given type) it
2069
still starts out with the field name, a colon, and the type, but then
2070
instead of a comma, bit position, comma, and bit size, there is a colon
2071
followed by the name of the variable which each such field refers to.
2072
 
2073
If the structure has methods (a C++ feature), they follow the non-method
2074
fields; see @ref{Cplusplus}.
2075
 
2076
@node Typedefs
2077
@section Giving a Type a Name
2078
 
2079
@findex N_LSYM, for types
2080
@findex C_DECL, for types
2081
To give a type a name, use the @samp{t} symbol descriptor.  The type
2082
is specified by the type information (@pxref{String Field}) for the stab.
2083
For example,
2084
 
2085
@example
2086
.stabs "s_typedef:t16",128,0,0,0     # @r{128 is N_LSYM}
2087
@end example
2088
 
2089
specifies that @code{s_typedef} refers to type number 16.  Such stabs
2090
have symbol type @code{N_LSYM} (or @code{C_DECL} for XCOFF).  (The Sun
2091
documentation mentions using @code{N_GSYM} in some cases).
2092
 
2093
If you are specifying the tag name for a structure, union, or
2094
enumeration, use the @samp{T} symbol descriptor instead.  I believe C is
2095
the only language with this feature.
2096
 
2097
If the type is an opaque type (I believe this is a Modula-2 feature),
2098
AIX provides a type descriptor to specify it.  The type descriptor is
2099
@samp{o} and is followed by a name.  I don't know what the name
2100
means---is it always the same as the name of the type, or is this type
2101
descriptor used with a nameless stab (@pxref{String Field})?  There
2102
optionally follows a comma followed by type information which defines
2103
the type of this type.  If omitted, a semicolon is used in place of the
2104
comma and the type information, and the type is much like a generic
2105
pointer type---it has a known size but little else about it is
2106
specified.
2107
 
2108
@node Unions
2109
@section Unions
2110
 
2111
@example
2112
union u_tag @{
2113
  int  u_int;
2114
  float u_float;
2115
  char* u_char;
2116
@} an_u;
2117
@end example
2118
 
2119
This code generates a stab for a union tag and a stab for a union
2120
variable.  Both use the @code{N_LSYM} stab type.  If a union variable is
2121
scoped locally to the procedure in which it is defined, its stab is
2122
located immediately preceding the @code{N_LBRAC} for the procedure's block
2123
start.
2124
 
2125
The stab for the union tag, however, is located preceding the code for
2126
the procedure in which it is defined.  The stab type is @code{N_LSYM}.  This
2127
would seem to imply that the union type is file scope, like the struct
2128
type @code{s_tag}.  This is not true.  The contents and position of the stab
2129
for @code{u_type} do not convey any information about its procedure local
2130
scope.
2131
 
2132
@c FIXME: phony line break.  Can probably be fixed by using an example
2133
@c with fewer fields.
2134
@smallexample
2135
# @r{128 is N_LSYM}
2136
.stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",
2137
       128,0,0,0
2138
@end smallexample
2139
 
2140
The symbol descriptor @samp{T}, following the @samp{name:} means that
2141
the stab describes an enumeration, structure, or union tag.  The type
2142
descriptor @samp{u}, following the @samp{23=} of the type definition,
2143
narrows it down to a union type definition.  Following the @samp{u} is
2144
the number of bytes in the union.  After that is a list of union element
2145
descriptions.  Their format is @var{name:type, bit offset into the
2146
union, number of bytes for the element;}.
2147
 
2148
The stab for the union variable is:
2149
 
2150
@example
2151
.stabs "an_u:23",128,0,0,-20     # @r{128 is N_LSYM}
2152
@end example
2153
 
2154
@samp{-20} specifies where the variable is stored (@pxref{Stack
2155
Variables}).
2156
 
2157
@node Function Types
2158
@section Function Types
2159
 
2160
Various types can be defined for function variables.  These types are
2161
not used in defining functions (@pxref{Procedures}); they are used for
2162
things like pointers to functions.
2163
 
2164
The simple, traditional, type is type descriptor @samp{f} is followed by
2165
type information for the return type of the function, followed by a
2166
semicolon.
2167
 
2168
This does not deal with functions for which the number and types of the
2169
parameters are part of the type, as in Modula-2 or ANSI C.  AIX provides
2170
extensions to specify these, using the @samp{f}, @samp{F}, @samp{p}, and
2171
@samp{R} type descriptors.
2172
 
2173
First comes the type descriptor.  If it is @samp{f} or @samp{F}, this
2174
type involves a function rather than a procedure, and the type
2175
information for the return type of the function follows, followed by a
2176
comma.  Then comes the number of parameters to the function and a
2177
semicolon.  Then, for each parameter, there is the name of the parameter
2178
followed by a colon (this is only present for type descriptors @samp{R}
2179
and @samp{F} which represent Pascal function or procedure parameters),
2180
type information for the parameter, a comma, 0 if passed by reference or
2181
1 if passed by value, and a semicolon.  The type definition ends with a
2182
semicolon.
2183
 
2184
For example, this variable definition:
2185
 
2186
@example
2187
int (*g_pf)();
2188
@end example
2189
 
2190
@noindent
2191
generates the following code:
2192
 
2193
@example
2194
.stabs "g_pf:G24=*25=f1",32,0,0,0
2195
    .common _g_pf,4,"bss"
2196
@end example
2197
 
2198
The variable defines a new type, 24, which is a pointer to another new
2199
type, 25, which is a function returning @code{int}.
2200
 
2201
@node Symbol Tables
2202
@chapter Symbol Information in Symbol Tables
2203
 
2204
This chapter describes the format of symbol table entries
2205
and how stab assembler directives map to them.  It also describes the
2206
transformations that the assembler and linker make on data from stabs.
2207
 
2208
@menu
2209
* Symbol Table Format::
2210
* Transformations On Symbol Tables::
2211
@end menu
2212
 
2213
@node Symbol Table Format
2214
@section Symbol Table Format
2215
 
2216
Each time the assembler encounters a stab directive, it puts
2217
each field of the stab into a corresponding field in a symbol table
2218
entry of its output file.  If the stab contains a string field, the
2219
symbol table entry for that stab points to a string table entry
2220
containing the string data from the stab.  Assembler labels become
2221
relocatable addresses.  Symbol table entries in a.out have the format:
2222
 
2223
@c FIXME: should refer to external, not internal.
2224
@example
2225
struct internal_nlist @{
2226
  unsigned long n_strx;         /* index into string table of name */
2227
  unsigned char n_type;         /* type of symbol */
2228
  unsigned char n_other;        /* misc info (usually empty) */
2229
  unsigned short n_desc;        /* description field */
2230
  bfd_vma n_value;              /* value of symbol */
2231
@};
2232
@end example
2233
 
2234
If the stab has a string, the @code{n_strx} field holds the offset in
2235
bytes of the string within the string table.  The string is terminated
2236
by a NUL character.  If the stab lacks a string (for example, it was
2237
produced by a @code{.stabn} or @code{.stabd} directive), the
2238
@code{n_strx} field is zero.
2239
 
2240
Symbol table entries with @code{n_type} field values greater than 0x1f
2241
originated as stabs generated by the compiler (with one random
2242
exception).  The other entries were placed in the symbol table of the
2243
executable by the assembler or the linker.
2244
 
2245
@node Transformations On Symbol Tables
2246
@section Transformations on Symbol Tables
2247
 
2248
The linker concatenates object files and does fixups of externally
2249
defined symbols.
2250
 
2251
You can see the transformations made on stab data by the assembler and
2252
linker by examining the symbol table after each pass of the build.  To
2253
do this, use @samp{nm -ap}, which dumps the symbol table, including
2254
debugging information, unsorted.  For stab entries the columns are:
2255
@var{value}, @var{other}, @var{desc}, @var{type}, @var{string}.  For
2256
assembler and linker symbols, the columns are: @var{value}, @var{type},
2257
@var{string}.
2258
 
2259
The low 5 bits of the stab type tell the linker how to relocate the
2260
value of the stab.  Thus for stab types like @code{N_RSYM} and
2261
@code{N_LSYM}, where the value is an offset or a register number, the
2262
low 5 bits are @code{N_ABS}, which tells the linker not to relocate the
2263
value.
2264
 
2265
Where the value of a stab contains an assembly language label,
2266
it is transformed by each build step.  The assembler turns it into a
2267
relocatable address and the linker turns it into an absolute address.
2268
 
2269
@menu
2270
* Transformations On Static Variables::
2271
* Transformations On Global Variables::
2272
* Stab Section Transformations::           For some object file formats,
2273
                                           things are a bit different.
2274
@end menu
2275
 
2276
@node Transformations On Static Variables
2277
@subsection Transformations on Static Variables
2278
 
2279
This source line defines a static variable at file scope:
2280
 
2281
@example
2282
static int s_g_repeat
2283
@end example
2284
 
2285
@noindent
2286
The following stab describes the symbol:
2287
 
2288
@example
2289
.stabs "s_g_repeat:S1",38,0,0,_s_g_repeat
2290
@end example
2291
 
2292
@noindent
2293
The assembler transforms the stab into this symbol table entry in the
2294
@file{.o} file.  The location is expressed as a data segment offset.
2295
 
2296
@example
2297
00000084 - 00 0000 STSYM s_g_repeat:S1
2298
@end example
2299
 
2300
@noindent
2301
In the symbol table entry from the executable, the linker has made the
2302
relocatable address absolute.
2303
 
2304
@example
2305
0000e00c - 00 0000 STSYM s_g_repeat:S1
2306
@end example
2307
 
2308
@node Transformations On Global Variables
2309
@subsection Transformations on Global Variables
2310
 
2311
Stabs for global variables do not contain location information. In
2312
this case, the debugger finds location information in the assembler or
2313
linker symbol table entry describing the variable.  The source line:
2314
 
2315
@example
2316
char g_foo = 'c';
2317
@end example
2318
 
2319
@noindent
2320
generates the stab:
2321
 
2322
@example
2323
.stabs "g_foo:G2",32,0,0,0
2324
@end example
2325
 
2326
The variable is represented by two symbol table entries in the object
2327
file (see below).  The first one originated as a stab.  The second one
2328
is an external symbol.  The upper case @samp{D} signifies that the
2329
@code{n_type} field of the symbol table contains 7, @code{N_DATA} with
2330
local linkage.  The stab's value is zero since the value is not used for
2331
@code{N_GSYM} stabs.  The value of the linker symbol is the relocatable
2332
address corresponding to the variable.
2333
 
2334
@example
2335
00000000 - 00 0000  GSYM g_foo:G2
2336
00000080 D _g_foo
2337
@end example
2338
 
2339
@noindent
2340
These entries as transformed by the linker.  The linker symbol table
2341
entry now holds an absolute address:
2342
 
2343
@example
2344
00000000 - 00 0000  GSYM g_foo:G2
2345
@dots{}
2346
0000e008 D _g_foo
2347
@end example
2348
 
2349
@node Stab Section Transformations
2350
@subsection Transformations of Stabs in separate sections
2351
 
2352
For object file formats using stabs in separate sections (@pxref{Stab
2353
Sections}), use @code{objdump --stabs} instead of @code{nm} to show the
2354
stabs in an object or executable file.  @code{objdump} is a GNU utility;
2355
Sun does not provide any equivalent.
2356
 
2357
The following example is for a stab whose value is an address is
2358
relative to the compilation unit (@pxref{ELF Linker Relocation}).  For
2359
example, if the source line
2360
 
2361
@example
2362
static int ld = 5;
2363
@end example
2364
 
2365
appears within a function, then the assembly language output from the
2366
compiler contains:
2367
 
2368
@example
2369
.Ddata.data:
2370
@dots{}
2371
        .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data    # @r{0x26 is N_STSYM}
2372
@dots{}
2373
.L18:
2374
        .align 4
2375
        .word 0x5
2376
@end example
2377
 
2378
Because the value is formed by subtracting one symbol from another, the
2379
value is absolute, not relocatable, and so the object file contains
2380
 
2381
@example
2382
Symnum n_type n_othr n_desc n_value  n_strx String
2383
31     STSYM  0      4      00000004 680    ld:V(0,3)
2384
@end example
2385
 
2386
without any relocations, and the executable file also contains
2387
 
2388
@example
2389
Symnum n_type n_othr n_desc n_value  n_strx String
2390
31     STSYM  0      4      00000004 680    ld:V(0,3)
2391
@end example
2392
 
2393
@node Cplusplus
2394
@chapter GNU C++ Stabs
2395
 
2396
@menu
2397
* Class Names::                 C++ class names are both tags and typedefs.
2398
* Nested Symbols::              C++ symbol names can be within other types.
2399
* Basic Cplusplus Types::
2400
* Simple Classes::
2401
* Class Instance::
2402
* Methods::                     Method definition
2403
* Method Type Descriptor::      The @samp{#} type descriptor
2404
* Member Type Descriptor::      The @samp{@@} type descriptor
2405
* Protections::
2406
* Method Modifiers::
2407
* Virtual Methods::
2408
* Inheritance::
2409
* Virtual Base Classes::
2410
* Static Members::
2411
@end menu
2412
 
2413
@node Class Names
2414
@section C++ Class Names
2415
 
2416
In C++, a class name which is declared with @code{class}, @code{struct},
2417
or @code{union}, is not only a tag, as in C, but also a type name.  Thus
2418
there should be stabs with both @samp{t} and @samp{T} symbol descriptors
2419
(@pxref{Typedefs}).
2420
 
2421
To save space, there is a special abbreviation for this case.  If the
2422
@samp{T} symbol descriptor is followed by @samp{t}, then the stab
2423
defines both a type name and a tag.
2424
 
2425
For example, the C++ code
2426
 
2427
@example
2428
struct foo @{int x;@};
2429
@end example
2430
 
2431
can be represented as either
2432
 
2433
@example
2434
.stabs "foo:T19=s4x:1,0,32;;",128,0,0,0       # @r{128 is N_LSYM}
2435
.stabs "foo:t19",128,0,0,0
2436
@end example
2437
 
2438
or
2439
 
2440
@example
2441
.stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
2442
@end example
2443
 
2444
@node Nested Symbols
2445
@section Defining a Symbol Within Another Type
2446
 
2447
In C++, a symbol (such as a type name) can be defined within another type.
2448
@c FIXME: Needs example.
2449
 
2450
In stabs, this is sometimes represented by making the name of a symbol
2451
which contains @samp{::}.  Such a pair of colons does not end the name
2452
of the symbol, the way a single colon would (@pxref{String Field}).  I'm
2453
not sure how consistently used or well thought out this mechanism is.
2454
So that a pair of colons in this position always has this meaning,
2455
@samp{:} cannot be used as a symbol descriptor.
2456
 
2457
For example, if the string for a stab is @samp{foo::bar::baz:t5=*6},
2458
then @code{foo::bar::baz} is the name of the symbol, @samp{t} is the
2459
symbol descriptor, and @samp{5=*6} is the type information.
2460
 
2461
@node Basic Cplusplus Types
2462
@section Basic Types For C++
2463
 
2464
<< the examples that follow are based on a01.C >>
2465
 
2466
 
2467
C++ adds two more builtin types to the set defined for C.  These are
2468
the unknown type and the vtable record type.  The unknown type, type
2469
16, is defined in terms of itself like the void type.
2470
 
2471
The vtable record type, type 17, is defined as a structure type and
2472
then as a structure tag.  The structure has four fields: delta, index,
2473
pfn, and delta2.  pfn is the function pointer.
2474
 
2475
<< In boilerplate $vtbl_ptr_type, what are the fields delta,
2476
index, and delta2 used for? >>
2477
 
2478
This basic type is present in all C++ programs even if there are no
2479
virtual methods defined.
2480
 
2481
@display
2482
.stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
2483
        elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
2484
        elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
2485
        elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
2486
                                    bit_offset(32),field_bits(32);
2487
        elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
2488
        N_LSYM, NIL, NIL
2489
@end display
2490
 
2491
@smallexample
2492
.stabs "$vtbl_ptr_type:t17=s8
2493
        delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
2494
        ,128,0,0,0
2495
@end smallexample
2496
 
2497
@display
2498
.stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL
2499
@end display
2500
 
2501
@example
2502
.stabs "$vtbl_ptr_type:T17",128,0,0,0
2503
@end example
2504
 
2505
@node Simple Classes
2506
@section Simple Class Definition
2507
 
2508
The stabs describing C++ language features are an extension of the
2509
stabs describing C.  Stabs representing C++ class types elaborate
2510
extensively on the stab format used to describe structure types in C.
2511
Stabs representing class type variables look just like stabs
2512
representing C language variables.
2513
 
2514
Consider the following very simple class definition.
2515
 
2516
@example
2517
class baseA @{
2518
public:
2519
        int Adat;
2520
        int Ameth(int in, char other);
2521
@};
2522
@end example
2523
 
2524
The class @code{baseA} is represented by two stabs.  The first stab describes
2525
the class as a structure type.  The second stab describes a structure
2526
tag of the class type.  Both stabs are of stab type @code{N_LSYM}.  Since the
2527
stab is not located between an @code{N_FUN} and an @code{N_LBRAC} stab this indicates
2528
that the class is defined at file scope.  If it were, then the @code{N_LSYM}
2529
would signify a local variable.
2530
 
2531
A stab describing a C++ class type is similar in format to a stab
2532
describing a C struct, with each class member shown as a field in the
2533
structure.  The part of the struct format describing fields is
2534
expanded to include extra information relevant to C++ class members.
2535
In addition, if the class has multiple base classes or virtual
2536
functions the struct format outside of the field parts is also
2537
augmented.
2538
 
2539
In this simple example the field part of the C++ class stab
2540
representing member data looks just like the field part of a C struct
2541
stab.  The section on protections describes how its format is
2542
sometimes extended for member data.
2543
 
2544
The field part of a C++ class stab representing a member function
2545
differs substantially from the field part of a C struct stab.  It
2546
still begins with @samp{name:} but then goes on to define a new type number
2547
for the member function, describe its return type, its argument types,
2548
its protection level, any qualifiers applied to the method definition,
2549
and whether the method is virtual or not.  If the method is virtual
2550
then the method description goes on to give the vtable index of the
2551
method, and the type number of the first base class defining the
2552
method.
2553
 
2554
When the field name is a method name it is followed by two colons rather
2555
than one.  This is followed by a new type definition for the method.
2556
This is a number followed by an equal sign and the type of the method.
2557
Normally this will be a type declared using the @samp{#} type
2558
descriptor; see @ref{Method Type Descriptor}; static member functions
2559
are declared using the @samp{f} type descriptor instead; see
2560
@ref{Function Types}.
2561
 
2562
The format of an overloaded operator method name differs from that of
2563
other methods.  It is @samp{op$::@var{operator-name}.} where
2564
@var{operator-name} is the operator name such as @samp{+} or @samp{+=}.
2565
The name ends with a period, and any characters except the period can
2566
occur in the @var{operator-name} string.
2567
 
2568
The next part of the method description represents the arguments to the
2569
method, preceded by a colon and ending with a semi-colon.  The types of
2570
the arguments are expressed in the same way argument types are expressed
2571
in C++ name mangling.  In this example an @code{int} and a @code{char}
2572
map to @samp{ic}.
2573
 
2574
This is followed by a number, a letter, and an asterisk or period,
2575
followed by another semicolon.  The number indicates the protections
2576
that apply to the member function.  Here the 2 means public.  The
2577
letter encodes any qualifier applied to the method definition.  In
2578
this case, @samp{A} means that it is a normal function definition.  The dot
2579
shows that the method is not virtual.  The sections that follow
2580
elaborate further on these fields and describe the additional
2581
information present for virtual methods.
2582
 
2583
 
2584
@display
2585
.stabs "class_name:sym_desc(type)type_def(20)=type_desc(struct)struct_bytes(4)
2586
        field_name(Adat):type(int),bit_offset(0),field_bits(32);
2587
 
2588
        method_name(Ameth)::type_def(21)=type_desc(method)return_type(int);
2589
        :arg_types(int char);
2590
        protection(public)qualifier(normal)virtual(no);;"
2591
        N_LSYM,NIL,NIL,NIL
2592
@end display
2593
 
2594
@smallexample
2595
.stabs "baseA:t20=s4Adat:1,0,32;Ameth::21=##1;:ic;2A.;;",128,0,0,0
2596
 
2597
.stabs "class_name:sym_desc(struct tag)",N_LSYM,NIL,NIL,NIL
2598
 
2599
.stabs "baseA:T20",128,0,0,0
2600
@end smallexample
2601
 
2602
@node Class Instance
2603
@section Class Instance
2604
 
2605
As shown above, describing even a simple C++ class definition is
2606
accomplished by massively extending the stab format used in C to
2607
describe structure types.  However, once the class is defined, C stabs
2608
with no modifications can be used to describe class instances.  The
2609
following source:
2610
 
2611
@example
2612
main () @{
2613
        baseA AbaseA;
2614
@}
2615
@end example
2616
 
2617
@noindent
2618
yields the following stab describing the class instance.  It looks no
2619
different from a standard C stab describing a local variable.
2620
 
2621
@display
2622
.stabs "name:type_ref(baseA)", N_LSYM, NIL, NIL, frame_ptr_offset
2623
@end display
2624
 
2625
@example
2626
.stabs "AbaseA:20",128,0,0,-20
2627
@end example
2628
 
2629
@node Methods
2630
@section Method Definition
2631
 
2632
The class definition shown above declares Ameth.  The C++ source below
2633
defines Ameth:
2634
 
2635
@example
2636
int
2637
baseA::Ameth(int in, char other)
2638
@{
2639
        return in;
2640
@};
2641
@end example
2642
 
2643
 
2644
This method definition yields three stabs following the code of the
2645
method.  One stab describes the method itself and following two describe
2646
its parameters.  Although there is only one formal argument all methods
2647
have an implicit argument which is the @code{this} pointer.  The @code{this}
2648
pointer is a pointer to the object on which the method was called.  Note
2649
that the method name is mangled to encode the class name and argument
2650
types.  Name mangling is described in the @sc{arm} (@cite{The Annotated
2651
C++ Reference Manual}, by Ellis and Stroustrup, @sc{isbn}
2652
0-201-51459-1); @file{gpcompare.texi} in Cygnus GCC distributions
2653
describes the differences between GNU mangling and @sc{arm}
2654
mangling.
2655
@c FIXME: Use @xref, especially if this is generally installed in the
2656
@c info tree.
2657
@c FIXME: This information should be in a net release, either of GCC or
2658
@c GDB.  But gpcompare.texi doesn't seem to be in the FSF GCC.
2659
 
2660
@example
2661
.stabs "name:symbol_descriptor(global function)return_type(int)",
2662
        N_FUN, NIL, NIL, code_addr_of_method_start
2663
 
2664
.stabs "Ameth__5baseAic:F1",36,0,0,_Ameth__5baseAic
2665
@end example
2666
 
2667
Here is the stab for the @code{this} pointer implicit argument.  The
2668
name of the @code{this} pointer is always @code{this}.  Type 19, the
2669
@code{this} pointer is defined as a pointer to type 20, @code{baseA},
2670
but a stab defining @code{baseA} has not yet been emitted.  Since the
2671
compiler knows it will be emitted shortly, here it just outputs a cross
2672
reference to the undefined symbol, by prefixing the symbol name with
2673
@samp{xs}.
2674
 
2675
@example
2676
.stabs "name:sym_desc(register param)type_def(19)=
2677
        type_desc(ptr to)type_ref(baseA)=
2678
        type_desc(cross-reference to)baseA:",N_RSYM,NIL,NIL,register_number
2679
 
2680
.stabs "this:P19=*20=xsbaseA:",64,0,0,8
2681
@end example
2682
 
2683
The stab for the explicit integer argument looks just like a parameter
2684
to a C function.  The last field of the stab is the offset from the
2685
argument pointer, which in most systems is the same as the frame
2686
pointer.
2687
 
2688
@example
2689
.stabs "name:sym_desc(value parameter)type_ref(int)",
2690
        N_PSYM,NIL,NIL,offset_from_arg_ptr
2691
 
2692
.stabs "in:p1",160,0,0,72
2693
@end example
2694
 
2695
<< The examples that follow are based on A1.C >>
2696
 
2697
@node Method Type Descriptor
2698
@section The @samp{#} Type Descriptor
2699
 
2700
This is used to describe a class method.  This is a function which takes
2701
an extra argument as its first argument, for the @code{this} pointer.
2702
 
2703
If the @samp{#} is immediately followed by another @samp{#}, the second
2704
one will be followed by the return type and a semicolon.  The class and
2705
argument types are not specified, and must be determined by demangling
2706
the name of the method if it is available.
2707
 
2708
Otherwise, the single @samp{#} is followed by the class type, a comma,
2709
the return type, a comma, and zero or more parameter types separated by
2710
commas.  The list of arguments is terminated by a semicolon.  In the
2711
debugging output generated by gcc, a final argument type of @code{void}
2712
indicates a method which does not take a variable number of arguments.
2713
If the final argument type of @code{void} does not appear, the method
2714
was declared with an ellipsis.
2715
 
2716
Note that although such a type will normally be used to describe fields
2717
in structures, unions, or classes, for at least some versions of the
2718
compiler it can also be used in other contexts.
2719
 
2720
@node Member Type Descriptor
2721
@section The @samp{@@} Type Descriptor
2722
 
2723
The @samp{@@} type descriptor is for a member (class and variable) type.
2724
It is followed by type information for the offset basetype, a comma, and
2725
type information for the type of the field being pointed to.  (FIXME:
2726
this is acknowledged to be gibberish.  Can anyone say what really goes
2727
here?).
2728
 
2729
Note that there is a conflict between this and type attributes
2730
(@pxref{String Field}); both use type descriptor @samp{@@}.
2731
Fortunately, the @samp{@@} type descriptor used in this C++ sense always
2732
will be followed by a digit, @samp{(}, or @samp{-}, and type attributes
2733
never start with those things.
2734
 
2735
@node Protections
2736
@section Protections
2737
 
2738
In the simple class definition shown above all member data and
2739
functions were publicly accessible.  The example that follows
2740
contrasts public, protected and privately accessible fields and shows
2741
how these protections are encoded in C++ stabs.
2742
 
2743
If the character following the @samp{@var{field-name}:} part of the
2744
string is @samp{/}, then the next character is the visibility.  @samp{0}
2745
means private, @samp{1} means protected, and @samp{2} means public.
2746
Debuggers should ignore visibility characters they do not recognize, and
2747
assume a reasonable default (such as public) (GDB 4.11 does not, but
2748
this should be fixed in the next GDB release).  If no visibility is
2749
specified the field is public.  The visibility @samp{9} means that the
2750
field has been optimized out and is public (there is no way to specify
2751
an optimized out field with a private or protected visibility).
2752
Visibility @samp{9} is not supported by GDB 4.11; this should be fixed
2753
in the next GDB release.
2754
 
2755
The following C++ source:
2756
 
2757
@example
2758
class vis @{
2759
private:
2760
        int   priv;
2761
protected:
2762
        char  prot;
2763
public:
2764
        float pub;
2765
@};
2766
@end example
2767
 
2768
@noindent
2769
generates the following stab:
2770
 
2771
@example
2772
# @r{128 is N_LSYM}
2773
.stabs "vis:T19=s12priv:/01,0,32;prot:/12,32,8;pub:12,64,32;;",128,0,0,0
2774
@end example
2775
 
2776
@samp{vis:T19=s12} indicates that type number 19 is a 12 byte structure
2777
named @code{vis} The @code{priv} field has public visibility
2778
(@samp{/0}), type int (@samp{1}), and offset and size @samp{,0,32;}.
2779
The @code{prot} field has protected visibility (@samp{/1}), type char
2780
(@samp{2}) and offset and size @samp{,32,8;}.  The @code{pub} field has
2781
type float (@samp{12}), and offset and size @samp{,64,32;}.
2782
 
2783
Protections for member functions are signified by one digit embedded in
2784
the field part of the stab describing the method.  The digit is 0 if
2785
private, 1 if protected and 2 if public.  Consider the C++ class
2786
definition below:
2787
 
2788
@example
2789
class all_methods @{
2790
private:
2791
        int   priv_meth(int in)@{return in;@};
2792
protected:
2793
        char  protMeth(char in)@{return in;@};
2794
public:
2795
        float pubMeth(float in)@{return in;@};
2796
@};
2797
@end example
2798
 
2799
It generates the following stab.  The digit in question is to the left
2800
of an @samp{A} in each case.  Notice also that in this case two symbol
2801
descriptors apply to the class name struct tag and struct type.
2802
 
2803
@display
2804
.stabs "class_name:sym_desc(struct tag&type)type_def(21)=
2805
        sym_desc(struct)struct_bytes(1)
2806
        meth_name::type_def(22)=sym_desc(method)returning(int);
2807
        :args(int);protection(private)modifier(normal)virtual(no);
2808
        meth_name::type_def(23)=sym_desc(method)returning(char);
2809
        :args(char);protection(protected)modifier(normal)virtual(no);
2810
        meth_name::type_def(24)=sym_desc(method)returning(float);
2811
        :args(float);protection(public)modifier(normal)virtual(no);;",
2812
        N_LSYM,NIL,NIL,NIL
2813
@end display
2814
 
2815
@smallexample
2816
.stabs "all_methods:Tt21=s1priv_meth::22=##1;:i;0A.;protMeth::23=##2;:c;1A.;
2817
        pubMeth::24=##12;:f;2A.;;",128,0,0,0
2818
@end smallexample
2819
 
2820
@node Method Modifiers
2821
@section Method Modifiers (@code{const}, @code{volatile}, @code{const volatile})
2822
 
2823
<< based on a6.C >>
2824
 
2825
In the class example described above all the methods have the normal
2826
modifier.  This method modifier information is located just after the
2827
protection information for the method.  This field has four possible
2828
character values.  Normal methods use @samp{A}, const methods use
2829
@samp{B}, volatile methods use @samp{C}, and const volatile methods use
2830
@samp{D}.  Consider the class definition below:
2831
 
2832
@example
2833
class A @{
2834
public:
2835
        int ConstMeth (int arg) const @{ return arg; @};
2836
        char VolatileMeth (char arg) volatile @{ return arg; @};
2837
        float ConstVolMeth (float arg) const volatile @{return arg; @};
2838
@};
2839
@end example
2840
 
2841
This class is described by the following stab:
2842
 
2843
@display
2844
.stabs "class(A):sym_desc(struct)type_def(20)=type_desc(struct)struct_bytes(1)
2845
        meth_name(ConstMeth)::type_def(21)sym_desc(method)
2846
        returning(int);:arg(int);protection(public)modifier(const)virtual(no);
2847
        meth_name(VolatileMeth)::type_def(22)=sym_desc(method)
2848
        returning(char);:arg(char);protection(public)modifier(volatile)virt(no)
2849
        meth_name(ConstVolMeth)::type_def(23)=sym_desc(method)
2850
        returning(float);:arg(float);protection(public)modifier(const volatile)
2851
        virtual(no);;", @dots{}
2852
@end display
2853
 
2854
@example
2855
.stabs "A:T20=s1ConstMeth::21=##1;:i;2B.;VolatileMeth::22=##2;:c;2C.;
2856
             ConstVolMeth::23=##12;:f;2D.;;",128,0,0,0
2857
@end example
2858
 
2859
@node Virtual Methods
2860
@section Virtual Methods
2861
 
2862
<< The following examples are based on a4.C >>
2863
 
2864
The presence of virtual methods in a class definition adds additional
2865
data to the class description.  The extra data is appended to the
2866
description of the virtual method and to the end of the class
2867
description.  Consider the class definition below:
2868
 
2869
@example
2870
class A @{
2871
public:
2872
        int Adat;
2873
        virtual int A_virt (int arg) @{ return arg; @};
2874
@};
2875
@end example
2876
 
2877
This results in the stab below describing class A.  It defines a new
2878
type (20) which is an 8 byte structure.  The first field of the class
2879
struct is @samp{Adat}, an integer, starting at structure offset 0 and
2880
occupying 32 bits.
2881
 
2882
The second field in the class struct is not explicitly defined by the
2883
C++ class definition but is implied by the fact that the class
2884
contains a virtual method.  This field is the vtable pointer.  The
2885
name of the vtable pointer field starts with @samp{$vf} and continues with a
2886
type reference to the class it is part of.  In this example the type
2887
reference for class A is 20 so the name of its vtable pointer field is
2888
@samp{$vf20}, followed by the usual colon.
2889
 
2890
Next there is a type definition for the vtable pointer type (21).
2891
This is in turn defined as a pointer to another new type (22).
2892
 
2893
Type 22 is the vtable itself, which is defined as an array, indexed by
2894
a range of integers between 0 and 1, and whose elements are of type
2895
17.  Type 17 was the vtable record type defined by the boilerplate C++
2896
type definitions, as shown earlier.
2897
 
2898
The bit offset of the vtable pointer field is 32.  The number of bits
2899
in the field are not specified when the field is a vtable pointer.
2900
 
2901
Next is the method definition for the virtual member function @code{A_virt}.
2902
Its description starts out using the same format as the non-virtual
2903
member functions described above, except instead of a dot after the
2904
@samp{A} there is an asterisk, indicating that the function is virtual.
2905
Since is is virtual some addition information is appended to the end
2906
of the method description.
2907
 
2908
The first number represents the vtable index of the method.  This is a
2909
32 bit unsigned number with the high bit set, followed by a
2910
semi-colon.
2911
 
2912
The second number is a type reference to the first base class in the
2913
inheritance hierarchy defining the virtual member function.  In this
2914
case the class stab describes a base class so the virtual function is
2915
not overriding any other definition of the method.  Therefore the
2916
reference is to the type number of the class that the stab is
2917
describing (20).
2918
 
2919
This is followed by three semi-colons.  One marks the end of the
2920
current sub-section, one marks the end of the method field, and the
2921
third marks the end of the struct definition.
2922
 
2923
For classes containing virtual functions the very last section of the
2924
string part of the stab holds a type reference to the first base
2925
class.  This is preceded by @samp{~%} and followed by a final semi-colon.
2926
 
2927
@display
2928
.stabs "class_name(A):type_def(20)=sym_desc(struct)struct_bytes(8)
2929
        field_name(Adat):type_ref(int),bit_offset(0),field_bits(32);
2930
        field_name(A virt func ptr):type_def(21)=type_desc(ptr to)type_def(22)=
2931
        sym_desc(array)index_type_ref(range of int from 0 to 1);
2932
        elem_type_ref(vtbl elem type),
2933
        bit_offset(32);
2934
        meth_name(A_virt)::typedef(23)=sym_desc(method)returning(int);
2935
        :arg_type(int),protection(public)normal(yes)virtual(yes)
2936
        vtable_index(1);class_first_defining(A);;;~%first_base(A);",
2937
        N_LSYM,NIL,NIL,NIL
2938
@end display
2939
 
2940
@c FIXME: bogus line break.
2941
@example
2942
.stabs "A:t20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
2943
        A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
2944
@end example
2945
 
2946
@node Inheritance
2947
@section Inheritance
2948
 
2949
Stabs describing C++ derived classes include additional sections that
2950
describe the inheritance hierarchy of the class.  A derived class stab
2951
also encodes the number of base classes.  For each base class it tells
2952
if the base class is virtual or not, and if the inheritance is private
2953
or public.  It also gives the offset into the object of the portion of
2954
the object corresponding to each base class.
2955
 
2956
This additional information is embedded in the class stab following the
2957
number of bytes in the struct.  First the number of base classes
2958
appears bracketed by an exclamation point and a comma.
2959
 
2960
Then for each base type there repeats a series: a virtual character, a
2961
visibility character, a number, a comma, another number, and a
2962
semi-colon.
2963
 
2964
The virtual character is @samp{1} if the base class is virtual and
2965
@samp{0} if not.  The visibility character is @samp{2} if the derivation
2966
is public, @samp{1} if it is protected, and @samp{0} if it is private.
2967
Debuggers should ignore virtual or visibility characters they do not
2968
recognize, and assume a reasonable default (such as public and
2969
non-virtual) (GDB 4.11 does not, but this should be fixed in the next
2970
GDB release).
2971
 
2972
The number following the virtual and visibility characters is the offset
2973
from the start of the object to the part of the object pertaining to the
2974
base class.
2975
 
2976
After the comma, the second number is a type_descriptor for the base
2977
type.  Finally a semi-colon ends the series, which repeats for each
2978
base class.
2979
 
2980
The source below defines three base classes @code{A}, @code{B}, and
2981
@code{C} and the derived class @code{D}.
2982
 
2983
 
2984
@example
2985
class A @{
2986
public:
2987
        int Adat;
2988
        virtual int A_virt (int arg) @{ return arg; @};
2989
@};
2990
 
2991
class B @{
2992
public:
2993
        int B_dat;
2994
        virtual int B_virt (int arg) @{return arg; @};
2995
@};
2996
 
2997
class C @{
2998
public:
2999
        int Cdat;
3000
        virtual int C_virt (int arg) @{return arg; @};
3001
@};
3002
 
3003
class D : A, virtual B, public C @{
3004
public:
3005
        int Ddat;
3006
        virtual int A_virt (int arg ) @{ return arg+1; @};
3007
        virtual int B_virt (int arg)  @{ return arg+2; @};
3008
        virtual int C_virt (int arg)  @{ return arg+3; @};
3009
        virtual int D_virt (int arg)  @{ return arg; @};
3010
@};
3011
@end example
3012
 
3013
Class stabs similar to the ones described earlier are generated for
3014
each base class.
3015
 
3016
@c FIXME!!! the linebreaks in the following example probably make the
3017
@c examples literally unusable, but I don't know any other way to get
3018
@c them on the page.
3019
@c One solution would be to put some of the type definitions into
3020
@c separate stabs, even if that's not exactly what the compiler actually
3021
@c emits.
3022
@smallexample
3023
.stabs "A:T20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
3024
        A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
3025
 
3026
.stabs "B:Tt25=s8Bdat:1,0,32;$vf25:21,32;B_virt::26=##1;
3027
        :i;2A*-2147483647;25;;;~%25;",128,0,0,0
3028
 
3029
.stabs "C:Tt28=s8Cdat:1,0,32;$vf28:21,32;C_virt::29=##1;
3030
        :i;2A*-2147483647;28;;;~%28;",128,0,0,0
3031
@end smallexample
3032
 
3033
In the stab describing derived class @code{D} below, the information about
3034
the derivation of this class is encoded as follows.
3035
 
3036
@display
3037
.stabs "derived_class_name:symbol_descriptors(struct tag&type)=
3038
        type_descriptor(struct)struct_bytes(32)!num_bases(3),
3039
        base_virtual(no)inheritance_public(no)base_offset(0),
3040
        base_class_type_ref(A);
3041
        base_virtual(yes)inheritance_public(no)base_offset(NIL),
3042
        base_class_type_ref(B);
3043
        base_virtual(no)inheritance_public(yes)base_offset(64),
3044
        base_class_type_ref(C); @dots{}
3045
@end display
3046
 
3047
@c FIXME! fake linebreaks.
3048
@smallexample
3049
.stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:
3050
        1,160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt:
3051
        :32:i;2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;
3052
        28;;D_virt::32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
3053
@end smallexample
3054
 
3055
@node Virtual Base Classes
3056
@section Virtual Base Classes
3057
 
3058
A derived class object consists of a concatenation in memory of the data
3059
areas defined by each base class, starting with the leftmost and ending
3060
with the rightmost in the list of base classes.  The exception to this
3061
rule is for virtual inheritance.  In the example above, class @code{D}
3062
inherits virtually from base class @code{B}.  This means that an
3063
instance of a @code{D} object will not contain its own @code{B} part but
3064
merely a pointer to a @code{B} part, known as a virtual base pointer.
3065
 
3066
In a derived class stab, the base offset part of the derivation
3067
information, described above, shows how the base class parts are
3068
ordered.  The base offset for a virtual base class is always given as 0.
3069
Notice that the base offset for @code{B} is given as 0 even though
3070
@code{B} is not the first base class.  The first base class @code{A}
3071
starts at offset 0.
3072
 
3073
The field information part of the stab for class @code{D} describes the field
3074
which is the pointer to the virtual base class @code{B}. The vbase pointer
3075
name is @samp{$vb} followed by a type reference to the virtual base class.
3076
Since the type id for @code{B} in this example is 25, the vbase pointer name
3077
is @samp{$vb25}.
3078
 
3079
@c FIXME!! fake linebreaks below
3080
@smallexample
3081
.stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:1,
3082
       160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt::32:i;
3083
       2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;28;;D_virt:
3084
       :32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
3085
@end smallexample
3086
 
3087
Following the name and a semicolon is a type reference describing the
3088
type of the virtual base class pointer, in this case 24.  Type 24 was
3089
defined earlier as the type of the @code{B} class @code{this} pointer.  The
3090
@code{this} pointer for a class is a pointer to the class type.
3091
 
3092
@example
3093
.stabs "this:P24=*25=xsB:",64,0,0,8
3094
@end example
3095
 
3096
Finally the field offset part of the vbase pointer field description
3097
shows that the vbase pointer is the first field in the @code{D} object,
3098
before any data fields defined by the class.  The layout of a @code{D}
3099
class object is a follows, @code{Adat} at 0, the vtable pointer for
3100
@code{A} at 32, @code{Cdat} at 64, the vtable pointer for C at 96, the
3101
virtual base pointer for @code{B} at 128, and @code{Ddat} at 160.
3102
 
3103
 
3104
@node Static Members
3105
@section Static Members
3106
 
3107
The data area for a class is a concatenation of the space used by the
3108
data members of the class.  If the class has virtual methods, a vtable
3109
pointer follows the class data.  The field offset part of each field
3110
description in the class stab shows this ordering.
3111
 
3112
<< How is this reflected in stabs?  See Cygnus bug #677 for some info.  >>
3113
 
3114
@node Stab Types
3115
@appendix Table of Stab Types
3116
 
3117
The following are all the possible values for the stab type field, for
3118
a.out files, in numeric order.  This does not apply to XCOFF, but
3119
it does apply to stabs in sections (@pxref{Stab Sections}).  Stabs in
3120
ECOFF use these values but add 0x8f300 to distinguish them from non-stab
3121
symbols.
3122
 
3123
The symbolic names are defined in the file @file{include/aout/stabs.def}.
3124
 
3125
@menu
3126
* Non-Stab Symbol Types::       Types from 0 to 0x1f
3127
* Stab Symbol Types::           Types from 0x20 to 0xff
3128
@end menu
3129
 
3130
@node Non-Stab Symbol Types
3131
@appendixsec Non-Stab Symbol Types
3132
 
3133
The following types are used by the linker and assembler, not by stab
3134
directives.  Since this document does not attempt to describe aspects of
3135
object file format other than the debugging format, no details are
3136
given.
3137
 
3138
@c Try to get most of these to fit on a single line.
3139
@iftex
3140
@tableindent=1.5in
3141
@end iftex
3142
 
3143
@table @code
3144
@item 0x0     N_UNDF
3145
Undefined symbol
3146
 
3147
@item 0x2     N_ABS
3148
File scope absolute symbol
3149
 
3150
@item 0x3     N_ABS | N_EXT
3151
External absolute symbol
3152
 
3153
@item 0x4     N_TEXT
3154
File scope text symbol
3155
 
3156
@item 0x5     N_TEXT | N_EXT
3157
External text symbol
3158
 
3159
@item 0x6     N_DATA
3160
File scope data symbol
3161
 
3162
@item 0x7     N_DATA | N_EXT
3163
External data symbol
3164
 
3165
@item 0x8     N_BSS
3166
File scope BSS symbol
3167
 
3168
@item 0x9     N_BSS | N_EXT
3169
External BSS symbol
3170
 
3171
@item 0x0c    N_FN_SEQ
3172
Same as @code{N_FN}, for Sequent compilers
3173
 
3174
@item 0x0a    N_INDR
3175
Symbol is indirected to another symbol
3176
 
3177
@item 0x12    N_COMM
3178
Common---visible after shared library dynamic link
3179
 
3180
@item 0x14 N_SETA
3181
@itemx 0x15 N_SETA | N_EXT
3182
Absolute set element
3183
 
3184
@item 0x16 N_SETT
3185
@itemx 0x17 N_SETT | N_EXT
3186
Text segment set element
3187
 
3188
@item 0x18 N_SETD
3189
@itemx 0x19 N_SETD | N_EXT
3190
Data segment set element
3191
 
3192
@item 0x1a N_SETB
3193
@itemx 0x1b N_SETB | N_EXT
3194
BSS segment set element
3195
 
3196
@item 0x1c N_SETV
3197
@itemx 0x1d N_SETV | N_EXT
3198
Pointer to set vector
3199
 
3200
@item 0x1e N_WARNING
3201
Print a warning message during linking
3202
 
3203
@item 0x1f    N_FN
3204
File name of a @file{.o} file
3205
@end table
3206
 
3207
@node Stab Symbol Types
3208
@appendixsec Stab Symbol Types
3209
 
3210
The following symbol types indicate that this is a stab.  This is the
3211
full list of stab numbers, including stab types that are used in
3212
languages other than C.
3213
 
3214
@table @code
3215
@item 0x20     N_GSYM
3216
Global symbol; see @ref{Global Variables}.
3217
 
3218
@item 0x22     N_FNAME
3219
Function name (for BSD Fortran); see @ref{Procedures}.
3220
 
3221
@item 0x24     N_FUN
3222
Function name (@pxref{Procedures}) or text segment variable
3223
(@pxref{Statics}).
3224
 
3225
@item 0x26 N_STSYM
3226
Data segment file-scope variable; see @ref{Statics}.
3227
 
3228
@item 0x28 N_LCSYM
3229
BSS segment file-scope variable; see @ref{Statics}.
3230
 
3231
@item 0x2a N_MAIN
3232
Name of main routine; see @ref{Main Program}.
3233
 
3234
@item 0x2c N_ROSYM
3235
Variable in @code{.rodata} section; see @ref{Statics}.
3236
 
3237
@item 0x30     N_PC
3238
Global symbol (for Pascal); see @ref{N_PC}.
3239
 
3240
@item 0x32     N_NSYMS
3241
Number of symbols (according to Ultrix V4.0); see @ref{N_NSYMS}.
3242
 
3243
@item 0x34     N_NOMAP
3244
No DST map; see @ref{N_NOMAP}.
3245
 
3246
@c FIXME: describe this solaris feature in the body of the text (see
3247
@c comments in include/aout/stab.def).
3248
@item 0x38 N_OBJ
3249
Object file (Solaris2).
3250
 
3251
@c See include/aout/stab.def for (a little) more info.
3252
@item 0x3c N_OPT
3253
Debugger options (Solaris2).
3254
 
3255
@item 0x40     N_RSYM
3256
Register variable; see @ref{Register Variables}.
3257
 
3258
@item 0x42     N_M2C
3259
Modula-2 compilation unit; see @ref{N_M2C}.
3260
 
3261
@item 0x44     N_SLINE
3262
Line number in text segment; see @ref{Line Numbers}.
3263
 
3264
@item 0x46     N_DSLINE
3265
Line number in data segment; see @ref{Line Numbers}.
3266
 
3267
@item 0x48     N_BSLINE
3268
Line number in bss segment; see @ref{Line Numbers}.
3269
 
3270
@item 0x48     N_BROWS
3271
Sun source code browser, path to @file{.cb} file; see @ref{N_BROWS}.
3272
 
3273
@item 0x4a     N_DEFD
3274
GNU Modula2 definition module dependency; see @ref{N_DEFD}.
3275
 
3276
@item 0x4c N_FLINE
3277
Function start/body/end line numbers (Solaris2).
3278
 
3279
@item 0x50     N_EHDECL
3280
GNU C++ exception variable; see @ref{N_EHDECL}.
3281
 
3282
@item 0x50     N_MOD2
3283
Modula2 info "for imc" (according to Ultrix V4.0); see @ref{N_MOD2}.
3284
 
3285
@item 0x54     N_CATCH
3286
GNU C++ @code{catch} clause; see @ref{N_CATCH}.
3287
 
3288
@item 0x60     N_SSYM
3289
Structure of union element; see @ref{N_SSYM}.
3290
 
3291
@item 0x62 N_ENDM
3292
Last stab for module (Solaris2).
3293
 
3294
@item 0x64     N_SO
3295
Path and name of source file; see @ref{Source Files}.
3296
 
3297
@item 0x80 N_LSYM
3298
Stack variable (@pxref{Stack Variables}) or type (@pxref{Typedefs}).
3299
 
3300
@item 0x82     N_BINCL
3301
Beginning of an include file (Sun only); see @ref{Include Files}.
3302
 
3303
@item 0x84     N_SOL
3304
Name of include file; see @ref{Include Files}.
3305
 
3306
@item 0xa0     N_PSYM
3307
Parameter variable; see @ref{Parameters}.
3308
 
3309
@item 0xa2     N_EINCL
3310
End of an include file; see @ref{Include Files}.
3311
 
3312
@item 0xa4     N_ENTRY
3313
Alternate entry point; see @ref{Alternate Entry Points}.
3314
 
3315
@item 0xc0     N_LBRAC
3316
Beginning of a lexical block; see @ref{Block Structure}.
3317
 
3318
@item 0xc2     N_EXCL
3319
Place holder for a deleted include file; see @ref{Include Files}.
3320
 
3321
@item 0xc4     N_SCOPE
3322
Modula2 scope information (Sun linker); see @ref{N_SCOPE}.
3323
 
3324
@item 0xe0     N_RBRAC
3325
End of a lexical block; see @ref{Block Structure}.
3326
 
3327
@item 0xe2     N_BCOMM
3328
Begin named common block; see @ref{Common Blocks}.
3329
 
3330
@item 0xe4     N_ECOMM
3331
End named common block; see @ref{Common Blocks}.
3332
 
3333
@item 0xe8     N_ECOML
3334
Member of a common block; see @ref{Common Blocks}.
3335
 
3336
@c FIXME: How does this really work?  Move it to main body of document.
3337
@item 0xea N_WITH
3338
Pascal @code{with} statement: type,,0,0,offset (Solaris2).
3339
 
3340
@item 0xf0     N_NBTEXT
3341
Gould non-base registers; see @ref{Gould}.
3342
 
3343
@item 0xf2     N_NBDATA
3344
Gould non-base registers; see @ref{Gould}.
3345
 
3346
@item 0xf4     N_NBBSS
3347
Gould non-base registers; see @ref{Gould}.
3348
 
3349
@item 0xf6     N_NBSTS
3350
Gould non-base registers; see @ref{Gould}.
3351
 
3352
@item 0xf8     N_NBLCS
3353
Gould non-base registers; see @ref{Gould}.
3354
@end table
3355
 
3356
@c Restore the default table indent
3357
@iftex
3358
@tableindent=.8in
3359
@end iftex
3360
 
3361
@node Symbol Descriptors
3362
@appendix Table of Symbol Descriptors
3363
 
3364
The symbol descriptor is the character which follows the colon in many
3365
stabs, and which tells what kind of stab it is.  @xref{String Field},
3366
for more information about their use.
3367
 
3368
@c Please keep this alphabetical
3369
@table @code
3370
@c In TeX, this looks great, digit is in italics.  But makeinfo insists
3371
@c on putting it in `', not realizing that @var should override @code.
3372
@c I don't know of any way to make makeinfo do the right thing.  Seems
3373
@c like a makeinfo bug to me.
3374
@item @var{digit}
3375
@itemx (
3376
@itemx -
3377
Variable on the stack; see @ref{Stack Variables}.
3378
 
3379
@item :
3380
C++ nested symbol; see @xref{Nested Symbols}.
3381
 
3382
@item a
3383
Parameter passed by reference in register; see @ref{Reference Parameters}.
3384
 
3385
@item b
3386
Based variable; see @ref{Based Variables}.
3387
 
3388
@item c
3389
Constant; see @ref{Constants}.
3390
 
3391
@item C
3392
Conformant array bound (Pascal, maybe other languages); @ref{Conformant
3393
Arrays}.  Name of a caught exception (GNU C++).  These can be
3394
distinguished because the latter uses @code{N_CATCH} and the former uses
3395
another symbol type.
3396
 
3397
@item d
3398
Floating point register variable; see @ref{Register Variables}.
3399
 
3400
@item D
3401
Parameter in floating point register; see @ref{Register Parameters}.
3402
 
3403
@item f
3404
File scope function; see @ref{Procedures}.
3405
 
3406
@item F
3407
Global function; see @ref{Procedures}.
3408
 
3409
@item G
3410
Global variable; see @ref{Global Variables}.
3411
 
3412
@item i
3413
@xref{Register Parameters}.
3414
 
3415
@item I
3416
Internal (nested) procedure; see @ref{Nested Procedures}.
3417
 
3418
@item J
3419
Internal (nested) function; see @ref{Nested Procedures}.
3420
 
3421
@item L
3422
Label name (documented by AIX, no further information known).
3423
 
3424
@item m
3425
Module; see @ref{Procedures}.
3426
 
3427
@item p
3428
Argument list parameter; see @ref{Parameters}.
3429
 
3430
@item pP
3431
@xref{Parameters}.
3432
 
3433
@item pF
3434
Fortran Function parameter; see @ref{Parameters}.
3435
 
3436
@item P
3437
Unfortunately, three separate meanings have been independently invented
3438
for this symbol descriptor.  At least the GNU and Sun uses can be
3439
distinguished by the symbol type.  Global Procedure (AIX) (symbol type
3440
used unknown); see @ref{Procedures}.  Register parameter (GNU) (symbol
3441
type @code{N_PSYM}); see @ref{Parameters}.  Prototype of function
3442
referenced by this file (Sun @code{acc}) (symbol type @code{N_FUN}).
3443
 
3444
@item Q
3445
Static Procedure; see @ref{Procedures}.
3446
 
3447
@item R
3448
Register parameter; see @ref{Register Parameters}.
3449
 
3450
@item r
3451
Register variable; see @ref{Register Variables}.
3452
 
3453
@item S
3454
File scope variable; see @ref{Statics}.
3455
 
3456
@item s
3457
Local variable (OS9000).
3458
 
3459
@item t
3460
Type name; see @ref{Typedefs}.
3461
 
3462
@item T
3463
Enumeration, structure, or union tag; see @ref{Typedefs}.
3464
 
3465
@item v
3466
Parameter passed by reference; see @ref{Reference Parameters}.
3467
 
3468
@item V
3469
Procedure scope static variable; see @ref{Statics}.
3470
 
3471
@item x
3472
Conformant array; see @ref{Conformant Arrays}.
3473
 
3474
@item X
3475
Function return variable; see @ref{Parameters}.
3476
@end table
3477
 
3478
@node Type Descriptors
3479
@appendix Table of Type Descriptors
3480
 
3481
The type descriptor is the character which follows the type number and
3482
an equals sign.  It specifies what kind of type is being defined.
3483
@xref{String Field}, for more information about their use.
3484
 
3485
@table @code
3486
@item @var{digit}
3487
@itemx (
3488
Type reference; see @ref{String Field}.
3489
 
3490
@item -
3491
Reference to builtin type; see @ref{Negative Type Numbers}.
3492
 
3493
@item #
3494
Method (C++); see @ref{Method Type Descriptor}.
3495
 
3496
@item *
3497
Pointer; see @ref{Miscellaneous Types}.
3498
 
3499
@item &
3500
Reference (C++).
3501
 
3502
@item @@
3503
Type Attributes (AIX); see @ref{String Field}.  Member (class and variable)
3504
type (GNU C++); see @ref{Member Type Descriptor}.
3505
 
3506
@item a
3507
Array; see @ref{Arrays}.
3508
 
3509
@item A
3510
Open array; see @ref{Arrays}.
3511
 
3512
@item b
3513
Pascal space type (AIX); see @ref{Miscellaneous Types}.  Builtin integer
3514
type (Sun); see @ref{Builtin Type Descriptors}.  Const and volatile
3515
qualified type (OS9000).
3516
 
3517
@item B
3518
Volatile-qualified type; see @ref{Miscellaneous Types}.
3519
 
3520
@item c
3521
Complex builtin type (AIX); see @ref{Builtin Type Descriptors}.
3522
Const-qualified type (OS9000).
3523
 
3524
@item C
3525
COBOL Picture type.  See AIX documentation for details.
3526
 
3527
@item d
3528
File type; see @ref{Miscellaneous Types}.
3529
 
3530
@item D
3531
N-dimensional dynamic array; see @ref{Arrays}.
3532
 
3533
@item e
3534
Enumeration type; see @ref{Enumerations}.
3535
 
3536
@item E
3537
N-dimensional subarray; see @ref{Arrays}.
3538
 
3539
@item f
3540
Function type; see @ref{Function Types}.
3541
 
3542
@item F
3543
Pascal function parameter; see @ref{Function Types}
3544
 
3545
@item g
3546
Builtin floating point type; see @ref{Builtin Type Descriptors}.
3547
 
3548
@item G
3549
COBOL Group.  See AIX documentation for details.
3550
 
3551
@item i
3552
Imported type (AIX); see @ref{Cross-References}.  Volatile-qualified
3553
type (OS9000).
3554
 
3555
@item k
3556
Const-qualified type; see @ref{Miscellaneous Types}.
3557
 
3558
@item K
3559
COBOL File Descriptor.  See AIX documentation for details.
3560
 
3561
@item M
3562
Multiple instance type; see @ref{Miscellaneous Types}.
3563
 
3564
@item n
3565
String type; see @ref{Strings}.
3566
 
3567
@item N
3568
Stringptr; see @ref{Strings}.
3569
 
3570
@item o
3571
Opaque type; see @ref{Typedefs}.
3572
 
3573
@item p
3574
Procedure; see @ref{Function Types}.
3575
 
3576
@item P
3577
Packed array; see @ref{Arrays}.
3578
 
3579
@item r
3580
Range type; see @ref{Subranges}.
3581
 
3582
@item R
3583
Builtin floating type; see @ref{Builtin Type Descriptors} (Sun).  Pascal
3584
subroutine parameter; see @ref{Function Types} (AIX).  Detecting this
3585
conflict is possible with careful parsing (hint: a Pascal subroutine
3586
parameter type will always contain a comma, and a builtin type
3587
descriptor never will).
3588
 
3589
@item s
3590
Structure type; see @ref{Structures}.
3591
 
3592
@item S
3593
Set type; see @ref{Miscellaneous Types}.
3594
 
3595
@item u
3596
Union; see @ref{Unions}.
3597
 
3598
@item v
3599
Variant record.  This is a Pascal and Modula-2 feature which is like a
3600
union within a struct in C.  See AIX documentation for details.
3601
 
3602
@item w
3603
Wide character; see @ref{Builtin Type Descriptors}.
3604
 
3605
@item x
3606
Cross-reference; see @ref{Cross-References}.
3607
 
3608
@item Y
3609
Used by IBM's xlC C++ compiler (for structures, I think).
3610
 
3611
@item z
3612
gstring; see @ref{Strings}.
3613
@end table
3614
 
3615
@node Expanded Reference
3616
@appendix Expanded Reference by Stab Type
3617
 
3618
@c FIXME: This appendix should go away; see N_PSYM or N_SO for an example.
3619
 
3620
For a full list of stab types, and cross-references to where they are
3621
described, see @ref{Stab Types}.  This appendix just covers certain
3622
stabs which are not yet described in the main body of this document;
3623
eventually the information will all be in one place.
3624
 
3625
Format of an entry:
3626
 
3627
The first line is the symbol type (see @file{include/aout/stab.def}).
3628
 
3629
The second line describes the language constructs the symbol type
3630
represents.
3631
 
3632
The third line is the stab format with the significant stab fields
3633
named and the rest NIL.
3634
 
3635
Subsequent lines expand upon the meaning and possible values for each
3636
significant stab field.
3637
 
3638
Finally, any further information.
3639
 
3640
@menu
3641
* N_PC::                        Pascal global symbol
3642
* N_NSYMS::                     Number of symbols
3643
* N_NOMAP::                     No DST map
3644
* N_M2C::                       Modula-2 compilation unit
3645
* N_BROWS::                     Path to .cb file for Sun source code browser
3646
* N_DEFD::                      GNU Modula2 definition module dependency
3647
* N_EHDECL::                    GNU C++ exception variable
3648
* N_MOD2::                      Modula2 information "for imc"
3649
* N_CATCH::                     GNU C++ "catch" clause
3650
* N_SSYM::                      Structure or union element
3651
* N_SCOPE::                     Modula2 scope information (Sun only)
3652
* Gould::                       non-base register symbols used on Gould systems
3653
* N_LENG::                      Length of preceding entry
3654
@end menu
3655
 
3656
@node N_PC
3657
@section N_PC
3658
 
3659
@deffn @code{.stabs} N_PC
3660
@findex N_PC
3661
Global symbol (for Pascal).
3662
 
3663
@example
3664
"name" -> "symbol_name"  <<?>>
3665
value  -> supposedly the line number (stab.def is skeptical)
3666
@end example
3667
 
3668
@display
3669
@file{stabdump.c} says:
3670
 
3671
global pascal symbol: name,,0,subtype,line
3672
<< subtype? >>
3673
@end display
3674
@end deffn
3675
 
3676
@node N_NSYMS
3677
@section N_NSYMS
3678
 
3679
@deffn @code{.stabn} N_NSYMS
3680
@findex N_NSYMS
3681
Number of symbols (according to Ultrix V4.0).
3682
 
3683
@display
3684
        0, files,,funcs,lines (stab.def)
3685
@end display
3686
@end deffn
3687
 
3688
@node N_NOMAP
3689
@section N_NOMAP
3690
 
3691
@deffn @code{.stabs} N_NOMAP
3692
@findex N_NOMAP
3693
No DST map for symbol (according to Ultrix V4.0).  I think this means a
3694
variable has been optimized out.
3695
 
3696
@display
3697
        name, ,0,type,ignored (stab.def)
3698
@end display
3699
@end deffn
3700
 
3701
@node N_M2C
3702
@section N_M2C
3703
 
3704
@deffn @code{.stabs} N_M2C
3705
@findex N_M2C
3706
Modula-2 compilation unit.
3707
 
3708
@example
3709
"string" -> "unit_name,unit_time_stamp[,code_time_stamp]"
3710
desc   -> unit_number
3711
value  -> 0 (main unit)
3712
          1 (any other unit)
3713
@end example
3714
 
3715
See @cite{Dbx and Dbxtool Interfaces}, 2nd edition, by Sun, 1988, for
3716
more information.
3717
 
3718
@end deffn
3719
 
3720
@node N_BROWS
3721
@section N_BROWS
3722
 
3723
@deffn @code{.stabs} N_BROWS
3724
@findex N_BROWS
3725
Sun source code browser, path to @file{.cb} file
3726
 
3727
<<?>>
3728
"path to associated @file{.cb} file"
3729
 
3730
Note: N_BROWS has the same value as N_BSLINE.
3731
@end deffn
3732
 
3733
@node N_DEFD
3734
@section N_DEFD
3735
 
3736
@deffn @code{.stabn} N_DEFD
3737
@findex N_DEFD
3738
GNU Modula2 definition module dependency.
3739
 
3740
GNU Modula-2 definition module dependency.  The value is the
3741
modification time of the definition file.  The other field is non-zero
3742
if it is imported with the GNU M2 keyword @code{%INITIALIZE}.  Perhaps
3743
@code{N_M2C} can be used if there are enough empty fields?
3744
@end deffn
3745
 
3746
@node N_EHDECL
3747
@section N_EHDECL
3748
 
3749
@deffn @code{.stabs} N_EHDECL
3750
@findex N_EHDECL
3751
GNU C++ exception variable <<?>>.
3752
 
3753
"@var{string} is variable name"
3754
 
3755
Note: conflicts with @code{N_MOD2}.
3756
@end deffn
3757
 
3758
@node N_MOD2
3759
@section N_MOD2
3760
 
3761
@deffn @code{.stab?} N_MOD2
3762
@findex N_MOD2
3763
Modula2 info "for imc" (according to Ultrix V4.0)
3764
 
3765
Note: conflicts with @code{N_EHDECL}  <<?>>
3766
@end deffn
3767
 
3768
@node N_CATCH
3769
@section N_CATCH
3770
 
3771
@deffn @code{.stabn} N_CATCH
3772
@findex N_CATCH
3773
GNU C++ @code{catch} clause
3774
 
3775
GNU C++ @code{catch} clause.  The value is its address.  The desc field
3776
is nonzero if this entry is immediately followed by a @code{CAUGHT} stab
3777
saying what exception was caught.  Multiple @code{CAUGHT} stabs means
3778
that multiple exceptions can be caught here.  If desc is 0, it means all
3779
exceptions are caught here.
3780
@end deffn
3781
 
3782
@node N_SSYM
3783
@section N_SSYM
3784
 
3785
@deffn @code{.stabn} N_SSYM
3786
@findex N_SSYM
3787
Structure or union element.
3788
 
3789
The value is the offset in the structure.
3790
 
3791
<<?looking at structs and unions in C I didn't see these>>
3792
@end deffn
3793
 
3794
@node N_SCOPE
3795
@section N_SCOPE
3796
 
3797
@deffn @code{.stab?} N_SCOPE
3798
@findex N_SCOPE
3799
Modula2 scope information (Sun linker)
3800
<<?>>
3801
@end deffn
3802
 
3803
@node Gould
3804
@section Non-base registers on Gould systems
3805
 
3806
@deffn @code{.stab?} N_NBTEXT
3807
@deffnx @code{.stab?} N_NBDATA
3808
@deffnx @code{.stab?} N_NBBSS
3809
@deffnx @code{.stab?} N_NBSTS
3810
@deffnx @code{.stab?} N_NBLCS
3811
@findex N_NBTEXT
3812
@findex N_NBDATA
3813
@findex N_NBBSS
3814
@findex N_NBSTS
3815
@findex N_NBLCS
3816
These are used on Gould systems for non-base registers syms.
3817
 
3818
However, the following values are not the values used by Gould; they are
3819
the values which GNU has been documenting for these values for a long
3820
time, without actually checking what Gould uses.  I include these values
3821
only because perhaps some someone actually did something with the GNU
3822
information (I hope not, why GNU knowingly assigned wrong values to
3823
these in the header file is a complete mystery to me).
3824
 
3825
@example
3826
240    0xf0     N_NBTEXT  ??
3827
242    0xf2     N_NBDATA  ??
3828
244    0xf4     N_NBBSS   ??
3829
246    0xf6     N_NBSTS   ??
3830
248    0xf8     N_NBLCS   ??
3831
@end example
3832
@end deffn
3833
 
3834
@node N_LENG
3835
@section N_LENG
3836
 
3837
@deffn @code{.stabn} N_LENG
3838
@findex N_LENG
3839
Second symbol entry containing a length-value for the preceding entry.
3840
The value is the length.
3841
@end deffn
3842
 
3843
@node Questions
3844
@appendix Questions and Anomalies
3845
 
3846
@itemize @bullet
3847
@item
3848
@c I think this is changed in GCC 2.4.5 to put the line number there.
3849
For GNU C stabs defining local and global variables (@code{N_LSYM} and
3850
@code{N_GSYM}), the desc field is supposed to contain the source
3851
line number on which the variable is defined.  In reality the desc
3852
field is always 0.  (This behavior is defined in @file{dbxout.c} and
3853
putting a line number in desc is controlled by @samp{#ifdef
3854
WINNING_GDB}, which defaults to false). GDB supposedly uses this
3855
information if you say @samp{list @var{var}}.  In reality, @var{var} can
3856
be a variable defined in the program and GDB says @samp{function
3857
@var{var} not defined}.
3858
 
3859
@item
3860
In GNU C stabs, there seems to be no way to differentiate tag types:
3861
structures, unions, and enums (symbol descriptor @samp{T}) and typedefs
3862
(symbol descriptor @samp{t}) defined at file scope from types defined locally
3863
to a procedure or other more local scope.  They all use the @code{N_LSYM}
3864
stab type.  Types defined at procedure scope are emitted after the
3865
@code{N_RBRAC} of the preceding function and before the code of the
3866
procedure in which they are defined.  This is exactly the same as
3867
types defined in the source file between the two procedure bodies.
3868
GDB over-compensates by placing all types in block #1, the block for
3869
symbols of file scope.  This is true for default, @samp{-ansi} and
3870
@samp{-traditional} compiler options. (Bugs gcc/1063, gdb/1066.)
3871
 
3872
@item
3873
What ends the procedure scope?  Is it the proc block's @code{N_RBRAC} or the
3874
next @code{N_FUN}?  (I believe its the first.)
3875
@end itemize
3876
 
3877
@node Stab Sections
3878
@appendix Using Stabs in Their Own Sections
3879
 
3880
Many object file formats allow tools to create object files with custom
3881
sections containing any arbitrary data.  For any such object file
3882
format, stabs can be embedded in special sections.  This is how stabs
3883
are used with ELF and SOM, and aside from ECOFF and XCOFF, is how stabs
3884
are used with COFF.
3885
 
3886
@menu
3887
* Stab Section Basics::    How to embed stabs in sections
3888
* ELF Linker Relocation::  Sun ELF hacks
3889
@end menu
3890
 
3891
@node Stab Section Basics
3892
@appendixsec How to Embed Stabs in Sections
3893
 
3894
The assembler creates two custom sections, a section named @code{.stab}
3895
which contains an array of fixed length structures, one struct per stab,
3896
and a section named @code{.stabstr} containing all the variable length
3897
strings that are referenced by stabs in the @code{.stab} section.  The
3898
byte order of the stabs binary data depends on the object file format.
3899
For ELF, it matches the byte order of the ELF file itself, as determined
3900
from the @code{EI_DATA} field in the @code{e_ident} member of the ELF
3901
header.  For SOM, it is always big-endian (is this true??? FIXME).  For
3902
COFF, it matches the byte order of the COFF headers.  The meaning of the
3903
fields is the same as for a.out (@pxref{Symbol Table Format}), except
3904
that the @code{n_strx} field is relative to the strings for the current
3905
compilation unit (which can be found using the synthetic N_UNDF stab
3906
described below), rather than the entire string table.
3907
 
3908
The first stab in the @code{.stab} section for each compilation unit is
3909
synthetic, generated entirely by the assembler, with no corresponding
3910
@code{.stab} directive as input to the assembler.  This stab contains
3911
the following fields:
3912
 
3913
@table @code
3914
@item n_strx
3915
Offset in the @code{.stabstr} section to the source filename.
3916
 
3917
@item n_type
3918
@code{N_UNDF}.
3919
 
3920
@item n_other
3921
Unused field, always zero.
3922
This may eventually be used to hold overflows from the count in
3923
the @code{n_desc} field.
3924
 
3925
@item n_desc
3926
Count of upcoming symbols, i.e., the number of remaining stabs for this
3927
source file.
3928
 
3929
@item n_value
3930
Size of the string table fragment associated with this source file, in
3931
bytes.
3932
@end table
3933
 
3934
The @code{.stabstr} section always starts with a null byte (so that string
3935
offsets of zero reference a null string), followed by random length strings,
3936
each of which is null byte terminated.
3937
 
3938
The ELF section header for the @code{.stab} section has its
3939
@code{sh_link} member set to the section number of the @code{.stabstr}
3940
section, and the @code{.stabstr} section has its ELF section
3941
header @code{sh_type} member set to @code{SHT_STRTAB} to mark it as a
3942
string table.  SOM and COFF have no way of linking the sections together
3943
or marking them as string tables.
3944
 
3945
For COFF, the @code{.stab} and @code{.stabstr} sections may be simply
3946
concatenated by the linker.  GDB then uses the @code{n_desc} fields to
3947
figure out the extent of the original sections.  Similarly, the
3948
@code{n_value} fields of the header symbols are added together in order
3949
to get the actual position of the strings in a desired @code{.stabstr}
3950
section.  Although this design obviates any need for the linker to
3951
relocate or otherwise manipulate @code{.stab} and @code{.stabstr}
3952
sections, it also requires some care to ensure that the offsets are
3953
calculated correctly.  For instance, if the linker were to pad in
3954
between the @code{.stabstr} sections before concatenating, then the
3955
offsets to strings in the middle of the executable's @code{.stabstr}
3956
section would be wrong.
3957
 
3958
The GNU linker is able to optimize stabs information by merging
3959
duplicate strings and removing duplicate header file information
3960
(@pxref{Include Files}).  When some versions of the GNU linker optimize
3961
stabs in sections, they remove the leading @code{N_UNDF} symbol and
3962
arranges for all the @code{n_strx} fields to be relative to the start of
3963
the @code{.stabstr} section.
3964
 
3965
@node ELF Linker Relocation
3966
@appendixsec Having the Linker Relocate Stabs in ELF
3967
 
3968
This section describes some Sun hacks for Stabs in ELF; it does not
3969
apply to COFF or SOM.
3970
 
3971
To keep linking fast, you don't want the linker to have to relocate very
3972
many stabs.  Making sure this is done for @code{N_SLINE},
3973
@code{N_RBRAC}, and @code{N_LBRAC} stabs is the most important thing
3974
(see the descriptions of those stabs for more information).  But Sun's
3975
stabs in ELF has taken this further, to make all addresses in the
3976
@code{n_value} field (functions and static variables) relative to the
3977
source file.  For the @code{N_SO} symbol itself, Sun simply omits the
3978
address.  To find the address of each section corresponding to a given
3979
source file, the compiler puts out symbols giving the address of each
3980
section for a given source file.  Since these are ELF (not stab)
3981
symbols, the linker relocates them correctly without having to touch the
3982
stabs section.  They are named @code{Bbss.bss} for the bss section,
3983
@code{Ddata.data} for the data section, and @code{Drodata.rodata} for
3984
the rodata section.  For the text section, there is no such symbol (but
3985
there should be, see below).  For an example of how these symbols work,
3986
@xref{Stab Section Transformations}.  GCC does not provide these symbols;
3987
it instead relies on the stabs getting relocated.  Thus addresses which
3988
would normally be relative to @code{Bbss.bss}, etc., are already
3989
relocated.  The Sun linker provided with Solaris 2.2 and earlier
3990
relocates stabs using normal ELF relocation information, as it would do
3991
for any section.  Sun has been threatening to kludge their linker to not
3992
do this (to speed up linking), even though the correct way to avoid
3993
having the linker do these relocations is to have the compiler no longer
3994
output relocatable values.  Last I heard they had been talked out of the
3995
linker kludge.  See Sun point patch 101052-01 and Sun bug 1142109.  With
3996
the Sun compiler this affects @samp{S} symbol descriptor stabs
3997
(@pxref{Statics}) and functions (@pxref{Procedures}).  In the latter
3998
case, to adopt the clean solution (making the value of the stab relative
3999
to the start of the compilation unit), it would be necessary to invent a
4000
@code{Ttext.text} symbol, analogous to the @code{Bbss.bss}, etc.,
4001
symbols.  I recommend this rather than using a zero value and getting
4002
the address from the ELF symbols.
4003
 
4004
Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because
4005
the linker simply concatenates the @code{.stab} sections from each
4006
@file{.o} file without including any information about which part of a
4007
@code{.stab} section comes from which @file{.o} file.  The way GDB does
4008
this is to look for an ELF @code{STT_FILE} symbol which has the same
4009
name as the last component of the file name from the @code{N_SO} symbol
4010
in the stabs (for example, if the file name is @file{../../gdb/main.c},
4011
it looks for an ELF @code{STT_FILE} symbol named @code{main.c}).  This
4012
loses if different files have the same name (they could be in different
4013
directories, a library could have been copied from one system to
4014
another, etc.).  It would be much cleaner to have the @code{Bbss.bss}
4015
symbols in the stabs themselves.  Having the linker relocate them there
4016
is no more work than having the linker relocate ELF symbols, and it
4017
solves the problem of having to associate the ELF and stab symbols.
4018
However, no one has yet designed or implemented such a scheme.
4019
 
4020
@node Symbol Types Index
4021
@unnumbered Symbol Types Index
4022
 
4023
@printindex fn
4024
 
4025
@c TeX can handle the contents at the start but makeinfo 3.12 can not
4026
@ifinfo
4027
@contents
4028
@end ifinfo
4029
@ifhtml
4030
@contents
4031
@end ifhtml
4032
 
4033
@bye

powered by: WebSVN 2.1.0

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