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