OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [include/] [coff/] [sym.h] - Blame information for rev 97

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 khays
/* Declarations of internal format of MIPS ECOFF symbols.
2
   Originally contributed by MIPS Computer Systems and Third Eye Software.
3
   Changes contributed by Cygnus Support are in the public domain.
4
 
5
   This file is just aggregated with the files that make up the GNU
6
   release; it is not considered part of GAS, GDB, or other GNU
7
   programs.  */
8
 
9
/*
10
 * |-----------------------------------------------------------|
11
 * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
12
 * | MIPS Computer Systems, Inc. grants reproduction and use   |
13
 * | rights to all parties, PROVIDED that this comment is      |
14
 * | maintained in the copy.                                   |
15
 * |-----------------------------------------------------------|
16
 */
17
#ifndef _SYM_H
18
#define _SYM_H
19
 
20
/* (C) Copyright 1984 by Third Eye Software, Inc.
21
 *
22
 * Third Eye Software, Inc. grants reproduction and use rights to
23
 * all parties, PROVIDED that this comment is maintained in the copy.
24
 *
25
 * Third Eye makes no claims about the applicability of this
26
 * symbol table to a particular use.
27
 */
28
 
29
/*
30
 * This file contains the definition of the Third Eye Symbol Table.
31
 *
32
 * Symbols are assumed to be in 'encounter order' - i.e. the order that
33
 * the things they represent were encountered by the compiler/assembler/loader.
34
 * EXCEPT for globals!  These are assumed to be bunched together,
35
 * probably right after the last 'normal' symbol.  Globals ARE sorted
36
 * in ascending order.
37
 *
38
 * -----------------------------------------------------------------------
39
 * A brief word about Third Eye naming/use conventions:
40
 *
41
 * All arrays and index's are 0 based.
42
 * All "ifooMax" values are the highest legal value PLUS ONE. This makes
43
 * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
44
 *
45
 * "isym"       Index into the SYMbol table.
46
 * "ipd"        Index into the Procedure Descriptor array.
47
 * "ifd"        Index into the File Descriptor array.
48
 * "iss"        Index into String Space.
49
 * "cb"         Count of Bytes.
50
 * "rgPd"       array whose domain is "0..ipdMax-1" and RanGe is PDR.
51
 * "rgFd"       array whose domain is "0..ifdMax-1" and RanGe is FDR.
52
 */
53
 
54
 
55
/*
56
 * Symbolic Header (HDR) structure.
57
 * As long as all the pointers are set correctly,
58
 * we don't care WHAT order the various sections come out in!
59
 *
60
 * A file produced solely for the use of CDB will probably NOT have
61
 * any instructions or data areas in it, as these are available
62
 * in the original.
63
 */
64
 
65
typedef struct {
66
        short   magic;          /* to verify validity of the table */
67
        short   vstamp;         /* version stamp */
68
        long    ilineMax;       /* number of line number entries */
69
        bfd_vma cbLine;         /* number of bytes for line number entries */
70
        bfd_vma cbLineOffset;   /* offset to start of line number entries*/
71
        long    idnMax;         /* max index into dense number table */
72
        bfd_vma cbDnOffset;     /* offset to start dense number table */
73
        long    ipdMax;         /* number of procedures */
74
        bfd_vma cbPdOffset;     /* offset to procedure descriptor table */
75
        long    isymMax;        /* number of local symbols */
76
        bfd_vma cbSymOffset;    /* offset to start of local symbols*/
77
        long    ioptMax;        /* max index into optimization symbol entries */
78
        bfd_vma cbOptOffset;    /* offset to optimization symbol entries */
79
        long    iauxMax;        /* number of auxillary symbol entries */
80
        bfd_vma cbAuxOffset;    /* offset to start of auxillary symbol entries*/
81
        long    issMax;         /* max index into local strings */
82
        bfd_vma cbSsOffset;     /* offset to start of local strings */
83
        long    issExtMax;      /* max index into external strings */
84
        bfd_vma cbSsExtOffset;  /* offset to start of external strings */
85
        long    ifdMax;         /* number of file descriptor entries */
86
        bfd_vma cbFdOffset;     /* offset to file descriptor table */
87
        long    crfd;           /* number of relative file descriptor entries */
88
        bfd_vma cbRfdOffset;    /* offset to relative file descriptor table */
89
        long    iextMax;        /* max index into external symbols */
90
        bfd_vma cbExtOffset;    /* offset to start of external symbol entries*/
91
        /* If you add machine dependent fields, add them here */
92
        } HDRR, *pHDRR;
