Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dbx(5) — BSD/386 1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dbx(1)

stab(5)

a.out(5)



DBX(5)                                                     DBX(5)


NAME
       dbx - dbx symbol table information

WARNING
       The following document describes the debugging format used
       by the obsolete dbx(1) debugger, not the  extended  format
       used  by  the  current debugger gdb(1).  Until this manual
       page is updated, however, this is the  only  documentation
       on any version of this format in manual page form.

DESCRIPTION
       The  compiler symbol information generated for dbx(1) uses
       the same structure as described  in  stab(5),  with  addi-
       tional  type  and scope information appended to a symbol's
       name.  The assembler directive  used  to  describe  symbol
       information has the following format:

               stabs ``string'',kind,0,size,value

       String  contains the name, source language type, and scope
       of the symbol, kind  specifies  the  memory  class  (e.g.,
       external,  static,  parameter,  local, register), and size
       specifies the byte size of the object, if  relevant.   The
       third field (0 above) is unused.  For a global variable or
       a type, value is unused; for a local variable  or  parame-
       ter, it is the offset from the frame pointer, for a regis-
       ter variable, it is the associated register number.

       The different kinds of stab entries are interpreted by dbx
       as follows:

       N_GSYM    The  symbol  is  a  global variable (e.g., .comm
                 variable).  The variable's address can be  found
                 from  the corresponding ld(1) symbol entry, thus
                 the value field for N_GSYM symbols  is  ignored.
                 For  example,  a global variable ``x'' will have
                 both an N_GSYM entry and an ld(1)  entry  (e.g.,
                 N_BSS  + N_EXT).  See a.out(5) for details about
                 these other entries.  of

       N_FUN     The symbol is a procedure or function.  The size
                 field  contains  the  line  number  of the entry
                 point.  The value field contains the address  of
                 the entry point (in the text segment).

       N_STSYM   The  symbol  is  a statically allocated variable
                 for which an initial value has  been  specified.
                 The  value  field  contains  the  address of the
                 variable (in the data segment).

       N_LCSYM   The symbol is statically allocated, but not ini-
                 tialized.

       N_RSYM    The symbol is a register variable whose value is



                          April 30, 1991                        1




DBX(5)                                                     DBX(5)


                 kept in the register denoted by the value field.

       N_PSYM    The  symbol is a parameter whose value is pushed
                 on the stack before the call.  The  value  field
                 contains  the  offset  from  the  argument  base
                 pointer (on the VAX, the ap register).

       N_LSYM    The symbol is a local variable  whose  value  is
                 stored  in the most recently defined procedure's
                 stack frame.  The value is the (often  negative)
                 offset  from  the frame pointer (on the VAX, the
                 fp register).

       N_PC, N_MOD2
                 The symbol defines separate compilation informa-
                 tion  for pre-linking checking for Berkeley Pas-
                 cal and DEC Modula-2 programs respectively.  For
                 Pascal, the value field contains the line number
                 that the symbol is defined on.  The value  field
                 is not used for Modula-2.

       Most  of  the  source  level information about a symbol is
       stored in the string  field  of  the  stab  entry.   Since
       strings  are  kept in a separate string table in the a.out
       file, they can be arbitrarily long.   Thus  there  are  no
       restrictions  on  the kind or length of information in the
       string field, and it  was  not  necessary  to  modify  the
       assembler or loader when extending or modifying the format
       of this information.


       Below is a grammar describing the  syntax  of  the  symbol
       string.  Except in the case of a constant whose value is a
       string, there are no blanks in a symbol string.

       NAME:     [a-zA-Z_][a-zA-Z_0-9]*
       INTEGER:  [-][0-9][0-9]*
       REAL:     [+-][0-9]*(.[0-9][0-9]*|)([eE]([+-]|)[0-9][0-9]*|)
       STRING:   ``.*''
       BSTRING:  .*

       String:
           NAME `:' Class
           `:' Class

       Class:
           `c' `=' Constant `;'
           Variable
           Procedure
           Parameter
           NamedType
           `X' ExportInfo  -- export or import information (for N_MOD2 only)

       Constant:



                          April 30, 1991                        2




DBX(5)                                                     DBX(5)


           `i' INTEGER
           `r' REAL
           `c' OrdValue
           `b' OrdValue
           `s' STRING
           `e' TypeId `,' OrdValue
           `S' TypeId `,' NumElements `,' NumBits `,' BSTRING

       OrdValue:
           INTEGER

       NumElements:
           INTEGER

       NumBits:
           INTEGER

       Variable:
           TypeId          -- local variable of type TypeId
           `r' TypeId      -- register variable of type TypeId
           `S' TypeId      -- module variable of type TypeId (static global in C)
           `V' TypeId      -- own variable of type TypeId (static local in C)
           `G' TypeId      -- global variable of type TypeId

       Procedure:
           Proc            -- top level procedure
           Proc `,' NAME `,' NAME    -- local to first NAME,
                           -- second NAME is corresponding ld symbol

       Proc:
           `P'   -- global procedure
           `Q'   -- local procedure (static in C)
           `I'   -- internal procedure (different calling sequence)
           `F' TypeId      -- function returning type TypeId
           `f' TypeId      -- local function
           `J' TypeId      -- internal function

       Parameter:
           `p' TypeId      -- value parameter of type TypeId
           `v' TypeId      -- reference parameter of type TypeId

       NamedType:
           `t' TypeId      -- type name for type TypeId
           `T' TypeId      -- C structure tag name for struct TypeId

       TypeId:
           INTEGER                   -- Unique (per compilation) number of type
           INTEGER `=' TypeDef       -- Definition of type number
           INTEGER `=' TypeAttrs TypeDef

       --
       -- Type attributes are extra information associated with a type,
       -- such as alignment constraints or pointer checking semantics.
       -- Dbx interprets some of these, but will ignore rather than complain



                          April 30, 1991                        3




