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