* stabs.texinfo: Many minor cleanups.
authorJim Kingdon <jkingdon@engr.sgi.com>
Tue, 31 Aug 1993 04:33:50 +0000 (04:33 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Tue, 31 Aug 1993 04:33:50 +0000 (04:33 +0000)
gdb/doc/stabs.texinfo

index a91ab05bbb7d45f0223ef722f2c2c8aa04ad516a..cfd65b452c4517c1438485c34249e2fe41d36100 100644 (file)
@@ -115,7 +115,7 @@ you to them for more information.
 @menu
 * Flow::                       Overview of debugging information flow
 * Stabs format::               Overview of stab format
-* String field::               The @code{.stabs} @var{string} field
+* String field::               The string field
 * C example::                  A simple example in C source
 * Assembly code::              The simple example at the assembly level
 @end menu
@@ -163,9 +163,9 @@ directives such as @code{.file} and @code{.bi}) instead of
 The overall format of each class of stab is:
 
 @example
-.stabs "@var{string}",@var{type},0,@var{desc},@var{value}
-.stabn @var{type},0,@var{desc},@var{value}
-.stabd @var{type},0,@var{desc}
+.stabs "@var{string}",@var{type},@var{other},@var{desc},@var{value}
+.stabn @var{type},@var{other},@var{desc},@var{value}
+.stabd @var{type},@var{other},@var{desc}
 .stabx "@var{string}",@var{value},@var{type},@var{sdb-type}
 @end example
 
@@ -175,7 +175,8 @@ For @code{.stabn} and @code{.stabd}, there is no @var{string} (the
 @code{n_strx} field is zero; see @ref{Symbol tables}).  For
 @code{.stabd}, the @var{value} field is implicit and has the value of
 the current file location.  For @code{.stabx}, the @var{sdb-type} field
-is unused for stabs and can always be set to zero.
+is unused for stabs and can always be set to zero.  The @var{other}
+field is almost always unused and can be set to zero.
 
 The number in the @var{type} field gives some basic information about
 which type of stab this is (or whether it @emph{is} a stab, as opposed
@@ -186,15 +187,15 @@ possible values for, any remaining @var{string}, @var{desc}, or
 in numeric order of the valid @var{type} field values for stab directives.
 
 @node String field
-@section The @code{.stabs} @var{string} field
+@section The String Field
 
-For @code{.stabs} the @var{string} field holds the meat of the
-debugging information.  The generally unstructured nature of this field
-is what makes stabs extensible.  For some stab types the @var{string} field
+For most stabs the string field holds the meat of the
+debugging information.  The flexible nature of this field
+is what makes stabs extensible.  For some stab types the string field
 contains only a name.  For other stab types the contents can be a great
 deal more complex.
 
-The overall format is of the @var{string} field is:
+The overall format of the string field for most stab types is:
 
 @example
 "@var{name}:@var{symbol-descriptor} @var{type-information}"
@@ -261,16 +262,16 @@ elements are placed more closely in memory, to save memory at the
 expense of speed.
 @end table
 
-All of this can make the @var{string} field quite long.  All
+All of this can make the string field quite long.  All
 versions of GDB, and some versions of dbx, can handle arbitrarily long
 strings.  But many versions of dbx cretinously limit the strings to
 about 80 characters, so compilers which must work with such dbx's need
 to split the @code{.stabs} directive into several @code{.stabs}
 directives.  Each stab duplicates exactly all but the
-@var{string} field.  The @var{string} field of
+string field.  The string field of
 every stab except the last is marked as continued with a
 double-backslash at the end.  Removing the backslashes and concatenating
-the @var{string} fields of each stab produces the original,
+the string fields of each stab produces the original,
 long string.
 
 @node C example
@@ -376,7 +377,7 @@ blocks of code.
 @findex N_MAIN
 Most languages allow the main program to have any name.  The
 @code{N_MAIN} stab type tells the debugger the name that is used in this
-program.  Only the @var{string} field is significant; it is the name of
+program.  Only the string field is significant; it is the name of
 a function which is the main program.  Most C compilers do not use this
 stab (they expect the debugger to assume that the name is @code{main}),
 but some C compilers emit an @code{N_MAIN} stab for the @code{main}
@@ -388,11 +389,11 @@ function.
 @findex N_SO
 Before any other stabs occur, there must be a stab specifying the source
 file.  This information is contained in a symbol of stab type
-@code{N_SO}; the @var{string} field contains the name of the file.  The
-@var{value} of the symbol is the start address of the portion of the
+@code{N_SO}; the string field contains the name of the file.  The
+value of the symbol is the start address of the portion of the
 text section corresponding to that file.
 
-With the Sun Solaris2 compiler, the @var{desc} field contains a
+With the Sun Solaris2 compiler, the desc field contains a
 source-language code.
 @c Do the debuggers use it?  What are the codes? -djm
 
@@ -427,8 +428,8 @@ common with @code{N_BINCL}).
 
 @findex N_SOL
 An @code{N_SOL} symbol specifies which include file subsequent symbols
