|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: ! 3: /* static char sccsid[] = "@(#)pc.h 1.2 10/14/80"; */ ! 4: ! 5: /* ! 6: * random constants for pc ! 7: */ ! 8: ! 9: /* ! 10: * the name of the display. ! 11: * the display is made up of saved AP's and FP's. ! 12: * FP's are used to find locals, and AP's are used to find parameters. ! 13: * FP and AP are untyped pointers, but are used throughout as (char *). ! 14: * the display is used by adding AP_OFFSET or FP_OFFSET to the ! 15: * address of the approriate display entry. ! 16: */ ! 17: #define DISPLAYNAME "__disply" ! 18: struct dispsave { ! 19: char *savedAP; ! 20: char *savedFP; ! 21: }; ! 22: #define AP_OFFSET ( 0 ) ! 23: #define FP_OFFSET ( sizeof(char *) ) ! 24: ! 25: /* ! 26: * the structure below describes the locals used by the run time system. ! 27: * at function entry, at least this much space is allocated, ! 28: * and the following information is filled in: ! 29: * the address of a routine to close the current frame for unwinding, ! 30: * a pointer to the display entry for the current static level and ! 31: * the previous contents of the display for this static level. ! 32: * the curfile location is used to point to the currently active file, ! 33: * and is filled in as io is initiated. ! 34: * one of these structures is allocated on the (negatively growing) stack. ! 35: * at function entry, fp is set to point to the last field of the struct, ! 36: * thus the offsets of the fields are as indicated below. ! 37: */ ! 38: struct rtlocals { ! 39: struct iorec *curfile; ! 40: struct dispsave dsave; ! 41: struct dispsave *dptr; ! 42: int (*unwind)(); ! 43: } rtlocs; ! 44: #define CURFILEOFFSET ( ( -sizeof rtlocs ) + sizeof rtlocs.unwind ) ! 45: #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) ! 46: #define DPTROFFSET ( DSAVEOFFSET + sizeof rtlocs.dsave ) ! 47: #define UNWINDOFFSET ( DPTROFFSET + sizeof rtlocs.dptr ) ! 48: #define UNWINDNAME "_UNWIND" ! 49: ! 50: /* ! 51: * the register save mask for saving no registers ! 52: */ ! 53: #define RSAVEMASK ( 0 ) ! 54: ! 55: /* ! 56: * runtime check mask for divide check and integer overflow ! 57: */ ! 58: #define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) ! 59: ! 60: /* ! 61: * formats for various names ! 62: * NAMEFORMAT arbitrary length strings. ! 63: * EXTFORMAT for externals, a preceding underscore. ! 64: * PREFIXFORMAT used to print made up names with prefixes. ! 65: * LABELPREFIX with getlab() makes up label names. ! 66: * LLABELPREFIX with getlab() makes up sdb labels. ! 67: * a typical use might be to print out a name with a preceeding underscore ! 68: * with putprintf( EXTFORMAT , 0 , name ); ! 69: */ ! 70: #define NAMEFORMAT "%s" ! 71: #define EXTFORMAT "_%s" ! 72: #define PREFIXFORMAT "%s%d" ! 73: #define LABELPREFIX "L" ! 74: #define LLABELPREFIX "LL" ! 75: ! 76: /* ! 77: * the name of the statement counter ! 78: */ ! 79: #define STMTCOUNT "__stcnt" ! 80: ! 81: /* ! 82: * the name of the pcp counters ! 83: */ ! 84: #define PCPCOUNT "__pcpcount" ! 85: ! 86: /* ! 87: * a vector of pointer to enclosing functions for fully qualified names. ! 88: */ ! 89: char *enclosing[ DSPLYSZ ]; ! 90: ! 91: /* ! 92: * and of course ... ! 93: */ ! 94: #define BITSPERBYTE 8 ! 95: ! 96: /* ! 97: * error number for case label not found (ECASE) ! 98: * stolen from ~mckusick/px/lib/h01errs.h ! 99: */ ! 100: #define ECASE 5
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.