Blame include/coff/sym.h

Packit bbfece
/* Declarations of internal format of MIPS ECOFF symbols.
Packit bbfece
   Originally contributed by MIPS Computer Systems and Third Eye Software.
Packit bbfece
   Changes contributed by Cygnus Support are in the public domain.  
Packit bbfece
Packit bbfece
   This file is just aggregated with the files that make up the GNU
Packit bbfece
   release; it is not considered part of GAS, GDB, or other GNU
Packit bbfece
   programs.  */
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * |-----------------------------------------------------------|
Packit bbfece
 * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
Packit bbfece
 * | MIPS Computer Systems, Inc. grants reproduction and use   |
Packit bbfece
 * | rights to all parties, PROVIDED that this comment is      |
Packit bbfece
 * | maintained in the copy.                                   |
Packit bbfece
 * |-----------------------------------------------------------|
Packit bbfece
 */
Packit bbfece
#ifndef _SYM_H
Packit bbfece
#define _SYM_H
Packit bbfece
Packit bbfece
/* (C) Copyright 1984 by Third Eye Software, Inc.
Packit bbfece
 *
Packit bbfece
 * Third Eye Software, Inc. grants reproduction and use rights to
Packit bbfece
 * all parties, PROVIDED that this comment is maintained in the copy.
Packit bbfece
 *
Packit bbfece
 * Third Eye makes no claims about the applicability of this
Packit bbfece
 * symbol table to a particular use.
Packit bbfece
 */
Packit bbfece
Packit bbfece
/* 
Packit bbfece
 * This file contains the definition of the Third Eye Symbol Table.
Packit bbfece
 *
Packit bbfece
 * Symbols are assumed to be in 'encounter order' - i.e. the order that
Packit bbfece
 * the things they represent were encountered by the compiler/assembler/loader.
Packit bbfece
 * EXCEPT for globals!	These are assumed to be bunched together,
Packit bbfece
 * probably right after the last 'normal' symbol.  Globals ARE sorted
Packit bbfece
 * in ascending order.
Packit bbfece
 *
Packit bbfece
 * -----------------------------------------------------------------------
Packit bbfece
 * A brief word about Third Eye naming/use conventions:
Packit bbfece
 *
Packit bbfece
 * All arrays and index's are 0 based.
Packit bbfece
 * All "ifooMax" values are the highest legal value PLUS ONE. This makes
Packit bbfece
 * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
Packit bbfece
 *
Packit bbfece
 * "isym"	Index into the SYMbol table.
Packit bbfece
 * "ipd"	Index into the Procedure Descriptor array.
Packit bbfece
 * "ifd"	Index into the File Descriptor array.
Packit bbfece
 * "iss"	Index into String Space.
Packit bbfece
 * "cb"		Count of Bytes.
Packit bbfece
 * "rgPd"	array whose domain is "0..ipdMax-1" and RanGe is PDR.
Packit bbfece
 * "rgFd"	array whose domain is "0..ifdMax-1" and RanGe is FDR.
Packit bbfece
 */
Packit bbfece
Packit bbfece
Packit bbfece
/* 
Packit bbfece
 * Symbolic Header (HDR) structure.
Packit bbfece
 * As long as all the pointers are set correctly,
Packit bbfece
 * we don't care WHAT order the various sections come out in!
Packit bbfece
 *
Packit bbfece
 * A file produced solely for the use of CDB will probably NOT have
Packit bbfece
 * any instructions or data areas in it, as these are available
Packit bbfece
 * in the original.
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef struct {
Packit bbfece
	short	magic;		/* to verify validity of the table */
Packit bbfece
	short	vstamp;		/* version stamp */
Packit bbfece
	long	ilineMax;	/* number of line number entries */
Packit bbfece
	bfd_vma	cbLine;		/* number of bytes for line number entries */
Packit bbfece
	bfd_vma	cbLineOffset;	/* offset to start of line number entries*/
Packit bbfece
	long	idnMax;		/* max index into dense number table */
Packit bbfece
	bfd_vma	cbDnOffset;	/* offset to start dense number table */
Packit bbfece
	long	ipdMax;		/* number of procedures */
Packit bbfece
	bfd_vma	cbPdOffset;	/* offset to procedure descriptor table */
Packit bbfece
	long	isymMax;	/* number of local symbols */
Packit bbfece
	bfd_vma	cbSymOffset;	/* offset to start of local symbols*/
Packit bbfece
	long	ioptMax;	/* max index into optimization symbol entries */
