133965Sjdp/* Declarations of internal format of MIPS ECOFF symbols.
233965Sjdp   Originally contributed by MIPS Computer Systems and Third Eye Software.
333965Sjdp   Changes contributed by Cygnus Support are in the public domain.
433965Sjdp
533965Sjdp   This file is just aggregated with the files that make up the GNU
633965Sjdp   release; it is not considered part of GAS, GDB, or other GNU
733965Sjdp   programs.  */
833965Sjdp
933965Sjdp/*
1033965Sjdp * |-----------------------------------------------------------|
1133965Sjdp * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
1233965Sjdp * | MIPS Computer Systems, Inc. grants reproduction and use   |
1333965Sjdp * | rights to all parties, PROVIDED that this comment is      |
1433965Sjdp * | maintained in the copy.                                   |
1533965Sjdp * |-----------------------------------------------------------|
1633965Sjdp */
1733965Sjdp#ifndef _SYM_H
1833965Sjdp#define _SYM_H
1933965Sjdp
2033965Sjdp/* (C) Copyright 1984 by Third Eye Software, Inc.
2133965Sjdp *
2233965Sjdp * Third Eye Software, Inc. grants reproduction and use rights to
2333965Sjdp * all parties, PROVIDED that this comment is maintained in the copy.
2433965Sjdp *
2533965Sjdp * Third Eye makes no claims about the applicability of this
2633965Sjdp * symbol table to a particular use.
2733965Sjdp */
2833965Sjdp
2933965Sjdp/*
3033965Sjdp * This file contains the definition of the Third Eye Symbol Table.
3133965Sjdp *
3233965Sjdp * Symbols are assumed to be in 'encounter order' - i.e. the order that
3333965Sjdp * the things they represent were encountered by the compiler/assembler/loader.
3433965Sjdp * EXCEPT for globals!	These are assumed to be bunched together,
3533965Sjdp * probably right after the last 'normal' symbol.  Globals ARE sorted
3633965Sjdp * in ascending order.
3733965Sjdp *
3833965Sjdp * -----------------------------------------------------------------------
3933965Sjdp * A brief word about Third Eye naming/use conventions:
4033965Sjdp *
4133965Sjdp * All arrays and index's are 0 based.
4233965Sjdp * All "ifooMax" values are the highest legal value PLUS ONE. This makes
4333965Sjdp * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
4433965Sjdp *
4533965Sjdp * "isym"	Index into the SYMbol table.
4633965Sjdp * "ipd"	Index into the Procedure Descriptor array.
4733965Sjdp * "ifd"	Index into the File Descriptor array.
4833965Sjdp * "iss"	Index into String Space.
4933965Sjdp * "cb"		Count of Bytes.
5033965Sjdp * "rgPd"	array whose domain is "0..ipdMax-1" and RanGe is PDR.
5133965Sjdp * "rgFd"	array whose domain is "0..ifdMax-1" and RanGe is FDR.
5233965Sjdp */
5333965Sjdp
5433965Sjdp
5533965Sjdp/*
5633965Sjdp * Symbolic Header (HDR) structure.
5733965Sjdp * As long as all the pointers are set correctly,
5833965Sjdp * we don't care WHAT order the various sections come out in!
5933965Sjdp *
6033965Sjdp * A file produced solely for the use of CDB will probably NOT have
6133965Sjdp * any instructions or data areas in it, as these are available
6233965Sjdp * in the original.
6333965Sjdp */
6433965Sjdp
6533965Sjdptypedef struct {
6633965Sjdp	short	magic;		/* to verify validity of the table */
6733965Sjdp	short	vstamp;		/* version stamp */
6833965Sjdp	long	ilineMax;	/* number of line number entries */
6933965Sjdp	bfd_vma	cbLine;		/* number of bytes for line number entries */
7033965Sjdp	bfd_vma	cbLineOffset;	/* offset to start of line number entries*/
7133965Sjdp	long	idnMax;		/* max index into dense number table */
7233965Sjdp	bfd_vma	cbDnOffset;	/* offset to start dense number table */
7333965Sjdp	long	ipdMax;		/* number of procedures */
7433965Sjdp	bfd_vma	cbPdOffset;	/* offset to procedure descriptor table */
7533965Sjdp	long	isymMax;	/* number of local symbols */
7633965Sjdp	bfd_vma	cbSymOffset;	/* offset to start of local symbols*/
7733965Sjdp	long	ioptMax;	/* max index into optimization symbol entries */
7833965Sjdp	bfd_vma	cbOptOffset;	/* offset to optimization symbol entries */
7933965Sjdp	long	iauxMax;	/* number of auxillary symbol entries */
8033965Sjdp	bfd_vma	cbAuxOffset;	/* offset to start of auxillary symbol entries*/
8133965Sjdp	long	issMax;		/* max index into local strings */
8233965Sjdp	bfd_vma	cbSsOffset;	/* offset to start of local strings */
8333965Sjdp	long	issExtMax;	/* max index into external strings */
8433965Sjdp	bfd_vma	cbSsExtOffset;	/* offset to start of external strings */
8533965Sjdp	long	ifdMax;		/* number of file descriptor entries */
8633965Sjdp	bfd_vma	cbFdOffset;	/* offset to file descriptor table */
8733965Sjdp	long	crfd;		/* number of relative file descriptor entries */
8833965Sjdp	bfd_vma	cbRfdOffset;	/* offset to relative file descriptor table */
8933965Sjdp	long	iextMax;	/* max index into external symbols */
9033965Sjdp	bfd_vma	cbExtOffset;	/* offset to start of external symbol entries*/
9133965Sjdp	/* If you add machine dependent fields, add them here */
9233965Sjdp	} HDRR, *pHDRR;
9333965Sjdp#define cbHDRR sizeof(HDRR)
9433965Sjdp#define hdrNil ((pHDRR)0)
9533965Sjdp
9633965Sjdp/*
9733965Sjdp * The FDR and PDR structures speed mapping of address <-> name.
9833965Sjdp * They are sorted in ascending memory order and are kept in
9933965Sjdp * memory by CDB at runtime.
10033965Sjdp */
10133965Sjdp
10233965Sjdp/*
10333965Sjdp * File Descriptor
10433965Sjdp *
10533965Sjdp * There is one of these for EVERY FILE, whether compiled with
10633965Sjdp * full debugging symbols or not.  The name of a file should be
10733965Sjdp * the path name given to the compiler.	 This allows the user
10833965Sjdp * to simply specify the names of the directories where the COMPILES
10933965Sjdp * were done, and we will be able to find their files.
11033965Sjdp * A field whose comment starts with "R - " indicates that it will be
11133965Sjdp * setup at runtime.
11233965Sjdp */
11333965Sjdptypedef struct fdr {
11433965Sjdp	bfd_vma	adr;		/* memory address of beginning of file */
11533965Sjdp	long	rss;		/* file name (of source, if known) */
11633965Sjdp	long	issBase;	/* file's string space */
11733965Sjdp	bfd_vma	cbSs;		/* number of bytes in the ss */
11833965Sjdp	long	isymBase;	/* beginning of symbols */
11933965Sjdp	long	csym;		/* count file's of symbols */
12033965Sjdp	long	ilineBase;	/* file's line symbols */
12133965Sjdp	long	cline;		/* count of file's line symbols */
12233965Sjdp	long	ioptBase;	/* file's optimization entries */
12333965Sjdp	long	copt;		/* count of file's optimization entries */
12433965Sjdp	unsigned short ipdFirst;/* start of procedures for this file */
12533965Sjdp	short	cpd;		/* count of procedures for this file */
12633965Sjdp	long	iauxBase;	/* file's auxiliary entries */
12733965Sjdp	long	caux;		/* count of file's auxiliary entries */
12833965Sjdp	long	rfdBase;	/* index into the file indirect table */
12933965Sjdp	long	crfd;		/* count file indirect entries */
13033965Sjdp	unsigned lang: 5;	/* language for this file */
13133965Sjdp	unsigned fMerge : 1;	/* whether this file can be merged */
13233965Sjdp	unsigned fReadin : 1;	/* true if it was read in (not just created) */
13333965Sjdp	unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
13433965Sjdp				/*	aux's will be in compile host's sex */
13533965Sjdp	unsigned glevel : 2;	/* level this file was compiled with */
13633965Sjdp	unsigned reserved : 22;  /* reserved for future use */
13733965Sjdp	bfd_vma	cbLineOffset;	/* byte offset from header for this file ln's */
13833965Sjdp	bfd_vma	cbLine;		/* size of lines for this file */
13933965Sjdp	} FDR, *pFDR;
14033965Sjdp#define cbFDR sizeof(FDR)
14133965Sjdp#define fdNil ((pFDR)0)
14233965Sjdp#define ifdNil -1
14333965Sjdp#define ifdTemp 0
14433965Sjdp#define ilnNil -1
14533965Sjdp
14633965Sjdp
14733965Sjdp/*
14833965Sjdp * Procedure Descriptor
14933965Sjdp *
15033965Sjdp * There is one of these for EVERY TEXT LABEL.
15133965Sjdp * If a procedure is in a file with full symbols, then isym
15233965Sjdp * will point to the PROC symbols, else it will point to the
15333965Sjdp * global symbol for the label.
15433965Sjdp */
15533965Sjdp
15633965Sjdptypedef struct pdr {
15733965Sjdp	bfd_vma	adr;		/* memory address of start of procedure */
15833965Sjdp	long	isym;		/* start of local symbol entries */
15933965Sjdp	long	iline;		/* start of line number entries*/
16033965Sjdp	long	regmask;	/* save register mask */
16133965Sjdp	long	regoffset;	/* save register offset */
16233965Sjdp	long	iopt;		/* start of optimization symbol entries*/
16333965Sjdp	long	fregmask;	/* save floating point register mask */
16433965Sjdp	long	fregoffset;	/* save floating point register offset */
16533965Sjdp	long	frameoffset;	/* frame size */
16633965Sjdp	short	framereg;	/* frame pointer register */
16733965Sjdp	short	pcreg;		/* offset or reg of return pc */
16833965Sjdp	long	lnLow;		/* lowest line in the procedure */
16933965Sjdp	long	lnHigh;		/* highest line in the procedure */
17033965Sjdp	bfd_vma	cbLineOffset;	/* byte offset for this procedure from the fd base */
17133965Sjdp	/* These fields are new for 64 bit ECOFF.  */
17233965Sjdp	unsigned gp_prologue : 8; /* byte size of GP prologue */
17333965Sjdp	unsigned gp_used : 1;	/* true if the procedure uses GP */
17433965Sjdp	unsigned reg_frame : 1;	/* true if register frame procedure */
17533965Sjdp	unsigned prof : 1;	/* true if compiled with -pg */
17633965Sjdp	unsigned reserved : 13;	/* reserved: must be zero */
17733965Sjdp	unsigned localoff : 8;	/* offset of local variables from vfp */
17833965Sjdp	} PDR, *pPDR;
17933965Sjdp#define cbPDR sizeof(PDR)
18033965Sjdp#define pdNil ((pPDR) 0)
18133965Sjdp#define ipdNil	-1
18233965Sjdp
18333965Sjdp/*
18433965Sjdp * The structure of the runtime procedure descriptor created by the loader
18533965Sjdp * for use by the static exception system.
18633965Sjdp */
18733965Sjdp/*
18833965Sjdp * If 0'd out because exception_info chokes Visual C++ and because there
18933965Sjdp * don't seem to be any references to this structure elsewhere in gdb.
19033965Sjdp */
19133965Sjdp#if 0
19233965Sjdptypedef struct runtime_pdr {
19333965Sjdp	bfd_vma	adr;		/* memory address of start of procedure */
19433965Sjdp	long	regmask;	/* save register mask */
19533965Sjdp	long	regoffset;	/* save register offset */
19633965Sjdp	long	fregmask;	/* save floating point register mask */
19733965Sjdp	long	fregoffset;	/* save floating point register offset */
19833965Sjdp	long	frameoffset;	/* frame size */
19933965Sjdp	short	framereg;	/* frame pointer register */
20033965Sjdp	short	pcreg;		/* offset or reg of return pc */
20133965Sjdp	long	irpss;		/* index into the runtime string table */
20233965Sjdp	long	reserved;
20333965Sjdp	struct exception_info *exception_info;/* pointer to exception array */
20433965Sjdp} RPDR, *pRPDR;
20533965Sjdp#define cbRPDR sizeof(RPDR)
20633965Sjdp#define rpdNil ((pRPDR) 0)
20733965Sjdp#endif
20833965Sjdp
20933965Sjdp/*
21033965Sjdp * Line Numbers
21133965Sjdp *
21233965Sjdp * Line Numbers are segregated from the normal symbols because they
21333965Sjdp * are [1] smaller , [2] are of no interest to your
21433965Sjdp * average loader, and [3] are never needed in the middle of normal
21533965Sjdp * scanning and therefore slow things down.
21633965Sjdp *
21733965Sjdp * By definition, the first LINER for any given procedure will have
21833965Sjdp * the first line of a procedure and represent the first address.
21933965Sjdp */
22033965Sjdp
22133965Sjdptypedef	long LINER, *pLINER;
22233965Sjdp#define lineNil ((pLINER)0)
22333965Sjdp#define cbLINER sizeof(LINER)
22433965Sjdp#define ilineNil	-1
22533965Sjdp
22633965Sjdp
22733965Sjdp
22833965Sjdp/*
22933965Sjdp * The Symbol Structure		(GFW, to those who Know!)
23033965Sjdp */
23133965Sjdp
23233965Sjdptypedef struct {
23333965Sjdp	long	iss;		/* index into String Space of name */
23433965Sjdp	bfd_vma	value;		/* value of symbol */
23533965Sjdp	unsigned st : 6;	/* symbol type */
23633965Sjdp	unsigned sc  : 5;	/* storage class - text, data, etc */
23733965Sjdp	unsigned reserved : 1;	/* reserved */
23833965Sjdp	unsigned index : 20;	/* index into sym/aux table */
23933965Sjdp	} SYMR, *pSYMR;
24033965Sjdp#define symNil ((pSYMR)0)
24133965Sjdp#define cbSYMR sizeof(SYMR)
24233965Sjdp#define isymNil -1
24333965Sjdp#define indexNil 0xfffff
24433965Sjdp#define issNil -1
24533965Sjdp#define issNull 0
24633965Sjdp
24733965Sjdp
24833965Sjdp/* The following converts a memory resident string to an iss.
24933965Sjdp * This hack is recognized in SbFIss, in sym.c of the debugger.
25033965Sjdp */
25133965Sjdp#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
25233965Sjdp
25333965Sjdp/* E X T E R N A L   S Y M B O L  R E C O R D
25433965Sjdp *
25533965Sjdp *	Same as the SYMR except it contains file context to determine where
25633965Sjdp *	the index is.
25733965Sjdp */
25833965Sjdptypedef struct ecoff_extr {
25933965Sjdp	unsigned jmptbl:1;	/* symbol is a jump table entry for shlibs */
26033965Sjdp	unsigned cobol_main:1;	/* symbol is a cobol main procedure */
26133965Sjdp	unsigned weakext:1;	/* symbol is weak external */
26233965Sjdp	unsigned reserved:13;	/* reserved for future use */
26333965Sjdp	int	ifd;		/* where the iss and index fields point into */
26433965Sjdp	SYMR	asym;		/* symbol for the external */
26533965Sjdp	} EXTR, *pEXTR;
26633965Sjdp#define extNil ((pEXTR)0)
26733965Sjdp#define cbEXTR sizeof(EXTR)
26833965Sjdp
26933965Sjdp
27033965Sjdp/* A U X I L L A R Y   T Y P E	 I N F O R M A T I O N */
27133965Sjdp
27233965Sjdp/*
27333965Sjdp * Type Information Record
27433965Sjdp */
27533965Sjdptypedef struct {
27633965Sjdp	unsigned fBitfield : 1; /* set if bit width is specified */
27733965Sjdp	unsigned continued : 1; /* indicates additional TQ info in next AUX */
27833965Sjdp	unsigned bt  : 6;	/* basic type */
27933965Sjdp	unsigned tq4 : 4;
28033965Sjdp	unsigned tq5 : 4;
28133965Sjdp	/* ---- 16 bit boundary ---- */
28233965Sjdp	unsigned tq0 : 4;
28333965Sjdp	unsigned tq1 : 4;	/* 6 type qualifiers - tqPtr, etc. */
28433965Sjdp	unsigned tq2 : 4;
28533965Sjdp	unsigned tq3 : 4;
28633965Sjdp	} TIR, *pTIR;
28733965Sjdp#define cbTIR sizeof(TIR)
28833965Sjdp#define tiNil ((pTIR)0)
28933965Sjdp#define itqMax 6
29033965Sjdp
29133965Sjdp/*
29233965Sjdp * Relative symbol record
29333965Sjdp *
29433965Sjdp * If the rfd field is 4095, the index field indexes into the global symbol
29533965Sjdp *	table.
29633965Sjdp */
29733965Sjdp
29833965Sjdptypedef struct {
29933965Sjdp	unsigned	rfd : 12;    /* index into the file indirect table */
30033965Sjdp	unsigned	index : 20; /* index int sym/aux/iss tables */
30133965Sjdp	} RNDXR, *pRNDXR;
30233965Sjdp#define cbRNDXR sizeof(RNDXR)
30333965Sjdp#define rndxNil ((pRNDXR)0)
30433965Sjdp
30533965Sjdp/* dense numbers or sometimes called block numbers are stored in this type,
30633965Sjdp *	a rfd of 0xffffffff is an index into the global table.
30733965Sjdp */
30833965Sjdptypedef struct {
30933965Sjdp	unsigned long	rfd;    /* index into the file table */
31033965Sjdp	unsigned long	index; 	/* index int sym/aux/iss tables */
31133965Sjdp	} DNR, *pDNR;
31233965Sjdp#define cbDNR sizeof(DNR)
31333965Sjdp#define dnNil ((pDNR)0)
31433965Sjdp
31533965Sjdp
31633965Sjdp
31733965Sjdp/*
31833965Sjdp * Auxillary information occurs only if needed.
31933965Sjdp * It ALWAYS occurs in this order when present.
32033965Sjdp
32133965Sjdp	    isymMac		used by stProc only
32233965Sjdp	    TIR			type info
32333965Sjdp	    TIR			additional TQ info (if first TIR was not enough)
32433965Sjdp	    rndx		if (bt == btStruct,btUnion,btEnum,btSet,btRange,
32533965Sjdp				    btTypedef):
32633965Sjdp				    rsym.index == iaux for btSet or btRange
32733965Sjdp				    else rsym.index == isym
32833965Sjdp	    dimLow		btRange, btSet
32933965Sjdp	    dimMac		btRange, btSet
33033965Sjdp	    rndx0		As many as there are tq arrays
33133965Sjdp	    dimLow0
33233965Sjdp	    dimHigh0
33333965Sjdp	    ...
33433965Sjdp	    rndxMax-1
33533965Sjdp	    dimLowMax-1
33633965Sjdp	    dimHighMax-1
33733965Sjdp	    width in bits	if (bit field), width in bits.
33833965Sjdp */
33933965Sjdp#define cAuxMax (6 + (idimMax*3))
34033965Sjdp
34133965Sjdp/* a union of all possible info in the AUX universe */
34233965Sjdptypedef union {
34333965Sjdp	TIR	ti;		/* type information record */
34433965Sjdp	RNDXR	rndx;		/* relative index into symbol table */
34533965Sjdp	long	dnLow;		/* low dimension */
34633965Sjdp	long	dnHigh;		/* high dimension */
34733965Sjdp	long	isym;		/* symbol table index (end of proc) */
34833965Sjdp	long	iss;		/* index into string space (not used) */
34933965Sjdp	long	width;		/* width for non-default sized struc fields */
35033965Sjdp	long	count;		/* count of ranges for variant arm */
35133965Sjdp	} AUXU, *pAUXU;
35233965Sjdp#define cbAUXU sizeof(AUXU)
35333965Sjdp#define auxNil ((pAUXU)0)
35433965Sjdp#define iauxNil -1
35533965Sjdp
35633965Sjdp
35733965Sjdp/*
35833965Sjdp * Optimization symbols
35933965Sjdp *
36033965Sjdp * Optimization symbols contain some overlap information with the normal
36133965Sjdp * symbol table. In particular, the proc information
36233965Sjdp * is somewhat redundant but necessary to easily find the other information
36333965Sjdp * present.
36433965Sjdp *
36533965Sjdp * All of the offsets are relative to the beginning of the last otProc
36633965Sjdp */
36733965Sjdp
36833965Sjdptypedef struct {
36933965Sjdp	unsigned ot: 8;		/* optimization type */
37033965Sjdp	unsigned value: 24;	/* address where we are moving it to */
37133965Sjdp	RNDXR	rndx;		/* points to a symbol or opt entry */
37233965Sjdp	unsigned long	offset;	/* relative offset this occured */
37333965Sjdp	} OPTR, *pOPTR;
37433965Sjdp#define optNil	((pOPTR) 0)
37533965Sjdp#define cbOPTR sizeof(OPTR)
37633965Sjdp#define ioptNil -1
37733965Sjdp
37833965Sjdp/*
37933965Sjdp * File Indirect
38033965Sjdp *
38133965Sjdp * When a symbol is referenced across files the following procedure is used:
38233965Sjdp *	1) use the file index to get the File indirect entry.
38333965Sjdp *	2) use the file indirect entry to get the File descriptor.
38433965Sjdp *	3) add the sym index to the base of that file's sym table
38533965Sjdp *
38633965Sjdp */
38733965Sjdp
38833965Sjdptypedef long RFDT, *pRFDT;
38933965Sjdp#define cbRFDT sizeof(RFDT)
39033965Sjdp#define rfdNil	-1
39133965Sjdp
39233965Sjdp/*
39333965Sjdp * The file indirect table in the mips loader is known as an array of FITs.
39433965Sjdp * This is done to keep the code in the loader readable in the area where
39533965Sjdp * these tables are merged.  Note this is only a name change.
39633965Sjdp */
39733965Sjdptypedef long FIT, *pFIT;
39833965Sjdp#define cbFIT	sizeof(FIT)
39933965Sjdp#define ifiNil	-1
40033965Sjdp#define fiNil	((pFIT) 0)
40133965Sjdp
40233965Sjdp#ifdef _LANGUAGE_PASCAL
40333965Sjdp#define ifdNil -1
40433965Sjdp#define ilnNil -1
40533965Sjdp#define ipdNil -1
40633965Sjdp#define ilineNil -1
40733965Sjdp#define isymNil -1
40833965Sjdp#define indexNil 16#fffff
40933965Sjdp#define issNil -1
41033965Sjdp#define issNull 0
41133965Sjdp#define itqMax 6
41233965Sjdp#define iauxNil -1
41333965Sjdp#define ioptNil -1
41433965Sjdp#define rfdNil -1
41533965Sjdp#define ifiNil -1
41633965Sjdp#endif	/* _LANGUAGE_PASCAL */
41733965Sjdp
41833965Sjdp
41933965Sjdp/* Dense numbers
42033965Sjdp *
42133965Sjdp * Rather than use file index, symbol index pairs to represent symbols
42233965Sjdp *	and globals, we use dense number so that they can be easily embeded
42333965Sjdp *	in intermediate code and the programs that process them can
42433965Sjdp *	use direct access tabls instead of hash table (which would be
42533965Sjdp *	necesary otherwise because of the sparse name space caused by
42633965Sjdp *	file index, symbol index pairs. Dense number are represented
42733965Sjdp *	by RNDXRs.
42833965Sjdp */
42933965Sjdp
43033965Sjdp/*
43133965Sjdp * The following table defines the meaning of each SYM field as
43233965Sjdp * a function of the "st". (scD/B == scData OR scBss)
43333965Sjdp *
43433965Sjdp * Note: the value "isymMac" is used by symbols that have the concept
43533965Sjdp * of enclosing a block of related information.	 This value is the
43633965Sjdp * isym of the first symbol AFTER the end associated with the primary
43733965Sjdp * symbol. For example if a procedure was at isym==90 and had an
43833965Sjdp * isymMac==155, the associated end would be at isym==154, and the
43933965Sjdp * symbol at 155 would probably (although not necessarily) be the
44033965Sjdp * symbol for the next procedure.  This allows rapid skipping over
44133965Sjdp * internal information of various sorts. "stEnd"s ALWAYS have the
44233965Sjdp * isym of the primary symbol that started the block.
44333965Sjdp *
44433965Sjdp
44533965SjdpST		SC	VALUE		INDEX
44633965Sjdp--------	------	--------	------
44733965SjdpstFile		scText	address		isymMac
44833965SjdpstLabel		scText	address		---
44933965SjdpstGlobal	scD/B	address		iaux
45033965SjdpstStatic	scD/B	address		iaux
45133965SjdpstParam		scAbs	offset		iaux
45233965SjdpstLocal		scAbs	offset		iaux
45333965SjdpstProc		scText	address		iaux	(isymMac is first AUX)
45433965SjdpstStaticProc	scText	address		iaux	(isymMac is first AUX)
45533965Sjdp
45633965SjdpstMember	scNil	ordinal		---	(if member of enum)
45733965Sjdp	(mipsread thinks the case below has a bit, not byte, offset.)
45833965SjdpstMember	scNil	byte offset	iaux	(if member of struct/union)
45933965SjdpstMember	scBits	bit offset	iaux	(bit field spec)
46033965Sjdp
46133965SjdpstBlock		scText	address		isymMac (text block)
46233965Sjdp	(the code seems to think that rather than scNil, we see scInfo for
46333965Sjdp	 the two cases below.)
46433965SjdpstBlock		scNil	cb		isymMac (struct/union member define)
46533965SjdpstBlock		scNil	cMembers	isymMac (enum member define)
46633965Sjdp
46733965Sjdp	(New types added by SGI to simplify things:)
46833965SjdpstStruct	scInfo	cb		isymMac (struct type define)
46933965SjdpstUnion		scInfo	cb		isymMac (union  type define)
47033965SjdpstEnum		scInfo	cMembers	isymMac (enum   type define)
47133965Sjdp
47233965SjdpstEnd		scText	address		isymStart
47333965SjdpstEnd		scNil	-------		isymStart (struct/union/enum)
47433965Sjdp
47533965SjdpstTypedef	scNil	-------		iaux
47633965SjdpstRegReloc	sc???	value		old register number
47733965SjdpstForward	sc???	new address	isym to original symbol
47833965Sjdp
47933965SjdpstConstant	scInfo	value		--- (scalar)
48033965SjdpstConstant	scInfo	iss		--- (complex, e.g. string)
48133965Sjdp
48233965Sjdp *
48333965Sjdp */
48433965Sjdp#endif
485