*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> stab (4)              



NAME    [Toc]    [Back]

       stab - Symbol table types

SYNOPSIS    [Toc]    [Back]

       #include <stab.h>

DESCRIPTION    [Toc]    [Back]

       The  stab.h  header file defines some values of the n_type
       field of the symbol table of a.out files.  These  are  the
       types  for  permanent  symbols (that is, not local labels,
       etc.)  used by the old debugger sdb. Symbol table  entries
       can  be  produced  by the assembler directive. This allows
       one to specify a double-quote  delimited  name,  a  symbol
       type, one char and one short of information about the symbol,
 and an unsigned long (usually an address).  To  avoid
       having to produce an explicit label for the address field,
       the directive can be used to implicitly address  the  current
  location. If no name is needed, symbol table entries
       can be generated using the directive.  The loader promises
       to  preserve the order of symbol table entries produced by
       directives. An element of the symbol table consists of the
       following structure:

       /* SYMBOL INFORMATION ENTRY* This is used for defined symbols,
 imports and stabs.  The type (kind)* of the  associated
  symbols  load  command  determines  which.*/ typedef
       struct symbol_info_t {
         union {mo_offset_t symbol_name;
            mo_ptr_t symbol_nameP;
         } si_name;
         mo_short_t   si_package_index;
         mo_short_t   si_type;
         mo_short_t   si_flags;
         mo_byte_t        si_reserved byte;
         mo_byte_t        si_sc_type;
         union {mo_addr_t  def_val;  /* defined  section,  offset
         mo_long_t    imp_val; /* index in import list */
         mo_long_t    lit_val; /* literal value */
         mo_vm_addr_t abs_val;  /* absolute value */
          } si_value;
        } symbol_info_t;

       The  low  bits of the si_sc_type field are used to place a
       symbol into at most one segment, according to the  following
  masks.   A symbol can be in none of these segments by
       having none of these segment bits set.

       *     Simple      values      for      si_sc_type.      */
       #define   N_UNDF    0x0  /*          undefined          */
       #define   N_ABS     0x2  /*          absolute           */
       #define   N_TEXT    0x4  /*             text            */
       #define   N_DATA    0x6  /*            data             */
       #define   N_BSS     0x8  /*             bss             */
       #define   N_EXT     01     /* external bit, or'ed in */

       The n_value field of a symbol is relocated by the  linker,
       ld,  as  an  address  within the appropriate segment.  The
       n_value fields of symbols not in any segment are unchanged
       by  the  linker. In addition, the linker will discard certain
 symbols, according to rules of its  own,  unless  the
       si_sc_type field has one of the following bits set:

       #define  N_STAB 0xe0 /*  if  any  of these bits set, don't
       discard */

       This allows up to 112 (7 * 16) symbol types, split between
       the  various  segments.  Some  of  these have already been
       claimed. The old symbolic debugger, sdb, uses the  following
 n_type values:

       #define N_GSYM 0x20 /* global symbol: name,,0,type,0 */

       #define N_FNAME 0x22 /* procedurename(f77 kludge): name,,0

       #define  N_FUN   0x24   /*   procedure:   name,,0,linenumber,address

       #define     N_STSYM     0x26     /*     static     symbol:
       name,,0,type,address */

       #define     N_LCSYM     0x28     /*     .lcomm     symbol:
       name,,0,type,address */

       #define N_RSYM 0x40 /* register sym: name,,0,type,register

       #define N_SLINE 0x44 /* src line:  0,,0,linenumber,address

       #define      N_SSYM     0x60     /*     structure     elt:
       name,,0,type,struct_offset */

       #define N_SO 0x64 /* sourcefilename: name,,0,0,address */

       #define N_LSYM 0x80 /* local sym: name,,0,type,offset */

       #define N_SOL 0x84 /* #includedfilename: name,,0,0,address

       #define N_PSYM 0xa0 /* parameter: name,,0,type,offset */

       #define  N_ENTRY  0xa4  /* alternate entry: name,,linenumber,address

       #define  N_LBRAC  0xc0   /*   left   bracket:   0,,0,nestinglevel,address

       #define   N_RBRAC   0xe0   /*  right  bracket:  0,,0,nestinglevel,address

       #define N_BCOMM 0xe2 /* begincommon: name,, */

       #define N_ECOMM 0xe4 /* endcommon: name,, */

       #define N_ECOML 0xe8 /* endcommon(local  name):  ,,address

       #define  N_LENG  0xfe /* secondstabentrywithlengthinformation

       The  comments  give  sdb  conventional  use  for   n_name,
       n_other,  n_desc,  and n_value fields of the given n_type.
       The sdb debugger uses the n_desc  field  to  hold  a  type
       specifier in the form used by the Portable C Compiler, cc.

       The Berkeley  Pascal  compiler,  pc,  uses  the  following
       si_sc_type value:

       #define  N_PC  0x30  /* global pascal symbol: name,,0,subtype,line

       and uses the following subtypes to do type checking across
       separately  compiled files: Source filename Included filename
 Global label Global constant Global type Global variable
  Global  function  Global procedure External function
       External procedure Library variable "12" Library routine

SEE ALSO    [Toc]    [Back]

       Commands: as(1), ld(1)

[ Back ]
 Similar pages
Name OS Title
ldgetname Tru64 retrieve symbol name for object file symbol table entry
ldgetname IRIX retrieve symbol name for object file symbol table entry
syms IRIX MIPS symbol table
stprint IRIX routines to print the symbol table
elf_getarsym IRIX retrieve archive symbol table
nm OpenBSD display name list (symbol table)
ranlib HP-UX regenerate archive symbol table
ksyms OpenBSD kernel symbol table device
nlist OpenBSD retrieve symbol table name list from an executable file
st_lang_str Tru64 translate symbol table codes to printable strings
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service