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