Date: Thu, 2 Apr 92 15:48:13 -0800
authorJohn Gilmore <gnu@cygnus>
Fri, 3 Apr 1992 04:01:35 +0000 (04:01 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 3 Apr 1992 04:01:35 +0000 (04:01 +0000)
From: wu@mips.com (Alex Wu)
Message-Id: <9204022348.AA20058@goofy.mips.com>
To: gnu@cygnus.com
Subject: sym.h & symconst.h

John,
I finally get our lawyer's approval.  Here is the symconst.h and
the sym.h.  Please let me know if there is anything else I can help.

include/coff/ecoff-ext.h
include/coff/sym.h [new file with mode: 0644]
include/coff/symconst.h [new file with mode: 0644]

index 8dfd22f318c89fadf8ede2fb806c26051b18bcdb..78ce4a08bfa16ee9ed8ce797706faae2bce5e3e4 100644 (file)
@@ -1,4 +1,4 @@
-/* `Extended (actually Mangled) COFF' symbol table external format.
+/* MIPS `ECOFF' symbol table external format.
    Copyright 1992 Free Software Foundation.
    Contributed by Cygnus Support.  Written by John Gilmore.
 
@@ -18,6 +18,12 @@ You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
+/* ECOFF uses COFF-like section structures, but its own symbol format.
+   This file defines the symbol format in fields whose size and alignment
+   will not vary on different host systems.  The bfd module coff-msym.c
+   converts between external and internal forms of this information,
+   deals with byte order issues, etc.  */
+
 /* File header as a set of bytes */
 
 struct hdr_ext {
@@ -175,6 +181,9 @@ struct ext_ext {
 #define        EXT_BITS1_COBOL_MAIN_BIG        0x40
 #define        EXT_BITS1_COBOL_MAIN_LITTLE     0x02
 
+#define        EXT_BITS1_WEAKEXT_BIG           0x20
+#define        EXT_BITS1_WEAKEXT_LITTLE        0x04
+
 /* Type information external record */
 
 struct tir_ext {
diff --git a/include/coff/sym.h b/include/coff/sym.h
new file mode 100644 (file)
index 0000000..085ae7e
--- /dev/null
@@ -0,0 +1,523 @@
+/*
+ * |-----------------------------------------------------------|
+ * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
+ * | MIPS Computer Systems, Inc. grants reproduction and use   |
+ * | rights to all parties, PROVIDED that this comment is      |
+ * | maintained in the copy.                                   |
+ * |-----------------------------------------------------------|
+ */
+/* $Header$ */
+#ifndef _SYM_H
+#define _SYM_H
+
+/* (C) Copyright 1984 by Third Eye Software, Inc.
+ *
+ * Third Eye Software, Inc. grants reproduction and use rights to
+ * all parties, PROVIDED that this comment is maintained in the copy.
+ *
+ * Third Eye makes no claims about the applicability of this
+ * symbol table to a particular use.
+ */
+
+/* 
+ * This file contains the definition of the Third Eye Symbol Table.
+ *
+ * Symbols are assumed to be in 'encounter order' - i.e. the order that
+ * the things they represent were encountered by the compiler/assembler/loader.
+ * EXCEPT for globals! These are assumed to be bunched together,
+ * probably right after the last 'normal' symbol.  Globals ARE sorted
+ * in ascending order.
+ *
+ * -----------------------------------------------------------------------
+ * A brief word about Third Eye naming/use conventions:
+ *
+ * All arrays and index's are 0 based.
+ * All "ifooMax" values are the highest legal value PLUS ONE. This makes
+ * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
+ *
+ * "isym"      Index into the SYMbol table.
+ * "ipd"       Index into the Procedure Descriptor array.
+ * "ifd"       Index into the File Descriptor array.
+ * "iss"       Index into String Space.
+ * "cb"                Count of Bytes.
+ * "rgPd"      array whose domain is "0..ipdMax-1" and RanGe is PDR.
+ * "rgFd"      array whose domain is "0..ifdMax-1" and RanGe is FDR.
+ */
+
+
+/* 
+ * Symbolic Header (HDR) structure.
+ * As long as all the pointers are set correctly,
+ * we don't care WHAT order the various sections come out in!
+ *
+ * A file produced solely for the use of CDB will probably NOT have
+ * any instructions or data areas in it, as these are available
+ * in the original.
+ */
+
+#ifdef _LANGUAGE_C
+
+#ifdef __lint
+#include <exception.h>                 /* defines struct exception_info */
+#endif
+
+typedef struct {
+       short   magic;          /* to verify validity of the table */
+       short   vstamp;         /* version stamp */
+       long    ilineMax;       /* number of line number entries */
+       long    cbLine;         /* number of bytes for line number entries */
+       long    cbLineOffset;   /* offset to start of line number entries*/
+       long    idnMax;         /* max index into dense number table */
+       long    cbDnOffset;     /* offset to start dense number table */
+       long    ipdMax;         /* number of procedures */
+       long    cbPdOffset;     /* offset to procedure descriptor table */
+       long    isymMax;        /* number of local symbols */
+       long    cbSymOffset;    /* offset to start of local symbols*/
+       long    ioptMax;        /* max index into optimization symbol entries */
+       long    cbOptOffset;    /* offset to optimization symbol entries */
+       long    iauxMax;        /* number of auxillary symbol entries */
+       long    cbAuxOffset;    /* offset to start of auxillary symbol entries*/
+       long    issMax;         /* max index into local strings */
+       long    cbSsOffset;     /* offset to start of local strings */
+       long    issExtMax;      /* max index into external strings */
+       long    cbSsExtOffset;  /* offset to start of external strings */
+       long    ifdMax;         /* number of file descriptor entries */
+       long    cbFdOffset;     /* offset to file descriptor table */
+       long    crfd;           /* number of relative file descriptor entries */
+       long    cbRfdOffset;    /* offset to relative file descriptor table */
+       long    iextMax;        /* max index into external symbols */
+       long    cbExtOffset;    /* offset to start of external symbol entries*/
+       /* If you add machine dependent fields, add them here */
+       } HDRR, *pHDRR; 
+#define cbHDRR sizeof(HDRR)
+#define hdrNil ((pHDRR)0)
+
+/*
+ * The FDR and PDR structures speed mapping of address <-> name.
+ * They are sorted in ascending memory order and are kept in
+ * memory by CDB at runtime.
+ */
+
+/* 
+ * File Descriptor
+ *
+ * There is one of these for EVERY FILE, whether compiled with
+ * full debugging symbols or not.  The name of a file should be
+ * the path name given to the compiler.         This allows the user
+ * to simply specify the names of the directories where the COMPILES
+ * were done, and we will be able to find their files.
+ * A field whose comment starts with "R - " indicates that it will be
+ * setup at runtime.
+ */
+typedef struct fdr {
+       unsigned long   adr;    /* memory address of beginning of file */
+       long    rss;            /* file name (of source, if known) */
+       long    issBase;        /* file's string space */
+       long    cbSs;           /* number of bytes in the ss */
+       long    isymBase;       /* beginning of symbols */
+       long    csym;           /* count file's of symbols */
+       long    ilineBase;      /* file's line symbols */
+       long    cline;          /* count of file's line symbols */
+       long    ioptBase;       /* file's optimization entries */
+       long    copt;           /* count of file's optimization entries */
+       unsigned short ipdFirst;/* start of procedures for this file */
+       short   cpd;            /* count of procedures for this file */
+       long    iauxBase;       /* file's auxiliary entries */
+       long    caux;           /* count of file's auxiliary entries */
+       long    rfdBase;        /* index into the file indirect table */
+       long    crfd;           /* count file indirect entries */
+       unsigned lang: 5;       /* language for this file */
+       unsigned fMerge : 1;    /* whether this file can be merged */
+       unsigned fReadin : 1;   /* true if it was read in (not just created) */
+       unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
+                               /*      aux's will be in compile host's sex */
+       unsigned glevel : 2;    /* level this file was compiled with */
+       unsigned reserved : 22;  /* reserved for future use */
+       long    cbLineOffset;   /* byte offset from header for this file ln's */
+       long    cbLine;         /* size of lines for this file */
+       } FDR, *pFDR;
+#define cbFDR sizeof(FDR)
+#define fdNil ((pFDR)0)
+#define ifdNil -1
+#define ifdTemp 0
+#define ilnNil -1
+
+
+/* 
+ * Procedure Descriptor
+ *
+ * There is one of these for EVERY TEXT LABEL.
+ * If a procedure is in a file with full symbols, then isym
+ * will point to the PROC symbols, else it will point to the
+ * global symbol for the label.
+ */
+
+typedef struct pdr {
+       unsigned long   adr;    /* memory address of start of procedure */
+       long    isym;           /* start of local symbol entries */
+       long    iline;          /* start of line number entries*/
+       long    regmask;        /* save register mask */
+       long    regoffset;      /* save register offset */
+       long    iopt;           /* start of optimization symbol entries*/
+       long    fregmask;       /* save floating point register mask */
+       long    fregoffset;     /* save floating point register offset */
+       long    frameoffset;    /* frame size */
+       short   framereg;       /* frame pointer register */
+       short   pcreg;          /* offset or reg of return pc */
+       long    lnLow;          /* lowest line in the procedure */
+       long    lnHigh;         /* highest line in the procedure */
+       long    cbLineOffset;   /* byte offset for this procedure from the fd base */
+       } PDR, *pPDR;
+#define cbPDR sizeof(PDR)
+#define pdNil ((pPDR) 0)
+#define ipdNil -1
+
+/*
+ * The structure of the runtime procedure descriptor created by the loader
+ * for use by the static exception system.
+ */
+typedef struct runtime_pdr {
+       unsigned long   adr;    /* memory address of start of procedure */
+       long    regmask;        /* save register mask */
+       long    regoffset;      /* save register offset */
+       long    fregmask;       /* save floating point register mask */
+       long    fregoffset;     /* save floating point register offset */
+       long    frameoffset;    /* frame size */
+       short   framereg;       /* frame pointer register */
+       short   pcreg;          /* offset or reg of return pc */
+       long    irpss;          /* index into the runtime string table */
+       long    reserved;
+       struct exception_info *exception_info;/* pointer to exception array */
+} RPDR, *pRPDR;
+#define cbRPDR sizeof(RPDR)
+#define rpdNil ((pRPDR) 0)
+
+/*
+ * Line Numbers
+ *
+ * Line Numbers are segregated from the normal symbols because they
+ * are [1] smaller , [2] are of no interest to your
+ * average loader, and [3] are never needed in the middle of normal
+ * scanning and therefore slow things down.
+ *
+ * By definition, the first LINER for any given procedure will have
+ * the first line of a procedure and represent the first address.
+ */
+
+typedef        long LINER, *pLINER;
+#define lineNil ((pLINER)0)
+#define cbLINER sizeof(LINER)
+#define ilineNil       -1
+
+
+
+/*
+ * The Symbol Structure                (GFW, to those who Know!)
+ */
+
+typedef struct {
+       long    iss;            /* index into String Space of name */
+       long    value;          /* value of symbol */
+       unsigned st : 6;        /* symbol type */
+       unsigned sc  : 5;       /* storage class - text, data, etc */
+       unsigned reserved : 1;  /* reserved */
+       unsigned index : 20;    /* index into sym/aux table */
+       } SYMR, *pSYMR;
+#define symNil ((pSYMR)0)
+#define cbSYMR sizeof(SYMR)
+#define isymNil -1
+#define indexNil 0xfffff
+#define issNil -1
+#define issNull 0
+
+
+/* The following converts a memory resident string to an iss.
+ * This hack is recognized in SbFIss, in sym.c of the debugger.
+ */
+#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
+
+/* E X T E R N A L   S Y M B O L  R E C O R D
+ *
+ *     Same as the SYMR except it contains file context to determine where
+ *     the index is.
+ */
+typedef struct {
+       unsigned jmptbl:1;      /* symbol is a jump table entry for shlibs */
+       unsigned cobol_main:1;  /* symbol is a cobol main procedure */
+       unsigned weakext:1;     /* symbol is weak external */
+       unsigned reserved:13;   /* reserved for future use */
+       short   ifd;            /* where the iss and index fields point into */
+       SYMR    asym;           /* symbol for the external */
+       } EXTR, *pEXTR;
+#define extNil ((pEXTR)0)
+#define cbEXTR sizeof(EXTR)
+
+
+/* A U X I L L A R Y   T Y P E  I N F O R M A T I O N */
+
+/*
+ * Type Information Record
+ */
+typedef struct {
+       unsigned fBitfield : 1; /* set if bit width is specified */
+       unsigned continued : 1; /* indicates additional TQ info in next AUX */
+       unsigned bt  : 6;       /* basic type */
+       unsigned tq4 : 4;
+       unsigned tq5 : 4;
+       /* ---- 16 bit boundary ---- */
+       unsigned tq0 : 4;
+       unsigned tq1 : 4;       /* 6 type qualifiers - tqPtr, etc. */
+       unsigned tq2 : 4;
+       unsigned tq3 : 4;
+       } TIR, *pTIR;
+#define cbTIR sizeof(TIR)
+#define tiNil ((pTIR)0)
+#define itqMax 6
+
+/*
+ * Relative symbol record
+ *
+ * If the rfd field is 4095, the index field indexes into the global symbol
+ *     table.
+ */
+
+typedef struct {
+       unsigned        rfd : 12;    /* index into the file indirect table */
+       unsigned        index : 20; /* index int sym/aux/iss tables */
+       } RNDXR, *pRNDXR;
+#define cbRNDXR sizeof(RNDXR)
+#define rndxNil ((pRNDXR)0)
+
+/* dense numbers or sometimes called block numbers are stored in this type,
+ *     a rfd of 0xffffffff is an index into the global table.
+ */
+typedef struct {
+       unsigned long   rfd;    /* index into the file table */
+       unsigned long   index;  /* index int sym/aux/iss tables */
+       } DNR, *pDNR;
+#define cbDNR sizeof(DNR)
+#define dnNil ((pDNR)0)
+
+
+
+/*
+ * Auxillary information occurs only if needed.
+ * It ALWAYS occurs in this order when present.
+
+           isymMac             used by stProc only
+           TIR                 type info
+           TIR                 additional TQ info (if first TIR was not enough)
+           rndx                if (bt == btStruct,btUnion,btEnum,btSet,btRange,
+                                   btTypedef):
+                                   rsym.index == iaux for btSet or btRange
+                                   else rsym.index == isym
+           dimLow              btRange, btSet
+           dimMac              btRange, btSet
+           rndx0               As many as there are tq arrays
+           dimLow0
+           dimHigh0
+           ...
+           rndxMax-1
+           dimLowMax-1
+           dimHighMax-1
+           width in bits       if (bit field), width in bits.
+ */
+#define cAuxMax (6 + (idimMax*3))
+
+/* a union of all possible info in the AUX universe */
+typedef union {
+       TIR     ti;             /* type information record */
+       RNDXR   rndx;           /* relative index into symbol table */
+       long    dnLow;          /* low dimension */
+       long    dnHigh;         /* high dimension */
+       long    isym;           /* symbol table index (end of proc) */
+       long    iss;            /* index into string space (not used) */
+       long    width;          /* width for non-default sized struc fields */
+       long    count;          /* count of ranges for variant arm */
+       } AUXU, *pAUXU;
+#define cbAUXU sizeof(AUXU)
+#define auxNil ((pAUXU)0)
+#define iauxNil -1
+
+
+/*
+ * Optimization symbols
+ *
+ * Optimization symbols contain some overlap information with the normal
+ * symbol table. In particular, the proc information
+ * is somewhat redundant but necessary to easily find the other information
+ * present. 
+ *
+ * All of the offsets are relative to the beginning of the last otProc
+ */
+
+typedef struct {
+       unsigned ot: 8;         /* optimization type */
+       unsigned value: 24;     /* address where we are moving it to */
+       RNDXR   rndx;           /* points to a symbol or opt entry */
+       unsigned long   offset; /* relative offset this occured */
+       } OPTR, *pOPTR;
+#define optNil ((pOPTR) 0)
+#define cbOPTR sizeof(OPTR)
+#define ioptNil -1
+
+/*
+ * File Indirect
+ *
+ * When a symbol is referenced across files the following procedure is used:
+ *     1) use the file index to get the File indirect entry.
+ *     2) use the file indirect entry to get the File descriptor.
+ *     3) add the sym index to the base of that file's sym table
+ *
+ */
+
+typedef long RFDT, *pRFDT;
+#define cbRFDT sizeof(RFDT)
+#define rfdNil -1
+
+/*
+ * The file indirect table in the mips loader is known as an array of FITs.
+ * This is done to keep the code in the loader readable in the area where
+ * these tables are merged.  Note this is only a name change.
+ */
+typedef long FIT, *pFIT;
+#define cbFIT  sizeof(FIT)
+#define ifiNil -1
+#define fiNil  ((pFIT) 0)
+
+#endif /* _LANGUAGE_C */
+
+#ifdef _LANGUAGE_PASCAL
+#define ifdNil -1
+#define ilnNil -1
+#define ipdNil -1
+#define ilineNil -1
+#define isymNil -1
+#define indexNil 16#fffff
+#define issNil -1
+#define issNull 0
+#define itqMax 6
+#define iauxNil -1
+#define ioptNil -1
+#define rfdNil -1
+#define ifiNil -1
+#endif /* _LANGUAGE_PASCAL */
+
+
+/* Dense numbers
+ *
+ * Rather than use file index, symbol index pairs to represent symbols
+ *     and globals, we use dense number so that they can be easily embeded
+ *     in intermediate code and the programs that process them can
+ *     use direct access tabls instead of hash table (which would be
+ *     necesary otherwise because of the sparse name space caused by
+ *     file index, symbol index pairs. Dense number are represented
+ *     by RNDXRs.
+ */
+
+/*
+ * The following table defines the meaning of each SYM field as
+ * a function of the "st". (scD/B == scData OR scBss)
+ *
+ * Note: the value "isymMac" is used by symbols that have the concept
+ * of enclosing a block of related information.         This value is the
+ * isym of the first symbol AFTER the end associated with the primary
+ * symbol. For example if a procedure was at isym==90 and had an
+ * isymMac==155, the associated end would be at isym==154, and the
+ * symbol at 155 would probably (although not necessarily) be the
+ * symbol for the next procedure.  This allows rapid skipping over
+ * internal information of various sorts. "stEnd"s ALWAYS have the
+ * isym of the primary symbol that started the block.
+ * 
+
+ST             SC      VALUE           INDEX
+--------       ------  --------        ------
+stFile         scText  address         isymMac
+stLabel                scText  address         ---
+stGlobal       scD/B   address         iaux
+stStatic       scD/B   address         iaux
+stParam                scAbs   offset          iaux
+stLocal                scAbs   offset          iaux
+stProc         scText  address         iaux    (isymMac is first AUX)
+stStaticProc   scText  address         iaux    (isymMac is first AUX)
+
+stMember       scNil   ordinal         ---     (if member of enum)
+stMember       scNil   byte offset     iaux    (if member of struct/union)
+stMember       scBits  bit offset      iaux    (bit field spec)
+
+stBlock                scText  address         isymMac (text block)
+stBlock                scNil   cb              isymMac (struct/union member define)
+stBlock                scNil   cMembers        isymMac (enum member define)
+
+stEnd          scText  address         isymStart
+stEnd          scNil   -------         isymStart (struct/union/enum)
+
+stTypedef      scNil   -------         iaux
+stRegReloc     sc???   value           old register number
+stForward      sc???   new address     isym to original symbol
+
+stConstant     scInfo  value           --- (scalar)
+stConstant     scInfo  iss             --- (complex, e.g. string)
+
+ *
+ */
+/* $Log$
+/* Revision 1.1  1992/04/03 04:01:32  gnu
+/* Date: Thu, 2 Apr 92 15:48:13 -0800
+/* From: wu@mips.com (Alex Wu)
+/* Message-Id: <9204022348.AA20058@goofy.mips.com>
+/* To: gnu@cygnus.com
+/* Subject: sym.h & symconst.h
+/*
+/* John,
+/*     I finally get our lawyer's approval.  Here is the symconst.h and
+/* the sym.h.  Please let me know if there is anything else I can help.
+/*
+ * Revision 3000.5.1.2  91/05/31  18:27:22  bettina
+ * fix DFARS in copyright
+ * 
+ * Revision 3000.5.1.1  91/04/15  20:51:26  bettina
+ * fix copyright
+ * 
+ * Revision 3000.5  91/04/09  13:39:51  keithm
+ * Added DEC specific changes.
+ * 
+ * Revision 3000.3  91/03/13  18:55:54  karen
+ * changed __SYM_H to _SYM_H
+ * 
+ * Revision 3000.2  90/12/10  13:53:26  zaineb
+ * Ansi Changes
+ * 
+ * Revision 2020.2.1.1  90/10/30  12:31:15  shin
+ * copy from 2.21 for weakext flag
+ * 
+ * Revision 2021.2  90/10/19  10:55:23  shin
+ * added weakext flag in EXTR structure
+ * 
+ * Revision 2021.1  90/06/07  23:09:19  bettina
+ * 2.21 - branching off 2.20 for ansi C
+ * 
+ * Revision 2020.2  90/05/17  18:17:57  chan
+ * *** empty log message ***
+ * 
+ * Revision 2010.7.1.6  90/02/22  19:53:48  bettina
+ * 2.10 F1
+ * 
+ * Revision 2010.7.1.5  89/11/29  22:41:00  bettina
+ * 2.10 BETA2
+ * 
+ * Revision 2010.3  89/10/05  10:44:44  lai
+ * added lint wrapper
+ * 
+ * Revision 2010.2  89/09/26  23:40:45  lai
+ * added #include exception.h
+ * 
+ * Revision 2010.1  89/09/26  20:47:45  lai
+ * updated to 2.10
+ * 
+ * Revision 1.3  89/09/26  20:08:54  lai
+ * added wrapper and $LOG
+ * updated for 2.10
+ * 
+*/
+#endif
diff --git a/include/coff/symconst.h b/include/coff/symconst.h
new file mode 100644 (file)
index 0000000..ecd7835
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * |-----------------------------------------------------------|
+ * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
+ * | MIPS Computer Systems, Inc. grants reproduction and use   |
+ * | rights to all parties, PROVIDED that this comment is      |
+ * | maintained in the copy.                                   |
+ * |-----------------------------------------------------------|
+ */
+/* $Header$ */
+
+/* (C) Copyright 1984 by Third Eye Software, Inc.
+ *
+ * Third Eye Software, Inc. grants reproduction and use rights to
+ * all parties, PROVIDED that this comment is maintained in the copy.
+ *
+ * Third Eye makes no claims about the applicability of this
+ * symbol table to a particular use.
+ */
+
+/* glevels for field in FDR */
+#define GLEVEL_0       2
+#define GLEVEL_1       1
+#define GLEVEL_2       0       /* for upward compat reasons. */
+#define GLEVEL_3       3
+
+/* magic number fo symheader */
+#define magicSym       0x7009
+
+/* Language codes */
+#define langC          0       
+#define langPascal     1
+#define langFortran    2
+#define        langAssembler   3       /* one Assembley inst might map to many mach */
+#define langMachine    4
+#define langNil                5
+#define langAda                6
+#define langPl1                7
+#define langCobol      8
+#define langStdc       9
+#define langMax                10      /* maximun allowed 32 -- 5 bits */
+
+/* The following are value definitions for the fields in the SYMR */
+
+/*
+ * Storage Classes
+ */
+
+#define scNil          0
+#define scText         1       /* text symbol */
+#define scData         2       /* initialized data symbol */
+#define scBss          3       /* un-initialized data symbol */
+#define scRegister     4       /* value of symbol is register number */
+#define scAbs          5       /* value of symbol is absolute */
+#define scUndefined    6       /* who knows? */
+#define scCdbLocal     7       /* variable's value is IN se->va.?? */
+#define scBits         8       /* this is a bit field */
+#define scCdbSystem    9       /* variable's value is IN CDB's address space */
+#define scDbx          9       /* overlap dbx internal use */
+#define scRegImage     10      /* register value saved on stack */
+#define scInfo         11      /* symbol contains debugger information */
+#define scUserStruct   12      /* address in struct user for current process */
+#define scSData                13      /* load time only small data */
+#define scSBss         14      /* load time only small common */
+#define scRData                15      /* load time only read only data */
+#define scVar          16      /* Var parameter (fortran,pascal) */
+#define scCommon       17      /* common variable */
+#define scSCommon      18      /* small common */
+#define scVarRegister  19      /* Var parameter in a register */
+#define scVariant      20      /* Variant record */
+#define scSUndefined   21      /* small undefined(external) data */
+#define scInit         22      /* .init section symbol */
+#define scBasedVar     23      /* Fortran or PL/1 ptr based var */ 
+#define scXData         24      /* exception handling data */
+#define scPData         25      /* Procedure section */
+#define scFini          26      /* .fini section */
+#define scMax          32
+
+
+/*
+ *   Symbol Types
+ */
+
+#define stNil          0       /* Nuthin' special */
+#define stGlobal       1       /* external symbol */
+#define stStatic       2       /* static */
+#define stParam                3       /* procedure argument */
+#define stLocal                4       /* local variable */
+#define stLabel                5       /* label */
+#define stProc         6       /*     "      "  Procedure */
+#define stBlock                7       /* beginnning of block */
+#define stEnd          8       /* end (of anything) */
+#define stMember       9       /* member (of anything  - struct/union/enum */
+#define stTypedef      10      /* type definition */
+#define stFile         11      /* file name */
+#define stRegReloc     12      /* register relocation */
+#define stForward      13      /* forwarding address */
+#define stStaticProc   14      /* load time only static procs */
+#define stConstant     15      /* const */
+#define stStaParam     16      /* Fortran static parameters */
+    /* Psuedo-symbols - internal to debugger */
+#define stStr          60      /* string */
+#define stNumber       61      /* pure number (ie. 4 NOR 2+2) */
+#define stExpr         62      /* 2+2 vs. 4 */
+#define stType         63      /* post-coersion SER */
+#define stMax          64
+
+/* definitions for fields in TIR */
+
+/* type qualifiers for ti.tq0 -> ti.(itqMax-1) */
+#define tqNil  0       /* bt is what you see */
+#define tqPtr  1       /* pointer */
+#define tqProc 2       /* procedure */
+#define tqArray 3      /* duh */
+#define tqFar  4       /* longer addressing - 8086/8 land */
+#define tqVol  5       /* volatile */
+#define tqConst 6      /* const */
+#define tqMax  8
+
+/* basic types as seen in ti.bt */
+#define btNil          0       /* undefined */
+#define btAdr          1       /* address - integer same size as pointer */
+#define btChar         2       /* character */
+#define btUChar                3       /* unsigned character */
+#define btShort                4       /* short */
+#define btUShort       5       /* unsigned short */
+#define btInt          6       /* int */
+#define btUInt         7       /* unsigned int */
+#define btLong         8       /* long */
+#define btULong                9       /* unsigned long */
+#define btFloat                10      /* float (real) */
+#define btDouble       11      /* Double (real) */
+#define btStruct       12      /* Structure (Record) */
+#define btUnion                13      /* Union (variant) */
+#define btEnum         14      /* Enumerated */
+#define btTypedef      15      /* defined via a typedef, isymRef points */
+#define btRange                16      /* subrange of int */
+#define btSet          17      /* pascal sets */
+#define btComplex      18      /* fortran complex */
+#define btDComplex     19      /* fortran double complex */
+#define btIndirect     20      /* forward or unnamed typedef */
+#define btFixedDec     21      /* Fixed Decimal */
+#define btFloatDec     22      /* Float Decimal */
+#define btString       23      /* Varying Length Character String */
+#define btBit          24      /* Aligned Bit String */
+#define btPicture      25      /* Picture */
+#define btVoid         26      /* void */
+#define btLongLong     27      /* long long */
+#define btULongLong    28      /* unsigned long long */
+#define btMax          64
+
+#if (_MFG == _MIPS)
+/* optimization type codes */
+#define otNil          0
+#define otReg          1       /* move var to reg */
+#define otBlock                2       /* begin basic block */
+#define        otProc          3       /* procedure */
+#define otInline       4       /* inline procedure */
+#define otEnd          5       /* whatever you started */
+#define otMax          6       /* KEEP UP TO DATE */
+#endif (_MFG == _MIPS)