Packit bbfece
	bfd_vma	cbOptOffset;	/* offset to optimization symbol entries */
Packit bbfece
	long	iauxMax;	/* number of auxillary symbol entries */
Packit bbfece
	bfd_vma	cbAuxOffset;	/* offset to start of auxillary symbol entries*/
Packit bbfece
	long	issMax;		/* max index into local strings */
Packit bbfece
	bfd_vma	cbSsOffset;	/* offset to start of local strings */
Packit bbfece
	long	issExtMax;	/* max index into external strings */
Packit bbfece
	bfd_vma	cbSsExtOffset;	/* offset to start of external strings */
Packit bbfece
	long	ifdMax;		/* number of file descriptor entries */
Packit bbfece
	bfd_vma	cbFdOffset;	/* offset to file descriptor table */
Packit bbfece
	long	crfd;		/* number of relative file descriptor entries */
Packit bbfece
	bfd_vma	cbRfdOffset;	/* offset to relative file descriptor table */
Packit bbfece
	long	iextMax;	/* max index into external symbols */
Packit bbfece
	bfd_vma	cbExtOffset;	/* offset to start of external symbol entries*/
Packit bbfece
	/* If you add machine dependent fields, add them here */
Packit bbfece
	} HDRR, *pHDRR; 
Packit bbfece
#define cbHDRR sizeof(HDRR)
Packit bbfece
#define hdrNil ((pHDRR)0)
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * The FDR and PDR structures speed mapping of address <-> name.
Packit bbfece
 * They are sorted in ascending memory order and are kept in
Packit bbfece
 * memory by CDB at runtime.
Packit bbfece
 */
Packit bbfece
Packit bbfece
/* 
Packit bbfece
 * File Descriptor
Packit bbfece
 *
Packit bbfece
 * There is one of these for EVERY FILE, whether compiled with
Packit bbfece
 * full debugging symbols or not.  The name of a file should be
Packit bbfece
 * the path name given to the compiler.	 This allows the user
Packit bbfece
 * to simply specify the names of the directories where the COMPILES
Packit bbfece
 * were done, and we will be able to find their files.
Packit bbfece
 * A field whose comment starts with "R - " indicates that it will be
Packit bbfece
 * setup at runtime.
Packit bbfece
 */
Packit bbfece
typedef struct fdr {
Packit bbfece
	bfd_vma	adr;		/* memory address of beginning of file */
Packit bbfece
	long	rss;		/* file name (of source, if known) */
Packit bbfece
	long	issBase;	/* file's string space */
Packit bbfece
	bfd_vma	cbSs;		/* number of bytes in the ss */
Packit bbfece
	long	isymBase;	/* beginning of symbols */
Packit bbfece
	long	csym;		/* count file's of symbols */
Packit bbfece
	long	ilineBase;	/* file's line symbols */
Packit bbfece
	long	cline;		/* count of file's line symbols */
Packit bbfece
	long	ioptBase;	/* file's optimization entries */
Packit bbfece
	long	copt;		/* count of file's optimization entries */
Packit bbfece
	unsigned short ipdFirst;/* start of procedures for this file */
Packit bbfece
	short	cpd;		/* count of procedures for this file */
Packit bbfece
	long	iauxBase;	/* file's auxiliary entries */
Packit bbfece
	long	caux;		/* count of file's auxiliary entries */
Packit bbfece
	long	rfdBase;	/* index into the file indirect table */
Packit bbfece
	long	crfd;		/* count file indirect entries */
Packit bbfece
	unsigned lang: 5;	/* language for this file */
Packit bbfece
	unsigned fMerge : 1;	/* whether this file can be merged */
Packit bbfece
	unsigned fReadin : 1;	/* true if it was read in (not just created) */
Packit bbfece
	unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
Packit bbfece
				/*	aux's will be in compile host's sex */
Packit bbfece
	unsigned glevel : 2;	/* level this file was compiled with */
Packit bbfece
	unsigned reserved : 22;  /* reserved for future use */
Packit bbfece
	bfd_vma	cbLineOffset;	/* byte offset from header for this file ln's */
Packit bbfece
	bfd_vma	cbLine;		/* size of lines for this file */
Packit bbfece
	} FDR, *pFDR;
