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