PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/kernel/alpha/syms.h

https://github.com/Prajna/mach
C Header | 629 lines | 310 code | 56 blank | 263 comment | 2 complexity | fa0b67592a860c4e28ffa94aa99194e7 MD5 | raw file
  1. /*
  2. * Mach Operating System
  3. * Copyright (c) 1992 Carnegie Mellon University
  4. * All Rights Reserved.
  5. *
  6. * Permission to use, copy, modify and distribute this software and its
  7. * documentation is hereby granted, provided that both the copyright
  8. * notice and this permission notice appear in all copies of the
  9. * software, derivative works or modified versions, and any portions
  10. * thereof, and that both notices appear in supporting documentation.
  11. *
  12. * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  13. * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  14. * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  15. *
  16. * Carnegie Mellon requests users of this software to return to
  17. *
  18. * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
  19. * School of Computer Science
  20. * Carnegie Mellon University
  21. * Pittsburgh PA 15213-3890
  22. *
  23. * any improvements or extensions that they make and grant Carnegie Mellon
  24. * the rights to redistribute these changes.
  25. */
  26. /*
  27. * HISTORY
  28. * $Log: syms.h,v $
  29. * Revision 2.2 93/01/14 17:14:22 danner
  30. * Adapted for Alpha.
  31. * [92/05/31 af]
  32. *
  33. *
  34. */
  35. /* --------------------------------------------------- */
  36. /* | Copyright (c) 1986 MIPS Computer Systems, Inc. | */
  37. /* | All Rights Reserved. | */
  38. /* --------------------------------------------------- */
  39. /* (C) Copyright 1984 by Third Eye Software, Inc.
  40. *
  41. * Third Eye Software, Inc. grants reproduction and use rights to
  42. * all parties, PROVIDED that this comment is maintained in the copy.
  43. *
  44. * Third Eye makes no claims about the applicability of this
  45. * symbol table to a particular use.
  46. */
  47. /* glevels for field in FDR */
  48. #define GLEVEL_0 2
  49. #define GLEVEL_1 1
  50. #define GLEVEL_2 0 /* for upward compat reasons. */
  51. #define GLEVEL_3 3
  52. /* magic number for symheader */
  53. #define magicSym 0x1992
  54. /* Language codes */
  55. #define langC 0
  56. #define langPascal 1
  57. #define langFortran 2
  58. #define langAssembler 3 /* one Assembley inst might map to many mach */
  59. #define langMachine 4
  60. #define langNil 5
  61. #define langAda 6
  62. #define langPl1 7
  63. #define langCobol 8
  64. #define langMax 32
  65. /* The following are value definitions for the fields in the SYMR */
  66. /*
  67. * Storage Classes
  68. */
  69. #define scNil 0
  70. #define scText 1 /* text symbol */
  71. #define scData 2 /* initialized data symbol */
  72. #define scBss 3 /* un-initialized data symbol */
  73. #define scRegister 4 /* value of symbol is register number */
  74. #define scAbs 5 /* value of symbol is absolute */
  75. #define scUndefined 6 /* who knows? */
  76. #define scCdbLocal 7 /* variable's value is IN se->va.?? */
  77. #define scBits 8 /* this is a bit field */
  78. #define scCdbSystem 9 /* variable's value is IN CDB's address space */
  79. #define scDbx 9 /* overlap dbx internal use */
  80. #define scRegImage 10 /* register value saved on stack */
  81. #define scInfo 11 /* symbol contains debugger information */
  82. #define scUserStruct 12 /* address in struct user for current process */
  83. #define scSData 13 /* load time only small data */
  84. #define scSBss 14 /* load time only small common */
  85. #define scRData 15 /* load time only read only data */
  86. #define scVar 16 /* Var parameter (fortran,pascal) */
  87. #define scCommon 17 /* common variable */
  88. #define scSCommon 18 /* small common */
  89. #define scVarRegister 19 /* Var parameter in a register */
  90. #define scVariant 20 /* Variant record */
  91. #define scSUndefined 21 /* small undefined(external) data */
  92. #define scInit 22 /* .init section symbol */
  93. #define scBasedVar 23 /* Fortran or PL/1 ptr based var */
  94. #define scXData 24 /* exception handling data */
  95. #define scPData 25 /* Procedure section */
  96. #define scFini 26 /* .fini section */
  97. #define scMax 32
  98. /*
  99. * Symbol Types
  100. */
  101. #define stNil 0 /* Nuthin' special */
  102. #define stGlobal 1 /* external symbol */
  103. #define stStatic 2 /* static */
  104. #define stParam 3 /* procedure argument */
  105. #define stLocal 4 /* local variable */
  106. #define stLabel 5 /* label */
  107. #define stProc 6 /* " " Procedure */
  108. #define stBlock 7 /* beginnning of block */
  109. #define stEnd 8 /* end (of anything) */
  110. #define stMember 9 /* member (of anything - struct/union/enum */
  111. #define stTypedef 10 /* type definition */
  112. #define stFile 11 /* file name */
  113. #define stRegReloc 12 /* register relocation */
  114. #define stForward 13 /* forwarding address */
  115. #define stStaticProc 14 /* load time only static procs */
  116. #define stConstant 15 /* const */
  117. #define stStaParam 16 /* Fortran static parameters */
  118. /* Psuedo-symbols - internal to debugger */
  119. #define stStr 60 /* string */
  120. #define stNumber 61 /* pure number (ie. 4 NOR 2+2) */
  121. #define stExpr 62 /* 2+2 vs. 4 */
  122. #define stType 63 /* post-coersion SER */
  123. #define stMax 64
  124. /* definitions for fields in TIR */
  125. /* type qualifiers for ti.tq0 -> ti.(itqMax-1) */
  126. #define tqNil 0 /* bt is what you see */
  127. #define tqPtr 1 /* pointer */
  128. #define tqProc 2 /* procedure */
  129. #define tqArray 3 /* duh */
  130. #define tqFar 4 /* longer addressing - 8086/8 land */
  131. #define tqVol 5 /* volatile */
  132. #define tqConst 6 /* const */
  133. #define tqMax 8
  134. /* basic types as seen in ti.bt */
  135. #define btNil 0 /* undefined */
  136. #define btAdr32 1 /* 32-bit address */
  137. #define btAdr btAdr32 /* address - integer same size as pointer */
  138. #define btChar 2 /* character */
  139. #define btUChar 3 /* unsigned character */
  140. #define btShort 4 /* short */
  141. #define btUShort 5 /* unsigned short */
  142. #define btInt32 6 /* 32-bit int */
  143. #define btInt btInt32 /* int */
  144. #define btUInt32 7 /* 32-bit unsigned int */
  145. #define btUInt btUInt32 /* unsigned int */
  146. #define btLong32 8 /* 32-bit long */
  147. #define btLong btLong32 /* long */
  148. #define btULong32 9 /* 32-bit unsigned long */
  149. #define btULong btULong32 /* unsigned long */
  150. #define btFloat 10 /* float (real) */
  151. #define btDouble 11 /* Double (real) */
  152. #define btStruct 12 /* Structure (Record) */
  153. #define btUnion 13 /* Union (variant) */
  154. #define btEnum 14 /* Enumerated */
  155. #define btTypedef 15 /* defined via a typedef, isymRef points */
  156. #define btRange 16 /* subrange of int */
  157. #define btSet 17 /* pascal sets */
  158. #define btComplex 18 /* fortran complex */
  159. #define btDComplex 19 /* fortran double complex */
  160. #define btIndirect 20 /* forward or unnamed typedef */
  161. #define btFixedDec 21 /* Fixed Decimal */
  162. #define btFloatDec 22 /* Float Decimal */
  163. #define btString 23 /* Varying Length Character String */
  164. #define btBit 24 /* Aligned Bit String */
  165. #define btPicture 25 /* Picture */
  166. #define btVoid 26 /* void */
  167. #define btPtrMem 27 /* DEC C++: Pointer to member */
  168. #define btInt64 28 /* 64-bit int */
  169. #define btUInt64 29 /* 64-bit unsigned int */
  170. #define btLong64 30 /* 64-bit long */
  171. #define btULong64 31 /* 64-bit unsigned long */
  172. #define btLongLong64 32 /* 64-bit long long */
  173. #define btLongLong btLongLong64 /* long long */
  174. #define btULongLong64 33 /* 64-bit unsigned long long */
  175. #define btULongLong btULongLong64 /* unsigned long long */
  176. #define btAdr64 34 /* 64-bit address */
  177. #define btMax 64
  178. #if (MFG == MIPS)
  179. /* optimization type codes */
  180. #define otNil 0
  181. #define otReg 1 /* move var to reg */
  182. #define otBlock 2 /* begin basic block */
  183. #define otProc 3 /* procedure */
  184. #define otInline 4 /* inline procedure */
  185. #define otEnd 5 /* whatever you started */
  186. #define otMax 6 /* KEEP UP TO DATE */
  187. #endif (MFG == MIPS)
  188. #ifdef LANGUAGE_C
  189. /*
  190. * This (part of the) file contains the definition of the Third Eye Symbol Table.
  191. *
  192. * Symbols are assumed to be in 'encounter order' - i.e. the order that
  193. * the things they represent were encountered by the compiler/assembler/loader.
  194. * EXCEPT for globals! These are assumed to be bunched together,
  195. * probably right after the last 'normal' symbol. Globals ARE sorted
  196. * in ascending order.
  197. *
  198. * -----------------------------------------------------------------
  199. * A brief word about Third Eye naming/use conventions:
  200. *
  201. * All arrays and index's are 0 based.
  202. * All "ifooMax" values are the highest legal value PLUS ONE. This makes
  203. * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
  204. *
  205. * "isym" Index into the SYMbol table.
  206. * "ipd" Index into the Procedure Descriptor array.
  207. * "ifd" Index into the File Descriptor array.
  208. * "iss" Index into String Space.
  209. * "cb" Count of Bytes.
  210. * "rgPd" array whose domain is "0..ipdMax-1" and RanGe is PDR.
  211. * "rgFd" array whose domain is "0..ifdMax-1" and RanGe is FDR.
  212. */
  213. /*
  214. * Symbolic Header (HDR) structure.
  215. * As long as all the pointers are set correctly,
  216. * we don't care WHAT order the various sections come out in!
  217. *
  218. * A file produced solely for the use of CDB will probably NOT have
  219. * any instructions or data areas in it, as these are available
  220. * in the original.
  221. */
  222. typedef struct {
  223. short magic; /* to verify validity of the table */
  224. short vstamp; /* version stamp */
  225. int ilineMax; /* number of line number entries */
  226. int idnMax; /* max index into dense number table */
  227. int ipdMax; /* number of procedures */
  228. int isymMax; /* number of local symbols */
  229. int ioptMax; /* max index into optimization symbol entries */
  230. int iauxMax; /* number of auxillary symbol entries */
  231. int issMax; /* max index into local strings */
  232. int issExtMax; /* max index into external strings */
  233. int ifdMax; /* number of file descriptor entries */
  234. int crfd; /* number of relative file descriptor entries */
  235. int iextMax; /* max index into external symbols */
  236. vm_offset_t cbLine; /* number of bytes for line number entries */
  237. vm_offset_t cbLineOffset;/* offset to start of line number entries*/
  238. vm_offset_t cbDnOffset;/* offset to start dense number table */
  239. vm_offset_t cbPdOffset;/* offset to procedure descriptor table */
  240. vm_offset_t cbSymOffset;/* offset to start of local symbols*/
  241. vm_offset_t cbOptOffset;/* offset to optimization symbol entries */
  242. vm_offset_t cbAuxOffset;/* offset to start of auxillary symbol entries*/
  243. vm_offset_t cbSsOffset;/* offset to start of local strings */
  244. vm_offset_t cbSsExtOffset;/* offset to start of external strings */
  245. vm_offset_t cbFdOffset;/* offset to file descriptor table */
  246. vm_offset_t cbRfdOffset;/* offset to relative file descriptor table */
  247. vm_offset_t cbExtOffset;/* offset to start of external symbol entries*/
  248. /* If you add machine dependent fields, add them here */
  249. } HDRR, *pHDRR;
  250. #define cbHDRR sizeof(HDRR)
  251. #define hdrNil ((pHDRR)0)
  252. /*
  253. * The FDR and PDR structures speed mapping of address <-> name.
  254. * They are sorted in ascending memory order and are kept in
  255. * memory by CDB at runtime.
  256. */
  257. /*
  258. * File Descriptor
  259. *
  260. * There is one of these for EVERY FILE, whether compiled with
  261. * full debugging symbols or not. The name of a file should be
  262. * the path name given to the compiler. This allows the user
  263. * to simply specify the names of the directories where the COMPILES
  264. * were done, and we will be able to find their files.
  265. * A field whose comment starts with "R - " indicates that it will be
  266. * setup at runtime.
  267. */
  268. typedef struct fdr {
  269. vm_offset_t adr; /* memory address of beginning of file */
  270. vm_offset_t cbLineOffset;/* byte offset from header for this file ln's */
  271. vm_offset_t cbLine; /* size of lines for this file */
  272. vm_offset_t cbSs; /* number of bytes in the ss */
  273. int rss; /* file name (of source, if known) */
  274. int issBase; /* file's string space */
  275. int isymBase; /* beginning of symbols */
  276. int csym; /* count file's of symbols */
  277. int ilineBase; /* file's line symbols */
  278. int cline; /* count of file's line symbols */
  279. int ioptBase; /* file's optimization entries */
  280. int copt; /* count of file's optimization entries */
  281. int ipdFirst; /* start of procedures for this file */
  282. int cpd; /* count of procedures for this file */
  283. int iauxBase; /* file's auxiliary entries */
  284. int caux; /* count of file's auxiliary entries */
  285. int rfdBase; /* index into the file indirect table */
  286. int crfd; /* count file indirect entries */
  287. unsigned lang: 5; /* language for this file */
  288. unsigned fMerge : 1; /* whether this file can be merged */
  289. unsigned fReadin : 1; /* true if it was read in (not just created) */
  290. unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
  291. /* aux's will be in compile host's sex */
  292. unsigned glevel : 2; /* level this file was compiled with */
  293. unsigned reserved : 22; /* reserved for future use */
  294. } FDR, *pFDR;
  295. #define cbFDR sizeof(FDR)
  296. #define fdNil ((pFDR)0)
  297. #define ifdNil -1
  298. #define ifdTemp 0
  299. #define ilnNil -1
  300. /*
  301. * Procedure Descriptor
  302. *
  303. * There is one of these for EVERY TEXT LABEL.
  304. * If a procedure is in a file with full symbols, then isym
  305. * will point to the PROC symbols, else it will point to the
  306. * global symbol for the label.
  307. */
  308. typedef struct pdr {
  309. vm_offset_t adr; /* memory address of start of procedure */
  310. vm_offset_t cbLineOffset;/* byte offset for this procedure from the fd base */
  311. int isym; /* start of local symbol entries */
  312. int iline; /* start of line number entries*/
  313. int regmask; /* save register mask */
  314. int regoffset; /* save register offset */
  315. int iopt; /* start of optimization symbol entries*/
  316. int fregmask; /* save floating point register mask */
  317. int fregoffset; /* save floating point register offset */
  318. int frameoffset; /* frame size */
  319. int lnLow; /* lowest line in the procedure */
  320. int lnHigh; /* highest line in the procedure */
  321. unsigned gp_prologue : 8; /* byte size of GP prologue */
  322. unsigned gp_used : 1; /* true if the procedure uses GP */
  323. unsigned reserved : 23;
  324. short framereg; /* frame pointer register */
  325. short pcreg; /* offset or reg of return pc */
  326. } PDR, *pPDR;
  327. #define cbPDR sizeof(PDR)
  328. #define pdNil ((pPDR) 0)
  329. #define ipdNil -1
  330. /*
  331. * The structure of the runtime procedure descriptor created by the loader
  332. * for use by the static exception system.
  333. */
  334. typedef struct runtime_pdr {
  335. vm_offset_t adr; /* memory address of start of procedure */
  336. int regmask; /* save register mask */
  337. int regoffset; /* save register offset */
  338. int fregmask; /* save floating point register mask */
  339. int fregoffset; /* save floating point register offset */
  340. int frameoffset; /* frame size */
  341. short framereg; /* frame pointer register */
  342. short pcreg; /* offset or reg of return pc */
  343. int irpss; /* index into the runtime string table */
  344. int reserved;
  345. struct exception_info *exception_info;/* pointer to exception array */
  346. } RPDR, *pRPDR;
  347. #define cbRPDR sizeof(RPDR)
  348. #define rpdNil ((pRPDR) 0)
  349. /*
  350. * Line Numbers
  351. *
  352. * Line Numbers are segregated from the normal symbols because they
  353. * are [1] smaller , [2] are of no interest to your
  354. * average loader, and [3] are never needed in the middle of normal
  355. * scanning and therefore slow things down.
  356. *
  357. * By definition, the first LINER for any given procedure will have
  358. * the first line of a procedure and represent the first address.
  359. */
  360. typedef int LINER, *pLINER;
  361. #define lineNil ((pLINER)0)
  362. #define cbLINER sizeof(LINER)
  363. #define ilineNil -1
  364. /*
  365. * The Symbol Structure (GFW, to those who Know!)
  366. */
  367. typedef struct {
  368. vm_offset_t value; /* value of symbol */
  369. int iss; /* index into String Space of name */
  370. unsigned st : 6; /* symbol type */
  371. unsigned sc : 5; /* storage class - text, data, etc */
  372. unsigned reserved : 1; /* reserved */
  373. unsigned index : 20; /* index into sym/aux table */
  374. } SYMR, *pSYMR;
  375. #define symNil ((pSYMR)0)
  376. #define cbSYMR sizeof(SYMR)
  377. #define isymNil -1
  378. #define indexNil 0xfffff
  379. #define issNil -1
  380. #define issNull 0
  381. /* The following converts a memory resident string to an iss.
  382. * This hack is recognized in SbFIss, in sym.c of the debugger.
  383. */
  384. #define IssFSb(sb) (0x80000000 | ((unsigned int)(sb)))
  385. /* E X T E R N A L S Y M B O L R E C O R D
  386. *
  387. * Same as the SYMR except it contains file context to determine where
  388. * the index is.
  389. */
  390. typedef struct {
  391. SYMR asym; /* symbol for the external */
  392. unsigned jmptbl:1; /* symbol is a jump table entry for shlibs */
  393. unsigned cobol_main:1; /* symbol is a cobol main procedure */
  394. unsigned weakext:1; /* symbol is weak external */
  395. unsigned reserved:29; /* reserved for future use */
  396. int ifd; /* where the iss and index fields point into */
  397. } EXTR, *pEXTR;
  398. #define extNil ((pEXTR)0)
  399. #define cbEXTR sizeof(EXTR)
  400. /* A U X I L L A R Y T Y P E I N F O R M A T I O N */
  401. /*
  402. * Type Information Record
  403. */
  404. typedef struct {
  405. unsigned fBitfield : 1; /* set if bit width is specified */
  406. unsigned continued : 1; /* indicates additional TQ info in next AUX */
  407. unsigned bt : 6; /* basic type */
  408. unsigned tq4 : 4;
  409. unsigned tq5 : 4;
  410. /* ---- 16 bit boundary ---- */
  411. unsigned tq0 : 4;
  412. unsigned tq1 : 4; /* 6 type qualifiers - tqPtr, etc. */
  413. unsigned tq2 : 4;
  414. unsigned tq3 : 4;
  415. } TIR, *pTIR;
  416. #define cbTIR sizeof(TIR)
  417. #define tiNil ((pTIR)0)
  418. #define itqMax 6
  419. /*
  420. * Relative symbol record
  421. *
  422. * If the rfd field is 4095, the index field indexes into the global symbol
  423. * table.
  424. */
  425. typedef struct {
  426. unsigned rfd : 12; /* index into the file indirect table */
  427. unsigned index : 20; /* index int sym/aux/iss tables */
  428. } RNDXR, *pRNDXR;
  429. #define cbRNDXR sizeof(RNDXR)
  430. #define rndxNil ((pRNDXR)0)
  431. /* dense numbers or sometimes called block numbers are stored in this type,
  432. * a rfd of 0xffffffff is an index into the global table.
  433. */
  434. typedef struct {
  435. unsigned int rfd; /* index into the file table */
  436. unsigned int index; /* index int sym/aux/iss tables */
  437. } DNR, *pDNR;
  438. #define cbDNR sizeof(DNR)
  439. #define dnNil ((pDNR)0)
  440. /*
  441. * Auxillary information occurs only if needed.
  442. * It ALWAYS occurs in this order when present.
  443. isymMac used by stProc only
  444. TIR type info
  445. TIR additional TQ info (if first TIR was not enough)
  446. rndx if (bt == btStruct,btUnion,btEnum,btSet,btRange,
  447. btTypedef):
  448. rsym.index == iaux for btSet or btRange
  449. else rsym.index == isym
  450. dimLow btRange, btSet
  451. dimMac btRange, btSet
  452. rndx0 As many as there are tq arrays
  453. dimLow0
  454. dimHigh0
  455. ...
  456. rndxMax-1
  457. dimLowMax-1
  458. dimHighMax-1
  459. width in bits if (bit field), width in bits.
  460. */
  461. #define cAuxMax (6 + (idimMax*3))
  462. /* a union of all possible info in the AUX universe */
  463. typedef union {
  464. TIR ti; /* type information record */
  465. RNDXR rndx; /* relative index into symbol table */
  466. int dnLow; /* low dimension */
  467. int dnHigh; /* high dimension */
  468. int isym; /* symbol table index (end of proc) */
  469. int iss; /* index into string space (not used) */
  470. int width; /* width for non-default sized struc fields */
  471. int count; /* count of ranges for variant arm */
  472. } AUXU, *pAUXU;
  473. #define cbAUXU sizeof(AUXU)
  474. #define auxNil ((pAUXU)0)
  475. #define iauxNil -1
  476. /*
  477. * Optimization symbols
  478. *
  479. * Optimization symbols contain some overlap information with the normal
  480. * symbol table. In particular, the proc information
  481. * is somewhat redundant but necessary to easily find the other information
  482. * present.
  483. *
  484. * All of the offsets are relative to the beginning of the last otProc
  485. */
  486. typedef struct {
  487. unsigned ot: 8; /* optimization type */
  488. unsigned value: 24; /* address where we are moving it to */
  489. RNDXR rndx; /* points to a symbol or opt entry */
  490. unsigned int offset; /* relative offset this occured */
  491. } OPTR, *pOPTR;
  492. #define optNil ((pOPTR) 0)
  493. #define cbOPTR sizeof(OPTR)
  494. #define ioptNil -1
  495. /*
  496. * File Indirect
  497. *
  498. * When a symbol is referenced across files the following procedure is used:
  499. * 1) use the file index to get the File indirect entry.
  500. * 2) use the file indirect entry to get the File descriptor.
  501. * 3) add the sym index to the base of that file's sym table
  502. *
  503. */
  504. typedef int RFDT, *pRFDT;
  505. #define cbRFDT sizeof(RFDT)
  506. #define rfdNil -1
  507. /*
  508. * The file indirect table in the mips loader is known as an array of FITs.
  509. * This is done to keep the code in the loader readable in the area where
  510. * these tables are merged. Note this is only a name change.
  511. */
  512. typedef int FIT, *pFIT;
  513. #define cbFIT sizeof(FIT)
  514. #define ifiNil -1
  515. #define fiNil ((pFIT) 0)
  516. /* Dense numbers
  517. *
  518. * Rather than use file index, symbol index pairs to represent symbols
  519. * and globals, we use dense number so that they can be easily embeded
  520. * in intermediate code and the programs that process them can
  521. * use direct access tabls instead of hash table (which would be
  522. * necesary otherwise because of the sparse name space caused by
  523. * file index, symbol index pairs. Dense number are represented
  524. * by RNDXRs.
  525. */
  526. /*
  527. * The following table defines the meaning of each SYM field as
  528. * a function of the "st". (scD/B == scData OR scBss)
  529. *
  530. * Note: the value "isymMac" is used by symbols that have the concept
  531. * of enclosing a block of related information. This value is the
  532. * isym of the first symbol AFTER the end associated with the primary
  533. * symbol. For example if a procedure was at isym==90 and had an
  534. * isymMac==155, the associated end would be at isym==154, and the
  535. * symbol at 155 would probably (although not necessarily) be the
  536. * symbol for the next procedure. This allows rapid skipping over
  537. * internal information of various sorts. "stEnd"s ALWAYS have the
  538. * isym of the primary symbol that started the block.
  539. *
  540. ST SC VALUE INDEX
  541. -------- ------ -------- ------
  542. stFile scText address isymMac
  543. stLabel scText address ---
  544. stGlobal scD/B address iaux
  545. stStatic scD/B address iaux
  546. stParam scAbs offset iaux
  547. stLocal scAbs offset iaux
  548. stProc scText address iaux (isymMac is first AUX)
  549. stStaticProc scText address iaux (isymMac is first AUX)
  550. stMember scNil ordinal --- (if member of enum)
  551. stMember scNil byte offset iaux (if member of struct/union)
  552. stMember scBits bit offset iaux (bit field spec)
  553. stBlock scText address isymMac (text block)
  554. stBlock scNil cb isymMac (struct/union member define)
  555. stBlock scNil cMembers isymMac (enum member define)
  556. stEnd scText address isymStart
  557. stEnd scNil ------- isymStart (struct/union/enum)
  558. stTypedef scNil ------- iaux
  559. stRegReloc sc??? value old register number
  560. stForward sc??? new address isym to original symbol
  561. stConstant scInfo value --- (scalar)
  562. stConstant scInfo iss --- (complex, e.g. string)
  563. *
  564. */
  565. #endif LANGUAGE_C