93
#define cbHDRR sizeof(HDRR)
94
#define hdrNil ((pHDRR)0)
95
 
96
/*
97
 * The FDR and PDR structures speed mapping of address <-> name.
98
 * They are sorted in ascending memory order and are kept in
99
 * memory by CDB at runtime.
100
 */
101
 
102
/*
103
 * File Descriptor
104
 *
105
 * There is one of these for EVERY FILE, whether compiled with
106
 * full debugging symbols or not.  The name of a file should be
107
 * the path name given to the compiler.  This allows the user
108
 * to simply specify the names of the directories where the COMPILES
109
 * were done, and we will be able to find their files.
110
 * A field whose comment starts with "R - " indicates that it will be
111
 * setup at runtime.
112
 */
113
typedef struct fdr {
114
        bfd_vma adr;            /* memory address of beginning of file */
115
        long    rss;            /* file name (of source, if known) */
116
        long    issBase;        /* file's string space */
117
        bfd_vma cbSs;           /* number of bytes in the ss */
118
        long    isymBase;       /* beginning of symbols */
119
        long    csym;           /* count file's of symbols */
120
        long    ilineBase;      /* file's line symbols */
121
        long    cline;          /* count of file's line symbols */
122
        long    ioptBase;       /* file's optimization entries */
123
        long    copt;           /* count of file's optimization entries */
124
        unsigned short ipdFirst;/* start of procedures for this file */
125
        short   cpd;            /* count of procedures for this file */
126
        long    iauxBase;       /* file's auxiliary entries */
127
        long    caux;           /* count of file's auxiliary entries */
128
        long    rfdBase;        /* index into the file indirect table */
129
        long    crfd;           /* count file indirect entries */
130
        unsigned lang: 5;       /* language for this file */
131
        unsigned fMerge : 1;    /* whether this file can be merged */
132
        unsigned fReadin : 1;   /* true if it was read in (not just created) */
133
        unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
134
                                /*      aux's will be in compile host's sex */
135
        unsigned glevel : 2;    /* level this file was compiled with */
136
        unsigned reserved : 22;  /* reserved for future use */
137
        bfd_vma cbLineOffset;   /* byte offset from header for this file ln's */
138
        bfd_vma cbLine;         /* size of lines for this file */
139
        } FDR, *pFDR;
140
#define cbFDR sizeof(FDR)
141
#define fdNil ((pFDR)0)
142
#define ifdNil -1
143
#define ifdTemp 0
144
#define ilnNil -1
145
 
146
 
147
/*
148
 * Procedure Descriptor
149
 *
150
 * There is one of these for EVERY TEXT LABEL.
151
 * If a procedure is in a file with full symbols, then isym
152
 * will point to the PROC symbols, else it will point to the
153
 * global symbol for the label.
154
 */
155
 
156
typedef struct pdr {
157
        bfd_vma adr;            /* memory address of start of procedure */
158
        long    isym;           /* start of local symbol entries */
159
        long    iline;          /* start of line number entries*/
160
        long    regmask;        /* save register mask */
161
        long    regoffset;      /* save register offset */
162
        long    iopt;           /* start of optimization symbol entries*/
163
        long    fregmask;       /* save floating point register mask */
164
        long    fregoffset;     /* save floating point register offset */
165
        long    frameoffset;    /* frame size */
166
        short   framereg;       /* frame pointer register */
167
        short   pcreg;          /* offset or reg of return pc */
168
        long    lnLow;          /* lowest line in the procedure */
169
        long    lnHigh;         /* highest line in the procedure */
170
        bfd_vma cbLineOffset;   /* byte offset for this procedure from the fd base */
171
        /* These fields are new for 64 bit ECOFF.  */
172
        unsigned gp_prologue : 8; /* byte size of GP prologue */
173
        unsigned gp_used : 1;   /* true if the procedure uses GP */
174
        unsigned reg_frame : 1; /* true if register frame procedure */
175
        unsigned prof : 1;      /* true if compiled with -pg */
176
        unsigned reserved : 13; /* reserved: must be zero */
177
        unsigned localoff : 8;  /* offset of local variables from vfp */
178
        } PDR, *pPDR;