Packit bbfece
#define cbFDR sizeof(FDR)
Packit bbfece
#define fdNil ((pFDR)0)
Packit bbfece
#define ifdNil -1
Packit bbfece
#define ifdTemp 0
Packit bbfece
#define ilnNil -1
Packit bbfece
Packit bbfece
Packit bbfece
/* 
Packit bbfece
 * Procedure Descriptor
Packit bbfece
 *
Packit bbfece
 * There is one of these for EVERY TEXT LABEL.
Packit bbfece
 * If a procedure is in a file with full symbols, then isym
Packit bbfece
 * will point to the PROC symbols, else it will point to the
Packit bbfece
 * global symbol for the label.
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef struct pdr {
Packit bbfece
	bfd_vma	adr;		/* memory address of start of procedure */
Packit bbfece
	long	isym;		/* start of local symbol entries */
Packit bbfece
	long	iline;		/* start of line number entries*/
Packit bbfece
	long	regmask;	/* save register mask */
Packit bbfece
	long	regoffset;	/* save register offset */
Packit bbfece
	long	iopt;		/* start of optimization symbol entries*/
Packit bbfece
	long	fregmask;	/* save floating point register mask */
Packit bbfece
	long	fregoffset;	/* save floating point register offset */
Packit bbfece
	long	frameoffset;	/* frame size */
Packit bbfece
	short	framereg;	/* frame pointer register */
Packit bbfece
	short	pcreg;		/* offset or reg of return pc */
Packit bbfece
	long	lnLow;		/* lowest line in the procedure */
Packit bbfece
	long	lnHigh;		/* highest line in the procedure */
Packit bbfece
	bfd_vma	cbLineOffset;	/* byte offset for this procedure from the fd base */
Packit bbfece
	/* These fields are new for 64 bit ECOFF.  */
Packit bbfece
	unsigned gp_prologue : 8; /* byte size of GP prologue */
Packit bbfece
	unsigned gp_used : 1;	/* true if the procedure uses GP */
Packit bbfece
	unsigned reg_frame : 1;	/* true if register frame procedure */
Packit bbfece
	unsigned prof : 1;	/* true if compiled with -pg */
Packit bbfece
	unsigned reserved : 13;	/* reserved: must be zero */
Packit bbfece
	unsigned localoff : 8;	/* offset of local variables from vfp */
Packit bbfece
	} PDR, *pPDR;
Packit bbfece
#define cbPDR sizeof(PDR)
Packit bbfece
#define pdNil ((pPDR) 0)
Packit bbfece
#define ipdNil	-1
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * The structure of the runtime procedure descriptor created by the loader
Packit bbfece
 * for use by the static exception system.
Packit bbfece
 */
Packit bbfece
/*
Packit bbfece
 * If 0'd out because exception_info chokes Visual C++ and because there
Packit bbfece
 * don't seem to be any references to this structure elsewhere in gdb.
Packit bbfece
 */
Packit bbfece
#if 0
Packit bbfece
typedef struct runtime_pdr {
Packit bbfece
	bfd_vma	adr;		/* memory address of start of procedure */
Packit bbfece
	long	regmask;	/* save register mask */
Packit bbfece
	long	regoffset;	/* save register offset */
Packit bbfece
	long	fregmask;	/* save floating point register mask */
Packit bbfece
	long	fregoffset;	/* save floating point register offset */
Packit bbfece
	long	frameoffset;	/* frame size */
Packit bbfece
	short	framereg;	/* frame pointer register */
Packit bbfece
	short	pcreg;		/* offset or reg of return pc */
Packit bbfece
	long	irpss;		/* index into the runtime string table */
Packit bbfece
	long	reserved;
Packit bbfece
	struct exception_info *exception_info;/* pointer to exception array */
Packit bbfece
} RPDR, *pRPDR;
Packit bbfece
#define cbRPDR sizeof(RPDR)
Packit bbfece
#define rpdNil ((pRPDR) 0)
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * Line Numbers
Packit bbfece
 *
Packit bbfece
 * Line Numbers are segregated from the normal symbols because they
Packit bbfece
 * are [1] smaller , [2] are of no interest to your
Packit bbfece
 * average loader, and [3] are never needed in the middle of normal
Packit bbfece
 * scanning and therefore slow things down.
Packit bbfece
 *
Packit bbfece
 * By definition, the first LINER for any given procedure will have
