1738Speter /* Copyright (c) 1979 Regents of the University of California */ 2738Speter 3*4880Speter /* static char sccsid[] = "@(#)pc.h 1.4 11/13/81"; */ 4738Speter 5738Speter /* 6738Speter * random constants for pc 7738Speter */ 8738Speter 9738Speter /* 10738Speter * the name of the display. 11738Speter */ 12738Speter #define DISPLAYNAME "__disply" 13738Speter 14738Speter /* 15738Speter * the structure below describes the locals used by the run time system. 16738Speter * at function entry, at least this much space is allocated, 17738Speter * and the following information is filled in: 18738Speter * the address of a routine to close the current frame for unwinding, 19738Speter * a pointer to the display entry for the current static level and 20738Speter * the previous contents of the display for this static level. 21738Speter * the curfile location is used to point to the currently active file, 22738Speter * and is filled in as io is initiated. 23738Speter * one of these structures is allocated on the (negatively growing) stack. 24738Speter * at function entry, fp is set to point to the last field of the struct, 25738Speter * thus the offsets of the fields are as indicated below. 26738Speter */ 27738Speter struct rtlocals { 28738Speter struct iorec *curfile; 29738Speter struct dispsave dsave; 30738Speter struct dispsave *dptr; 31738Speter int (*unwind)(); 32738Speter } rtlocs; 33738Speter #define CURFILEOFFSET ( ( -sizeof rtlocs ) + sizeof rtlocs.unwind ) 34738Speter #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) 35738Speter #define DPTROFFSET ( DSAVEOFFSET + sizeof rtlocs.dsave ) 36738Speter #define UNWINDOFFSET ( DPTROFFSET + sizeof rtlocs.dptr ) 37738Speter #define UNWINDNAME "_UNWIND" 38738Speter 39738Speter /* 40738Speter * the register save mask for saving no registers 41738Speter */ 42738Speter #define RSAVEMASK ( 0 ) 43738Speter 44738Speter /* 45738Speter * runtime check mask for divide check and integer overflow 46738Speter */ 47738Speter #define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) 48738Speter 49738Speter /* 50738Speter * formats for various names 51738Speter * NAMEFORMAT arbitrary length strings. 52738Speter * EXTFORMAT for externals, a preceding underscore. 53*4880Speter * LABELFORMAT for label names, a preceding dollar-sign. 54738Speter * PREFIXFORMAT used to print made up names with prefixes. 55738Speter * LABELPREFIX with getlab() makes up label names. 56738Speter * LLABELPREFIX with getlab() makes up sdb labels. 573428Speter * FORMALPREFIX prefix for EXTFORMAT for formal entry points. 58738Speter * a typical use might be to print out a name with a preceeding underscore 59738Speter * with putprintf( EXTFORMAT , 0 , name ); 60738Speter */ 61738Speter #define NAMEFORMAT "%s" 62738Speter #define EXTFORMAT "_%s" 63*4880Speter #define LABELFORMAT "$%s" 64738Speter #define PREFIXFORMAT "%s%d" 65738Speter #define LABELPREFIX "L" 66738Speter #define LLABELPREFIX "LL" 673428Speter #define FORMALPREFIX "__" 68738Speter 69738Speter /* 70738Speter * the name of the statement counter 71738Speter */ 72738Speter #define STMTCOUNT "__stcnt" 73738Speter 74738Speter /* 75738Speter * the name of the pcp counters 76738Speter */ 77738Speter #define PCPCOUNT "__pcpcount" 78738Speter 79738Speter /* 80738Speter * a vector of pointer to enclosing functions for fully qualified names. 81738Speter */ 82738Speter char *enclosing[ DSPLYSZ ]; 83738Speter 84738Speter /* 85738Speter * and of course ... 86738Speter */ 87738Speter #define BITSPERBYTE 8 88738Speter 89738Speter /* 90738Speter * error number for case label not found (ECASE) 91738Speter * stolen from ~mckusick/px/lib/h01errs.h 92738Speter */ 93738Speter #define ECASE 5 94