-refer to.  The @var{string} field is the name of the file and the
-@var{value} is the text address corresponding to the start of the
+refer to.  The string field is the name of the file and the
+value is the text address corresponding to the start of the
 previous include file and the start of this one.  To specify the main
 source file again, use an @code{N_SOL} symbol with the name of the main
 source file.
@@ -438,9 +439,9 @@ source file.
 @findex N_EXCL
 The @code{N_BINCL} approach works as follows.  An @code{N_BINCL} symbol
 specifies the start of an include file.  In an object file, only the
-@var{string} is significant; the Sun linker puts data into some of the
+string is significant; the Sun linker puts data into some of the
 other fields.  The end of the include file is marked by an
-@code{N_EINCL} symbol (which has no @var{string} field).  In an object
+@code{N_EINCL} symbol (which has no string field).  In an object
 file, there is no significant data in the @code{N_EINCL} symbol; the Sun
 linker puts data into some of the fields.  @code{N_BINCL} and
 @code{N_EINCL} can be nested.
@@ -459,8 +460,8 @@ For the start of an include file in XCOFF, use the @file{.bi} assembler
 directive, which generates a @code{C_BINCL} symbol.  A @file{.ei}
 directive, which generates a @code{C_EINCL} symbol, denotes the end of
 the include file.  Both directives are followed by the name of the
-source file in quotes, which becomes the @var{string} for the symbol.
-The @var{value} of each symbol, produced automatically by the assembler
+source file in quotes, which becomes the string for the symbol.
+The value of each symbol, produced automatically by the assembler
 and linker, is the offset into the executable of the beginning
 (inclusive, as you'd expect) or end (inclusive, as you would not expect)
 of the portion of the COFF line table that corresponds to this include
@@ -471,7 +472,7 @@ file.  @code{C_BINCL} and @code{C_EINCL} do not nest.
 
 @findex N_SLINE
 An @code{N_SLINE} symbol represents the start of a source line.  The
-@var{desc} field contains the line number and the @var{value} field
+desc field contains the line number and the value field
 contains the code address for the start of that source line.  On most
 machines the address is absolute; for Sun's stabs-in-ELF, it is relative
 to the function in which the @code{N_SLINE} symbol occurs.
@@ -483,8 +484,8 @@ numbers in the data or bss segments, respectively.  They are identical
 to @code{N_SLINE} but are relocated differently by the linker.  They
 were intended to be used to describe the source location of a variable
 declaration, but I believe that GCC2 actually puts the line number in
-the @var{desc} field of the stab for the variable itself.  GDB has been
-ignoring these symbols (unless they contain a @var{string} field) since
+the desc field of the stab for the variable itself.  GDB has been
+ignoring these symbols (unless they contain a string field) since
 at least GDB 3.5.
 
 For single source lines that generate discontiguous code, such as flow
@@ -514,7 +515,7 @@ one has complained).
 
 A function is represented by an @samp{F} symbol descriptor for a global
 (extern) function, and @samp{f} for a static (local) function.  The
-@var{value} field is the address of the start of the function (absolute
+value field is the address of the start of the function (absolute
 for @code{a.out}; relative to the start of the file for Sun's
 stabs-in-ELF).  The type information of the stab represents the return
 type of the function; thus @samp{foo:f5} means that foo is a function
@@ -631,7 +632,7 @@ brace) and the @code{N_RBRAC} (right brace) stab types.  The variables
 defined inside a block precede the @code{N_LBRAC} symbol for most
 compilers, including GCC.  Other compilers, such as the Convex, Acorn
 RISC machine, and Sun @code{acc} compilers, put the variables after the