Packit bbfece
 * the first line of a procedure and represent the first address.
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef	long LINER, *pLINER;
Packit bbfece
#define lineNil ((pLINER)0)
Packit bbfece
#define cbLINER sizeof(LINER)
Packit bbfece
#define ilineNil	-1
Packit bbfece
Packit bbfece
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * The Symbol Structure		(GFW, to those who Know!)
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef struct {
Packit bbfece
	long	iss;		/* index into String Space of name */
Packit bbfece
	bfd_vma	value;		/* value of symbol */
Packit bbfece
	unsigned st : 6;	/* symbol type */
Packit bbfece
	unsigned sc  : 5;	/* storage class - text, data, etc */
Packit bbfece
	unsigned reserved : 1;	/* reserved */
Packit bbfece
	unsigned index : 20;	/* index into sym/aux table */
Packit bbfece
	} SYMR, *pSYMR;
Packit bbfece
#define symNil ((pSYMR)0)
Packit bbfece
#define cbSYMR sizeof(SYMR)
Packit bbfece
#define isymNil -1
Packit bbfece
#define indexNil 0xfffff
Packit bbfece
#define issNil -1
Packit bbfece
#define issNull 0
Packit bbfece
Packit bbfece
Packit bbfece
/* The following converts a memory resident string to an iss.
Packit bbfece
 * This hack is recognized in SbFIss, in sym.c of the debugger.
Packit bbfece
 */
Packit bbfece
#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
Packit bbfece
Packit bbfece
/* E X T E R N A L   S Y M B O L  R E C O R D
Packit bbfece
 *
Packit bbfece
 *	Same as the SYMR except it contains file context to determine where
Packit bbfece
 *	the index is.
Packit bbfece
 */
Packit bbfece
typedef struct ecoff_extr {
Packit bbfece
	unsigned jmptbl:1;	/* symbol is a jump table entry for shlibs */
Packit bbfece
	unsigned cobol_main:1;	/* symbol is a cobol main procedure */
Packit bbfece
	unsigned weakext:1;	/* symbol is weak external */
Packit bbfece
	unsigned reserved:13;	/* reserved for future use */
Packit bbfece
	int	ifd;		/* where the iss and index fields point into */
Packit bbfece
	SYMR	asym;		/* symbol for the external */
Packit bbfece
	} EXTR, *pEXTR;
Packit bbfece
#define extNil ((pEXTR)0)
Packit bbfece
#define cbEXTR sizeof(EXTR)
Packit bbfece
Packit bbfece
Packit bbfece
/* A U X I L L A R Y   T Y P E	 I N F O R M A T I O N */
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * Type Information Record
Packit bbfece
 */
Packit bbfece
typedef struct {
Packit bbfece
	unsigned fBitfield : 1; /* set if bit width is specified */
Packit bbfece
	unsigned continued : 1; /* indicates additional TQ info in next AUX */
Packit bbfece
	unsigned bt  : 6;	/* basic type */
Packit bbfece
	unsigned tq4 : 4;
Packit bbfece
	unsigned tq5 : 4;
Packit bbfece
	/* ---- 16 bit boundary ---- */
Packit bbfece
	unsigned tq0 : 4;
Packit bbfece
	unsigned tq1 : 4;	/* 6 type qualifiers - tqPtr, etc. */
Packit bbfece
	unsigned tq2 : 4;
Packit bbfece
	unsigned tq3 : 4;
Packit bbfece
	} TIR, *pTIR;
Packit bbfece
#define cbTIR sizeof(TIR)
Packit bbfece
#define tiNil ((pTIR)0)
Packit bbfece
#define itqMax 6
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * Relative symbol record
Packit bbfece
 *
Packit bbfece
 * If the rfd field is 4095, the index field indexes into the global symbol
Packit bbfece
 *	table.
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef struct {
Packit bbfece
	unsigned	rfd : 12;    /* index into the file indirect table */
Packit bbfece
	unsigned	index : 20; /* index int sym/aux/iss tables */
Packit bbfece
	} RNDXR, *pRNDXR;
Packit bbfece
#define cbRNDXR sizeof(RNDXR)
Packit bbfece
#define rndxNil ((pRNDXR)0)
Packit bbfece
Packit bbfece
/* dense numbers or sometimes called block numbers are stored in this type,
Packit bbfece
 *	a rfd of 0xffffffff is an index into the global table.
Packit bbfece
 */
Packit bbfece
typedef struct {
Packit bbfece
	unsigned long	rfd;    /* index into the file table */
Packit bbfece
	unsigned long	index; 	/* index int sym/aux/iss tables */
Packit bbfece
	} DNR, *pDNR;