179
#define cbPDR sizeof(PDR)
180
#define pdNil ((pPDR) 0)
181
#define ipdNil  -1
182
 
183
/*
184
 * The structure of the runtime procedure descriptor created by the loader
185
 * for use by the static exception system.
186
 */
187
/*
188
 * If 0'd out because exception_info chokes Visual C++ and because there
189
 * don't seem to be any references to this structure elsewhere in gdb.
190
 */
191
#if 0
192
typedef struct runtime_pdr {
193
        bfd_vma adr;            /* memory address of start of procedure */
194
        long    regmask;        /* save register mask */
195
        long    regoffset;      /* save register offset */
196
        long    fregmask;       /* save floating point register mask */
197
        long    fregoffset;     /* save floating point register offset */
198
        long    frameoffset;    /* frame size */
199
        short   framereg;       /* frame pointer register */
200
        short   pcreg;          /* offset or reg of return pc */
201
        long    irpss;          /* index into the runtime string table */
202
        long    reserved;
203
        struct exception_info *exception_info;/* pointer to exception array */
204
} RPDR, *pRPDR;
205
#define cbRPDR sizeof(RPDR)
206
#define rpdNil ((pRPDR) 0)
207
#endif
208
 
209
/*
210
 * Line Numbers
211
 *
212
 * Line Numbers are segregated from the normal symbols because they
213
 * are [1] smaller , [2] are of no interest to your
214
 * average loader, and [3] are never needed in the middle of normal
215
 * scanning and therefore slow things down.
216
 *
217
 * By definition, the first LINER for any given procedure will have
218
 * the first line of a procedure and represent the first address.
219
 */
220
 
221
typedef long LINER, *pLINER;
222
#define lineNil ((pLINER)0)
223
#define cbLINER sizeof(LINER)
224
#define ilineNil        -1
225
 
226
 
227
 
228
/*
229
 * The Symbol Structure         (GFW, to those who Know!)
230
 */
231
 
232
typedef struct {
233
        long    iss;            /* index into String Space of name */
234
        bfd_vma value;          /* value of symbol */
235
        unsigned st : 6;        /* symbol type */
236
        unsigned sc  : 5;       /* storage class - text, data, etc */
237
        unsigned reserved : 1;  /* reserved */
238
        unsigned index : 20;    /* index into sym/aux table */
239
        } SYMR, *pSYMR;
240
#define symNil ((pSYMR)0)
241
#define cbSYMR sizeof(SYMR)
242
#define isymNil -1
243
#define indexNil 0xfffff
244
#define issNil -1
245
#define issNull 0
246
 
247
 
248
/* The following converts a memory resident string to an iss.
249
 * This hack is recognized in SbFIss, in sym.c of the debugger.
250
 */
251
#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
252
 
253
/* E X T E R N A L   S Y M B O L  R E C O R D
254
 *
255
 *      Same as the SYMR except it contains file context to determine where
256
 *      the index is.
257
 */
258
typedef struct ecoff_extr {
259
        unsigned jmptbl:1;      /* symbol is a jump table entry for shlibs */
260
        unsigned cobol_main:1;  /* symbol is a cobol main procedure */
261
        unsigned weakext:1;     /* symbol is weak external */
262
        unsigned reserved:13;   /* reserved for future use */
263
        int     ifd;            /* where the iss and index fields point into */
264
        SYMR    asym;           /* symbol for the external */
265
        } EXTR, *pEXTR;
266
#define extNil ((pEXTR)0)
267
#define cbEXTR sizeof(EXTR)
268
 
269
 
270
/* A U X I L L A R Y   T Y P E   I N F O R M A T I O N */
271
 
272
/*
273
 * Type Information Record
274
 */
275
typedef struct {
276
        unsigned fBitfield : 1; /* set if bit width is specified */
277
        unsigned continued : 1; /* indicates additional TQ info in next AUX */
278
        unsigned bt  : 6;       /* basic type */
279
        unsigned tq4 : 4;
280
        unsigned tq5 : 4;
281
        /* ---- 16 bit boundary ---- */
282
        unsigned tq0 : 4;
283
        unsigned tq1 : 4;       /* 6 type qualifiers - tqPtr, etc. */
284
        unsigned tq2 : 4;
285
        unsigned tq3 : 4;
286
        } TIR, *pTIR;
287
#define cbTIR sizeof(TIR)
288
#define tiNil ((pTIR)0)
289
#define itqMax 6
290
 
291
/*
292
 * Relative symbol record
293
 *
294
 * If the rfd field is 4095, the index field indexes into the global symbol
295
 *      table.
296
 */
297
 
298
typedef struct {
299
        unsigned        rfd : 12;    /* index into the file indirect table */
300
        unsigned        index : 20; /* index int sym/aux/iss tables */
301
        } RNDXR, *pRNDXR;
302
#define cbRNDXR sizeof(RNDXR)
303
#define rndxNil ((pRNDXR)0)
304
 
305
/* dense numbers or sometimes called block numbers are stored in this type,
306
 *      a rfd of 0xffffffff is an index into the global table.
307
 */
308
typedef struct {
309
        unsigned long   rfd;    /* index into the file table */
310
        unsigned long   index;  /* index int sym/aux/iss tables */
311
        } DNR, *pDNR;
312
#define cbDNR sizeof(DNR)
313
#define dnNil ((pDNR)0)
314
 
315
 
316
 
317
/*
318
 * Auxillary information occurs only if needed.
319
 * It ALWAYS occurs in this order when present.
320
 
321
            isymMac             used by stProc only
322
            TIR                 type info
323
            TIR                 additional TQ info (if first TIR was not enough)
324
            rndx                if (bt == btStruct,btUnion,btEnum,btSet,btRange,
325
                                    btTypedef):
326
                                    rsym.index == iaux for btSet or btRange
327
                                    else rsym.index == isym
328
            dimLow              btRange, btSet
329
            dimMac              btRange, btSet
330
            rndx0               As many as there are tq arrays
331
            dimLow0
332
            dimHigh0
333
            ...
334
            rndxMax-1
335
            dimLowMax-1
336
            dimHighMax-1
337
            width in bits       if (bit field), width in bits.
338
 */
339
#define cAuxMax (6 + (idimMax*3))
340
 
341
/* a union of all possible info in the AUX universe */
342
typedef union {
343
        TIR     ti;             /* type information record */
344
        RNDXR   rndx;           /* relative index into symbol table */
345
        long    dnLow;          /* low dimension */
346
        long    dnHigh;         /* high dimension */
347
        long    isym;           /* symbol table index (end of proc) */
348
        long    iss;            /* index into string space (not used) */
349
        long    width;          /* width for non-default sized struc fields */
350
        long    count;          /* count of ranges for variant arm */
351
        } AUXU, *pAUXU;
352
#define cbAUXU sizeof(AUXU)
353
#define auxNil ((pAUXU)0)
354
#define iauxNil -1
355
 
356
 
357
/*
358
 * Optimization symbols
359
 *
360
 * Optimization symbols contain some overlap information with the normal
361
 * symbol table. In particular, the proc information
362
 * is somewhat redundant but necessary to easily find the other information
363
 * present.
364
 *
365
 * All of the offsets are relative to the beginning of the last otProc
366
 */
367
 
368
typedef struct {
369
        unsigned ot: 8;         /* optimization type */
370
        unsigned value: 24;     /* address where we are moving it to */
371
        RNDXR   rndx;           /* points to a symbol or opt entry */
372
        unsigned long   offset; /* relative offset this occured */
373
        } OPTR, *pOPTR;
374
#define optNil  ((pOPTR) 0)
375
#define cbOPTR sizeof(OPTR)
376
#define ioptNil -1
377
 
378
/*
379
 * File Indirect
380
 *
381
 * When a symbol is referenced across files the following procedure is used:
382
 *      1) use the file index to get the File indirect entry.
383
 *      2) use the file indirect entry to get the File descriptor.
384
 *      3) add the sym index to the base of that file's sym table
385
 *
386
 */