-@code{N_LBRAC} symbol.  The @var{value} fields of the @code{N_LBRAC} and
+@code{N_LBRAC} symbol.  The values of the @code{N_LBRAC} and
 @code{N_RBRAC} symbols are the start and end addresses of the code of
 the block, respectively.  For most machines, they are relative to the
 starting address of this source file.  For the Gould NP1, they are
@@ -642,9 +643,9 @@ The @code{N_LBRAC} and @code{N_RBRAC} stabs that describe the block
 scope of a procedure are located after the @code{N_FUN} stab that
 represents the procedure itself.
 
-Sun documents the @var{desc} field of @code{N_LBRAC} and
+Sun documents the desc field of @code{N_LBRAC} and
 @code{N_RBRAC} symbols as containing the nesting level of the block.
-However, dbx seems to not care, and GCC always sets @var{desc} to
+However, dbx seems to not care, and GCC always sets desc to
 zero.
 
 @node Constants
@@ -748,7 +749,7 @@ preceding @samp{@var{type-number}=}.  This is a bad idea; there is no
 guarantee that type descriptors are distinct from symbol descriptors.
 Stabs for stack variables use the @code{N_LSYM} stab type.
 
-The @var{value} of the stab is the offset of the variable within the
+The value of the stab is the offset of the variable within the
 local variables.  On most machines this is an offset from the frame
 pointer and is negative.  The location of the stab specifies which block
 it is defined in; see @ref{Block structure}.
@@ -815,7 +816,7 @@ produce an external symbol.
 @c According to an old version of this manual, AIX uses C_RPSYM instead
 @c of C_RSYM.  I am skeptical; this should be verified.
 Register variables have their own stab type, @code{N_RSYM}, and their
-own symbol descriptor, @samp{r}.  The stab's @var{value} field contains the
+own symbol descriptor, @samp{r}.  The stab's value field contains the
 number of the register where the variable data will be stored.
 @c .stabs "name:type",N_RSYM,0,RegSize,RegNumber (Sun doc)
 
@@ -846,12 +847,12 @@ I believe Fortran is the only language with this feature.
 @findex N_ECOMM
 A @code{N_BCOMM} stab begins a common block and an @code{N_ECOMM} stab
 ends it.  The only field that is significant in these two stabs is the
-@var{string}, which names a normal (non-debugging) symbol that gives the
+string, which names a normal (non-debugging) symbol that gives the
 address of the common block.
 
 @findex N_ECOML
 Each stab between the @code{N_BCOMM} and the @code{N_ECOMM} specifies a
-member of that common block; its @var{value} is the offset within the
+member of that common block; its value is the offset within the
 common block of that variable.  The @code{N_ECOML} stab type is
 documented for this purpose, but Sun's Fortran compiler uses
 @code{N_GSYM} instead.  The test case I looked at had a common block
@@ -919,7 +920,7 @@ depends on how the parameter is being passed.
 
 @findex N_PSYM
 Parameters passed on the stack use the symbol descriptor @samp{p} and
-the @code{N_PSYM} symbol type.  The @var{value} of the symbol is an offset
+the @code{N_PSYM} symbol type.  The value of the symbol is an offset
 used to locate the parameter on the stack; its exact meaning is
 machine-dependent, but on most machines it is an offset from the frame
 pointer.
@@ -983,7 +984,7 @@ know that it is an argument.
 Because that approach is kind of ugly, some compilers use symbol
 descriptor @samp{P} or @samp{R} to indicate an argument which is in a
 register.  Symbol type @code{C_RPSYM} is used with @samp{R} and
-@code{N_RSYM} is used with @samp{P}.  The symbol @var{value} field is
+@code{N_RSYM} is used with @samp{P}.  The symbol's value field is
 the register number.  @samp{P} and @samp{R} mean the same thing; the
 difference is that @samp{P} is a GNU invention and @samp{R} is an IBM
 (XCOFF) invention.  As of version 4.9, GDB should handle either one.