Packit bbfece
#define cbDNR sizeof(DNR)
Packit bbfece
#define dnNil ((pDNR)0)
Packit bbfece
Packit bbfece
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * Auxillary information occurs only if needed.
Packit bbfece
 * It ALWAYS occurs in this order when present.
Packit bbfece
Packit bbfece
	    isymMac		used by stProc only
Packit bbfece
	    TIR			type info
Packit bbfece
	    TIR			additional TQ info (if first TIR was not enough)
Packit bbfece
	    rndx		if (bt == btStruct,btUnion,btEnum,btSet,btRange,
Packit bbfece
				    btTypedef):
Packit bbfece
				    rsym.index == iaux for btSet or btRange
Packit bbfece
				    else rsym.index == isym
Packit bbfece
	    dimLow		btRange, btSet
Packit bbfece
	    dimMac		btRange, btSet
Packit bbfece
	    rndx0		As many as there are tq arrays
Packit bbfece
	    dimLow0
Packit bbfece
	    dimHigh0
Packit bbfece
	    ...
Packit bbfece
	    rndxMax-1
Packit bbfece
	    dimLowMax-1
Packit bbfece
	    dimHighMax-1
Packit bbfece
	    width in bits	if (bit field), width in bits.
Packit bbfece
 */
Packit bbfece
#define cAuxMax (6 + (idimMax*3))
Packit bbfece
Packit bbfece
/* a union of all possible info in the AUX universe */
Packit bbfece
typedef union {
Packit bbfece
	TIR	ti;		/* type information record */
Packit bbfece
	RNDXR	rndx;		/* relative index into symbol table */
Packit bbfece
	long	dnLow;		/* low dimension */
Packit bbfece
	long	dnHigh;		/* high dimension */
Packit bbfece
	long	isym;		/* symbol table index (end of proc) */
Packit bbfece
	long	iss;		/* index into string space (not used) */
Packit bbfece
	long	width;		/* width for non-default sized struc fields */
Packit bbfece
	long	count;		/* count of ranges for variant arm */
Packit bbfece
	} AUXU, *pAUXU;
Packit bbfece
#define cbAUXU sizeof(AUXU)
Packit bbfece
#define auxNil ((pAUXU)0)
Packit bbfece
#define iauxNil -1
Packit bbfece
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * Optimization symbols
Packit bbfece
 *
Packit bbfece
 * Optimization symbols contain some overlap information with the normal
Packit bbfece
 * symbol table. In particular, the proc information
Packit bbfece
 * is somewhat redundant but necessary to easily find the other information
Packit bbfece
 * present. 
Packit bbfece
 *
Packit bbfece
 * All of the offsets are relative to the beginning of the last otProc
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef struct {
Packit bbfece
	unsigned ot: 8;		/* optimization type */
Packit bbfece
	unsigned value: 24;	/* address where we are moving it to */
Packit bbfece
	RNDXR	rndx;		/* points to a symbol or opt entry */
Packit bbfece
	unsigned long	offset;	/* relative offset this occured */
Packit bbfece
	} OPTR, *pOPTR;
Packit bbfece
#define optNil	((pOPTR) 0)
Packit bbfece
#define cbOPTR sizeof(OPTR)
Packit bbfece
#define ioptNil -1
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * File Indirect
Packit bbfece
 *
Packit bbfece
 * When a symbol is referenced across files the following procedure is used:
Packit bbfece
 *	1) use the file index to get the File indirect entry.
Packit bbfece
 *	2) use the file indirect entry to get the File descriptor.
Packit bbfece
 *	3) add the sym index to the base of that file's sym table
Packit bbfece
 *
Packit bbfece
 */
Packit bbfece
Packit bbfece
typedef long RFDT, *pRFDT;
Packit bbfece
#define cbRFDT sizeof(RFDT)
Packit bbfece
#define rfdNil	-1
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * The file indirect table in the mips loader is known as an array of FITs.
Packit bbfece
 * This is done to keep the code in the loader readable in the area where
Packit bbfece
 * these tables are merged.  Note this is only a name change.
Packit bbfece
 */