DBX(5)                                                     DBX(5)


       -- about any it does not recognize.  Therefore this is a way to add
       -- extra information for pre-linking checking.
       --
       TypeAttrs:
           `@' TypeAttrList `;'

       TypeAttrList:
           TypeAttrList `,' TypeAttr
           TypeAttr

       TypeAttr:
           `a' INTEGER     -- align boundary
           `s' INTEGER     -- size in bits
           `p' INTEGER     -- pointer class (e.g., checking)
           BSTRING                   -- something else

       TypeDef:
           INTEGER
           Subrange
           Array
           Record
           `e' EnumList `;'          -- enumeration
           `*' TypeId                -- pointer to TypeId
           `S' TypeId                -- set of TypeId
           `d' TypeId                -- file of TypeId
           ProcedureType
           `i' NAME `:' NAME `;'     -- imported type ModuleName:Name
           `o' NAME `;'              -- opaque type
           `i' NAME `:' NAME `,' TypeId `;'
           `o' NAME `,' TypeId `;'

       Subrange:
           `r' TypeId `;' INTEGER `;' INTEGER

       Array:
           `a' TypeId `;' TypeId     -- array [TypeId] of TypeId
           `A' TypeId                -- open array of TypeId
           `D' INTEGER `,' TypeId    -- N-dim. dynamic array
           `E' INTEGER `,' TypeId    -- N-dim. subarray

       ProcedureType:
           `f' TypeId `;'            -- C function type
           `f' TypeId `,' NumParams `;' TParamList `;'
           `p' NumParams `;' TParamList `;'

       NumParams:
           INTEGER

       Record:
           `s' ByteSize FieldList `;'          -- structure/record
           `u' ByteSize FieldList `;'          -- C union

       ByteSize:
           INTEGER



                          April 30, 1991                        4




DBX(5)                                                     DBX(5)


       FieldList :
           Field
           FieldList Field

       Field:
           NAME `:' TypeId `,' BitOffset `,' BitSize `;'

       BitSize:
           INTEGER

       BitOffset:
           INTEGER

       EnumList:
           Enum
           EnumList Enum

       Enum:
           NAME `:' OrdValue `,'

       ParamList:
           Param
           ParamList Param

       Param:
           NAME `:' TypeId `,' PassBy `;'

       PassBy:
           INTEGER

       TParam:
           TypeId `,' PassBy `;'

       TParamList :
           TParam
           TParamList TParam

       Export:
           INTEGER ExportInfo

       ExportInfo:
           `t' TypeId
           `f' TypeId `,' NumParams `;' ParamList `;'
           `p' NumParams `;' ParamList `;'
           `v' TypeId
           `c' `=' Constant


       A `?' indicates that the symbol information  is  continued
       in  the  next  stab  entry.  This directive can only occur
       where a `;' would  otherwise  separate  the  fields  of  a
       record  or constants in an enumeration.  It is useful when
       the number of elements in one of these lists is large.




                          April 30, 1991                        5




DBX(5)                                                     DBX(5)


SEE ALSO
       dbx(1), stab(5), a.out(5)























































                          April 30, 1991                        6


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026