@@ -1033,7 +1034,7 @@ latter case the type of the @samp{@var{arg}:p} symbol is @code{double}
 and the type of the @samp{@var{arg}:} symbol is @code{float}).  GCC, at
 least on the 960, uses a single @samp{p} symbol descriptor for an
 argument which is stored as a local variable but uses @code{N_LSYM}
-instead of @code{N_PSYM}.  In this case, the @var{value} of the symbol
+instead of @code{N_PSYM}.  In this case, the value of the symbol
 is an offset relative to the local variables for that function, not
 relative to the arguments; on some machines those are the same thing,
 but not on all.
@@ -1058,9 +1059,9 @@ Conformant arrays are a feature of Modula-2, and perhaps other
 languages, in which the size of an array parameter is not known to the
 called function until run-time.  Such parameters have two stabs: a
 @samp{x} for the array itself, and a @samp{C}, which represents the size
-of the array.  The @var{value} of the @samp{x} stab is the offset in the
+of the array.  The value of the @samp{x} stab is the offset in the
 argument list where the address of the array is stored (it this right?
-it is a guess); the @var{value} of the @samp{C} stab is the offset in the
+it is a guess); the value of the @samp{C} stab is the offset in the
 argument list where the size of the array (in elements? in bytes?) is
 stored.
 
@@ -1889,7 +1890,7 @@ transformations that the assembler and linker make on data from stabs.
 
 Each time the assembler encounters a stab directive, it puts
 each field of the stab into a corresponding field in a symbol table
-entry of its output file.  If the stab contains a @var{string} field, the
+entry of its output file.  If the stab contains a string field, the
 symbol table entry for that stab points to a string table entry
 containing the string data from the stab.  Assembler labels become
 relocatable addresses.  Symbol table entries in a.out have the format:
@@ -1905,10 +1906,11 @@ struct internal_nlist @{
 @};
 @end example
 