Packit bbfece
typedef long FIT, *pFIT;
Packit bbfece
#define cbFIT	sizeof(FIT)
Packit bbfece
#define ifiNil	-1
Packit bbfece
#define fiNil	((pFIT) 0)
Packit bbfece
Packit bbfece
#ifdef _LANGUAGE_PASCAL
Packit bbfece
#define ifdNil -1
Packit bbfece
#define ilnNil -1
Packit bbfece
#define ipdNil -1
Packit bbfece
#define ilineNil -1
Packit bbfece
#define isymNil -1
Packit bbfece
#define indexNil 16#fffff
Packit bbfece
#define issNil -1
Packit bbfece
#define issNull 0
Packit bbfece
#define itqMax 6
Packit bbfece
#define iauxNil -1
Packit bbfece
#define ioptNil -1
Packit bbfece
#define rfdNil -1
Packit bbfece
#define ifiNil -1
Packit bbfece
#endif	/* _LANGUAGE_PASCAL */
Packit bbfece
Packit bbfece
Packit bbfece
/* Dense numbers
Packit bbfece
 *
Packit bbfece
 * Rather than use file index, symbol index pairs to represent symbols
Packit bbfece
 *	and globals, we use dense number so that they can be easily embeded
Packit bbfece
 *	in intermediate code and the programs that process them can
Packit bbfece
 *	use direct access tabls instead of hash table (which would be
Packit bbfece
 *	necesary otherwise because of the sparse name space caused by
Packit bbfece
 *	file index, symbol index pairs. Dense number are represented
Packit bbfece
 *	by RNDXRs.
Packit bbfece
 */
Packit bbfece
Packit bbfece
/*
Packit bbfece
 * The following table defines the meaning of each SYM field as
Packit bbfece
 * a function of the "st". (scD/B == scData OR scBss)
Packit bbfece
 *
Packit bbfece
 * Note: the value "isymMac" is used by symbols that have the concept
Packit bbfece
 * of enclosing a block of related information.	 This value is the
Packit bbfece
 * isym of the first symbol AFTER the end associated with the primary
Packit bbfece
 * symbol. For example if a procedure was at isym==90 and had an
Packit bbfece
 * isymMac==155, the associated end would be at isym==154, and the
Packit bbfece
 * symbol at 155 would probably (although not necessarily) be the
Packit bbfece
 * symbol for the next procedure.  This allows rapid skipping over
Packit bbfece
 * internal information of various sorts. "stEnd"s ALWAYS have the
Packit bbfece
 * isym of the primary symbol that started the block.
Packit bbfece
 * 
Packit bbfece
Packit bbfece
ST		SC	VALUE		INDEX
Packit bbfece
--------	------	--------	------
Packit bbfece
stFile		scText	address		isymMac
Packit bbfece
stLabel		scText	address		---
Packit bbfece
stGlobal	scD/B	address		iaux
Packit bbfece
stStatic	scD/B	address		iaux
Packit bbfece
stParam		scAbs	offset		iaux
Packit bbfece
stLocal		scAbs	offset		iaux
Packit bbfece
stProc		scText	address		iaux	(isymMac is first AUX)
Packit bbfece
stStaticProc	scText	address		iaux	(isymMac is first AUX)
Packit bbfece
Packit bbfece
stMember	scNil	ordinal		---	(if member of enum)
Packit bbfece
	(mipsread thinks the case below has a bit, not byte, offset.)
Packit bbfece
stMember	scNil	byte offset	iaux	(if member of struct/union)
Packit bbfece
stMember	scBits	bit offset	iaux	(bit field spec)
Packit bbfece
Packit bbfece
stBlock		scText	address		isymMac (text block)
Packit bbfece
	(the code seems to think that rather than scNil, we see scInfo for
Packit bbfece
	 the two cases below.)
Packit bbfece
stBlock		scNil	cb		isymMac (struct/union member define)
Packit bbfece
stBlock		scNil	cMembers	isymMac (enum member define)
Packit bbfece
Packit bbfece
	(New types added by SGI to simplify things:)
Packit bbfece
stStruct	scInfo	cb		isymMac (struct type define)
Packit bbfece
stUnion		scInfo	cb		isymMac (union  type define)
Packit bbfece
stEnum		scInfo	cMembers	isymMac (enum   type define)
Packit bbfece
Packit bbfece
stEnd		scText	address		isymStart
Packit bbfece
stEnd		scNil	-------		isymStart (struct/union/enum)
Packit bbfece
Packit bbfece
stTypedef	scNil	-------		iaux
Packit bbfece
stRegReloc	sc???	value		old register number
Packit bbfece
stForward	sc???	new address	isym to original symbol
Packit bbfece
Packit bbfece
stConstant	scInfo	value		--- (scalar)
Packit bbfece
stConstant	scInfo	iss		--- (complex, e.g. string)
Packit bbfece
Packit bbfece
 *
Packit bbfece
 */
Packit bbfece
#endif