⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sym.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Declarations of internal format of MIPS ECOFF symbols.   Originally contributed by MIPS Computer Systems and Third Eye Software.   Changes contributed by Cygnus Support are in the public domain.  *//* * |-----------------------------------------------------------| * | 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: /local/cvsfiles/devo/include/coff/sym.h,v 1.3 1992/04/14 22:21:15 gnu Exp $ */#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. */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)))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -