Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

a.out(5)

linenum(5)

SYMS(5)                              BSD                               SYMS(5)



NAME
     syms - common object file symbol table format

SYNOPSIS
     #include  <syms.h>

DESCRIPTION
     Common object files contain information to support symbolic software
     testing.  Line number entries, linenum(4), and extensive symbolic
     information permit testing at the C source level.  Every object file's
     symbol table is organized as shown below.

          Filename 1.
               Function 1.
                    Local symbols for function 1.
               Function 2.
                    Local symbols for function 2.
               ...
               Static externs for file 1.

          Filename 2.
               Function 1.
                    Local symbols for function 1.
               Function 2.
                    Local symbols for function 2.
               ...
               Static externs for file 2.
          ...

          Defined global symbols.
          Undefined global symbols.

     The entry for a symbol is a fixed-length structure.  The members of the
     structure hold the name (null padded), its value, and other information.
     The C structure is given below.

     #define  SYMNMLEN  8
     #define  FILNMLEN  14
     #define  DIMNUM    4

     struct syment
     {
            union
            {
                  char _n_name[SYMNMLEN];    /* old COFF version */
                  struct
                  {
                          long _n_zeroes;    /* new == 0 */
                          long _n_offset;    /* offset into string table */
                  } _n_n;
                  char *_n_nptr[2];          /* allows for overlaying */
            } _n;
            long                  n_value;   /* value of symbol */
            short                 n_scnum;   /* section number */
            unsigned short        n_type;    /* type and derived type */
            char                  n_sclass;  /* storage class */
            char                  n_numaux;  /* number of aux. entries */
     };

     #define n_name       _n._n_name
     #define n_nptr       _n._n_nptr[1]
     #define n_zeroes     _n._n_n._n_zeroes
     #define n_offset     _n._n_n._n_offset

     Meaningful values and explanations for them are given in both syms.h and
     Common Object File Format.  Anyone who needs to interpret the entries
     should seek more information in these sources.  Some symbols require more
     information than a single entry; they are followed by "auxiliary entries"
     that are the same size as a symbol entry.  The format follows.

     union auxent
     {
            struct
            {
                   long x_tagndx;
                   union
                   {
                          struct
                          {
                                   unsigned short x_lnno;
                                   unsigned short x_size;
                          } x_lnsz;
                          long x_fsize;
                   } x_misc;
                   union
                   {
                          struct
                          {
                                   long x_lnnoptr;
                                   long x_endndx;
                          }        x_fcn;
                          struct
                          {
                                   unsigned short x_dimen[DIMNUM];
                          }        x_ary;
                   } x_fcnary;
                   unsigned short x_tvndx;
            }      x_sym;
            union
            {
                          char x_fname[FILNMLEN];
                          struct
                          {
                                   long _n_zeroes;
                                   long _n_offset;
                          } _n_n;

            }      x_file;
             struct
             {
                     long x_scnlen;
                     unsigned short x_nreloc;
                     unsigned short x_nlinno;
             }       x_scn;

            struct
            {
                   long x_tvfill;
                   unsigned short x_tvlen;
                   unsigned short x_tvran[2];
            }      x_tv;
     };

     Indexes of symbol table entries begin at 0.

SEE ALSO
     a.out(5), linenum(5).
     "Common Object File Format" in the Domain/OS Programming Environment
     Reference.

WARNINGS
     On machines on which ints are equivalent to longs, all longs have their
     type changed to int.  Thus the information about which symbols are
     declared as longs and which, as ints, does not show up in the symbol
     table.

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