387
 
388
typedef long RFDT, *pRFDT;
389
#define cbRFDT sizeof(RFDT)
390
#define rfdNil  -1
391
 
392
/*
393
 * The file indirect table in the mips loader is known as an array of FITs.
394
 * This is done to keep the code in the loader readable in the area where
395
 * these tables are merged.  Note this is only a name change.
396
 */
397
typedef long FIT, *pFIT;
398
#define cbFIT   sizeof(FIT)
399
#define ifiNil  -1
400
#define fiNil   ((pFIT) 0)
401
 
402
#ifdef _LANGUAGE_PASCAL
403
#define ifdNil -1
404
#define ilnNil -1
405
#define ipdNil -1
406
#define ilineNil -1
407
#define isymNil -1
408
#define indexNil 16#fffff
409
#define issNil -1
410
#define issNull 0
411
#define itqMax 6
412
#define iauxNil -1
413
#define ioptNil -1
414
#define rfdNil -1
415
#define ifiNil -1
416
#endif  /* _LANGUAGE_PASCAL */
417
 
418
 
419
/* Dense numbers
420
 *
421
 * Rather than use file index, symbol index pairs to represent symbols
422
 *      and globals, we use dense number so that they can be easily embeded
423
 *      in intermediate code and the programs that process them can
424
 *      use direct access tabls instead of hash table (which would be
425
 *      necesary otherwise because of the sparse name space caused by
426
 *      file index, symbol index pairs. Dense number are represented
427
 *      by RNDXRs.
428
 */
429
 
430
/*
431
 * The following table defines the meaning of each SYM field as
432
 * a function of the "st". (scD/B == scData OR scBss)
433
 *
434
 * Note: the value "isymMac" is used by symbols that have the concept
435
 * of enclosing a block of related information.  This value is the
436
 * isym of the first symbol AFTER the end associated with the primary
437
 * symbol. For example if a procedure was at isym==90 and had an
438
 * isymMac==155, the associated end would be at isym==154, and the
439
 * symbol at 155 would probably (although not necessarily) be the
440
 * symbol for the next procedure.  This allows rapid skipping over
441
 * internal information of various sorts. "stEnd"s ALWAYS have the
442
 * isym of the primary symbol that started the block.
443
 *
444
 
445
ST              SC      VALUE           INDEX
446
--------        ------  --------        ------
447
stFile          scText  address         isymMac
448
stLabel         scText  address         ---
449
stGlobal        scD/B   address         iaux
450
stStatic        scD/B   address         iaux
451
stParam         scAbs   offset          iaux
452
stLocal         scAbs   offset          iaux
453
stProc          scText  address         iaux    (isymMac is first AUX)
454
stStaticProc    scText  address         iaux    (isymMac is first AUX)
455
 
456
stMember        scNil   ordinal         ---     (if member of enum)
457
        (mipsread thinks the case below has a bit, not byte, offset.)
458
stMember        scNil   byte offset     iaux    (if member of struct/union)
459
stMember        scBits  bit offset      iaux    (bit field spec)
460
 
461
stBlock         scText  address         isymMac (text block)
462
        (the code seems to think that rather than scNil, we see scInfo for
463
         the two cases below.)
464
stBlock         scNil   cb              isymMac (struct/union member define)
465
stBlock         scNil   cMembers        isymMac (enum member define)
466
 
467
        (New types added by SGI to simplify things:)
468
stStruct        scInfo  cb              isymMac (struct type define)
469
stUnion         scInfo  cb              isymMac (union  type define)
470
stEnum          scInfo  cMembers        isymMac (enum   type define)
471
 
472
stEnd           scText  address         isymStart
473
stEnd           scNil   -------         isymStart (struct/union/enum)
474
 
475
stTypedef       scNil   -------         iaux
476
stRegReloc      sc???   value           old register number
477
stForward       sc???   new address     isym to original symbol
478
 
479
stConstant      scInfo  value           --- (scalar)
480
stConstant      scInfo  iss             --- (complex, e.g. string)
481
 
482
 *
483
 */
484
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.