-For @code{.stabs} directives, the @code{n_strx} field holds the offset
-in bytes from the start of the string table to the string table entry
-containing the @var{string} field.  For other classes of stabs
-(@code{.stabn} and @code{.stabd}) this field is zero.
+If the stab has a string, the @code{n_strx} field holds the offset in
+bytes of the string within the string table.  The string is terminated
+by a NUL character.  If the stab lacks a string (for example, it was
+produced by a @code{.stabn} or @code{.stabd} directive), the
+@code{n_strx} field is zero.
 
 Symbol table entries with @code{n_type} field values greater than 0x1f
 originated as stabs generated by the compiler (with one random
@@ -1935,7 +1937,7 @@ value of the stab.  Thus for stab types like @code{N_RSYM} and
 low 5 bits are @code{N_ABS}, which tells the linker not to relocate the
 value.
 
-Where the @var{value} field of a stab contains an assembly language label,
+Where the value of a stab contains an assembly language label,
 it is transformed by each build step.  The assembler turns it into a
 relocatable address and the linker turns it into an absolute address.
 
@@ -1998,7 +2000,7 @@ The variable is represented by two symbol table entries in the object
 file (see below).  The first one originated as a stab.  The second one
 is an external symbol.  The upper case @samp{D} signifies that the
 @code{n_type} field of the symbol table contains 7, @code{N_DATA} with
-local linkage.  The @var{value} field is empty for the stab entry.  For
+local linkage.  The value field is empty for the stab entry.  For
 the linker symbol, it contains the relocatable address corresponding to
 the variable.
 
@@ -2660,8 +2662,10 @@ description in the class stab shows this ordering.
 @node Stab types
 @appendix Table of stab types
 
-The following are all the possible values for the stab @var{type} field, for
-@code{a.out} files, in numeric order.  This does not apply to XCOFF.
+The following are all the possible values for the stab type field, for
+@code{a.out} files, in numeric order.  This does not apply to XCOFF, but
+it does apply to stabs in ELF.  Stabs in ECOFF use these values but add
+0x8f300 to distinguish them from non-stab symbols.
 
 The symbolic names are defined in the file @file{include/aout/stabs.def}.
 
@@ -2901,9 +2905,9 @@ Gould non-base registers; see @ref{Gould}.
 @node Symbol descriptors
 @appendix Table of symbol descriptors
 
-These tell in the @code{.stabs} @var{string} field what kind of symbol
-the stab represents.  They follow the colon which follows the symbol
-name.  @xref{String field}, for more information about their use.
+The symbol descriptor is the character which follows the colon in many
+stabs, and which tells what kind of stab it is.  @xref{String field},
+for more information about their use.
 
 @c Please keep this alphabetical
 @table @code
@@ -3009,8 +3013,8 @@ Function return variable; see @ref{Parameters}.
 @node Type descriptors
 @appendix Table of type descriptors
 
-These tell in the @code{.stabs} @var{string} field what kind of type is being
-defined.  They follow the type number and an equals sign.
+The type descriptor is the character which follows the type number and
+an equals sign.  It specifies what kind of type is being defined.
 @xref{String field}, for more information about their use.
 
 @table @code
@@ -3249,7 +3253,7 @@ Sun source code browser, path to @file{.cb} file
 <<?>>
 "path to associated @file{.cb} file"
 
-Note: @var{type} field value overlaps with N_BSLINE.
+Note: N_BROWS has the same value as N_BSLINE.
 @end deffn
 
 @node N_DEFD
@@ -3259,10 +3263,10 @@ Note: @var{type} field value overlaps with N_BSLINE.
 @findex N_DEFD
 GNU Modula2 definition module dependency.
 
-GNU Modula-2 definition module dependency.  @var{value} is the modification
-time of the definition file.  @var{other} is non-zero if it is imported with
-the GNU M2 keyword @code{%INITIALIZE}.  Perhaps @code{N_M2C} can be used
-if there are enough empty fields?
+GNU Modula-2 definition module dependency.  The value is the
+modification time of the definition file.  The other field is non-zero
+if it is imported with the GNU M2 keyword @code{%INITIALIZE}.  Perhaps
+@code{N_M2C} can be used if there are enough empty fields?
 @end deffn
 
 @node N_EHDECL
@@ -3294,11 +3298,11 @@ Note: conflicts with @code{N_EHDECL}  <<?>>
 @findex N_CATCH
 GNU C++ @code{catch} clause
 
-GNU C++ @code{catch} clause.  @code{value} is its address.  @code{desc}
+GNU C++ @code{catch} clause.  The value is its address.  The desc field
 is nonzero if this entry is immediately followed by a @code{CAUGHT} stab
 saying what exception was caught.  Multiple @code{CAUGHT} stabs means
-that multiple exceptions can be caught here.  If @code{desc} is 0, it
-means all exceptions are caught here.
+that multiple exceptions can be caught here.  If desc is 0, it means all
+exceptions are caught here.
 @end deffn
 
 @node N_SSYM
@@ -3308,7 +3312,7 @@ means all exceptions are caught here.
 @findex N_SSYM
 Structure or union element.
 
-@code{value} is offset in the structure.
+The value is the offset in the structure.
 
 <<?looking at structs and unions in C I didn't see these>>
 @end deffn
@@ -3319,7 +3323,7 @@ Structure or union element.
 @deffn @code{.stabn} N_ENTRY
 @findex N_ENTRY
 Alternate entry point.
-@code{value} is its address.
+The value is its address.
 <<?>>
 @end deffn
 
@@ -3369,7 +3373,7 @@ these in the header file is a complete mystery to me).
 @deffn @code{.stabn} N_LENG
 @findex N_LENG
 Second symbol entry containing a length-value for the preceding entry.
-The @var{value} is the length.
+The value is the length.
 @end deffn
 
 @node Questions
@@ -3379,10 +3383,10 @@ The @var{value} is the length.
 @item
 @c I think this is changed in GCC 2.4.5 to put the line number there.
 For GNU C stabs defining local and global variables (@code{N_LSYM} and
-@code{N_GSYM}), the @var{desc} field is supposed to contain the source
-line number on which the variable is defined.  In reality the @var{desc}
+@code{N_GSYM}), the desc field is supposed to contain the source
+line number on which the variable is defined.  In reality the desc
 field is always 0.  (This behavior is defined in @file{dbxout.c} and
-putting a line number in @var{desc} is controlled by @samp{#ifdef
+putting a line number in desc is controlled by @samp{#ifdef
 WINNING_GDB}, which defaults to false). GDB supposedly uses this
 information if you say @samp{list @var{var}}.  In reality, @var{var} can
 be a variable defined in the program and GDB says @samp{function