📄 sym.h
字号:
/* 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 + -