source: trunk/tools/dbginfo/sym.h@ 10366

Last change on this file since 10366 was 4130, checked in by bird, 25 years ago

New interface (kHllMain).
Able to spit out symbol files.
Able to read symbol files and the entry table of LX files.

File size: 5.7 KB
Line 
1/* $Id: sym.h,v 1.2 2000-08-31 03:02:28 bird Exp $
2 *
3 * Sym-file definitions and structs.
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 */
8
9#ifndef _sym_h_
10#define _sym_h_
11
12/* Pointer means offset from beginning of file or beginning of struct */
13#pragma pack(1)
14typedef struct
15{
16 unsigned short int ppNextMap; /* paragraph pointer to next map */
17 unsigned char bFlags; /* symbol types */
18 unsigned char bReserved1; /* reserved */
19 unsigned short int pSegEntry; /* segment entry point value */
20 unsigned short int cConsts; /* count of constants in map */
21 unsigned short int pConstDef; /* pointer to constant chain */
22 unsigned short int cSegs; /* count of segments in map */
23 unsigned short int ppSegDef; /* paragraph pointer to first segment */
24 unsigned char cbMaxSym; /* maximum symbol-name length */
25 unsigned char cbModName; /* length of module name */
26 char achModName[1]; /* cbModName Bytes of module-name member */
27} MAPDEF, *PMAPDEF;
28
29typedef struct
30{
31 unsigned short int ppNextMap; /* always zero */
32 unsigned char release; /* release number (minor version number) */
33 unsigned char version; /* major version number */
34} LAST_MAPDEF, *PLAST_MAPDEF;
35
36typedef struct
37{
38 unsigned short int ppNextSeg; /* paragraph pointer to next segment */
39 unsigned short int cSymbols; /* count of symbols in list */
40 unsigned short int pSymDef; /* offset of symbol chain */
41 unsigned short int wSegNum; /* segment number (1 based) */
42 unsigned short int wReserved2; /* reserved */
43 unsigned short int wReserved3; /* reserved */
44 unsigned short int wReserved4; /* reserved */
45 unsigned char bFlags; /* symbol types */
46 unsigned char bReserved1; /* reserved */
47 unsigned short int ppLineDef; /* offset of line number record */
48 unsigned char bReserved2; /* reserved */
49 unsigned char bReserved3; /* reserved (0xff) */
50 unsigned char cbSegName; /* length of segment name */
51 char achSegName[1]; /* cbSegName Bytes of segment-name member*/
52} SEGDEF, *PSEGDEF;
53
54#define SEG_FLAGS_32BIT 0x01 /* 32bit segment is set. 16-bit segment if clear */
55#define SEG32BitSegment(a) (((a).bFlags & 0x01) == SEG_FLAGS_32BIT)
56#define SEG16BitSegment(a) (((a).bFlags & 0x01) == 0)
57
58typedef struct
59{
60 unsigned short int wSymVal; /* symbol address or constant */
61 unsigned char cbSymName; /* length of symbol name */
62 char achSymName[1]; /* cbSymName Bytes of symbol-name member */
63} SYMDEF16, *PSYMDEF16;
64
65typedef struct
66{
67 unsigned long int wSymVal; /* symbol address or constant */
68 unsigned char cbSymName; /* length of symbol name */
69 char achSymName[1]; /* cbSymName Bytes of symbol-name member */
70} SYMDEF32, *PSYMDEF32;
71
72typedef struct
73{
74 unsigned short int ppNextLine; /* ptr to next linedef (0 if last) */
75 unsigned short int wReserved1; /* reserved */
76 unsigned short int pLines; /* pointer to line numbers */
77 unsigned short int cLines; /* reserved */
78 unsigned char cbFileName; /* length of filename */
79 char achFileName[1];/* cbFileName Bytes of filename */
80} LINEDEF, *PLINEDEF;
81
82typedef struct
83{
84 unsigned short int wCodeOffset; /* executable offset */
85 unsigned short int dwFileOffset; /* source offset */
86} LINEINF, *PLINEINF;
87
88
89#define SEGDEFPTR(pvSym, MapDef) \
90 ((PSEGDEF)((char*)(pvSym) + ( (unsigned long)((MAPDEF)(MapDef)).ppSegDef * 16) ) )
91#define NEXTSEGDEFPTR(pvSym, SegDef) \
92 ((PSEGDEF)( ((SEGDEF)(SegDef)).ppNextSeg != 0 ? \
93 (char*)(pvSym) + ( (unsigned long)((SEGDEF)(SegDef)).ppNextSeg * 16) \
94 : NULL \
95 ) \
96 )
97
98#define SEGDEFOFFSET(MapDef) ((unsigned long)MapDef.ppSegDef*16)
99#define NEXTSEGDEFOFFSET(SegDef) ((unsigned long)SegDef.ppNextSeg*16)
100
101
102#define ASYMPTROFFSET(SegDefOffset,Segdef) (SegDefOffset+SegDef.pSymDef)
103#define SYMDEFOFFSET(SegDefOffset,SegDef,n) (ASYMPTROFFSET(SegDefOffset,SegDef)+(n)*(sizeof(unsigned short int)))
104
105#define SYMDEFPTR32(pvSym, pSegDef, iSym) \
106 ((PSYMDEF32) \
107 ((char*)(pSegDef) + \
108 *(unsigned short int *)((char*)(pSegDef) + ((PSEGDEF)(pSegDef))->pSymDef + (((int)(iSym)) * sizeof(unsigned short int))) \
109 ))
110
111
112#define ACONSTPTROFFSET(MapDef) (MapDef.ppConstDef)
113#define CONSTDEFOFFSET(MapDef,n) ((MapDef.ppConstDef)+(n)*(sizeof(unsigned short int)))
114
115#define LINEDEFOFFSET(SegDef) (SegDef.ppLineDef*16))
116#define NEXTLINEDEFOFFSET(LineDef) (LineDef.ppNextLine*16)
117#define LINESOFFSET(LinedefOffset,LineDef) ((LinedefOffset)+LineDef.pLines)
118
119#define NEXTMAPDEFPTR(pvSym, MapDef) \
120 ( (PMAPDEF)( ((MAPDEF)(MapDef)).ppNextMap != 0 ? \
121 (char*)pvSym + ( (unsigned long)((MAPDEF)(MapDef)).ppNextMap * 16) \
122 : NULL \
123 ) \
124 )
125
126#pragma pack()
127#endif
Note: See TracBrowser for help on using the repository browser.