122228Sdist /* 222228Sdist * Copyright (c) 1980 Regents of the University of California. 322228Sdist * All rights reserved. The Berkeley software License Agreement 422228Sdist * specifies the terms and conditions for redistribution. 522228Sdist * 6*30030Smckusick * @(#)pc.h 5.2 (Berkeley) 11/12/86 722228Sdist */ 8738Speter 99120Smckusick #include <setjmp.h> 109120Smckusick 11738Speter /* 1210659Speter * random constants for pc 13738Speter */ 14738Speter 15738Speter /* 16738Speter * the name of the display. 17738Speter */ 18738Speter #define DISPLAYNAME "__disply" 19738Speter 20738Speter /* 21738Speter * the structure below describes the locals used by the run time system. 22738Speter * at function entry, at least this much space is allocated, 23738Speter * and the following information is filled in: 24738Speter * the address of a routine to close the current frame for unwinding, 25738Speter * a pointer to the display entry for the current static level and 26738Speter * the previous contents of the display for this static level. 27738Speter * the curfile location is used to point to the currently active file, 28738Speter * and is filled in as io is initiated. 29738Speter * one of these structures is allocated on the (negatively growing) stack. 30738Speter * at function entry, fp is set to point to the last field of the struct, 31738Speter * thus the offsets of the fields are as indicated below. 32738Speter */ 33*30030Smckusick #ifdef vax 34738Speter struct rtlocals { 359120Smckusick jmp_buf gotoenv; 36738Speter struct iorec *curfile; 37738Speter struct dispsave dsave; 38738Speter } rtlocs; 39*30030Smckusick #endif vax 40*30030Smckusick 41*30030Smckusick #ifdef tahoe 42*30030Smckusick struct rtlocals { 43*30030Smckusick jmp_buf gotoenv; 44*30030Smckusick struct iorec *curfile; 45*30030Smckusick struct dispsave dsave; 46*30030Smckusick long savedregs[9]; 47*30030Smckusick } rtlocs; 48*30030Smckusick #endif tahoe 49*30030Smckusick 50*30030Smckusick #ifdef mc68000 51*30030Smckusick struct rtlocals { 52*30030Smckusick jmp_buf gotoenv; 53*30030Smckusick struct iorec *curfile; 54*30030Smckusick struct dispsave dsave; 55*30030Smckusick } rtlocs; 56*30030Smckusick #endif mc68000 57*30030Smckusick 589120Smckusick #define GOTOENVOFFSET ( -sizeof rtlocs ) 599120Smckusick #define CURFILEOFFSET ( GOTOENVOFFSET + sizeof rtlocs.gotoenv ) 60738Speter #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) 61738Speter 62738Speter /* 6310659Speter * this is a cookie used to communicate between the 6410659Speter * routine entry code and the routine exit code. 6510659Speter * mostly it's for labels shared between the two. 66738Speter */ 6710659Speter #ifdef vax 6810659Speter struct entry_exit_cookie { 6910659Speter struct nl *nlp; 7010659Speter char extname[BUFSIZ]; 7110659Speter int toplabel; 7210659Speter int savlabel; 7310659Speter }; 7410659Speter #define FRAME_SIZE_LABEL "LF" 7510659Speter #define SAVE_MASK_LABEL "L" 7610659Speter #endif vax 77738Speter 78*30030Smckusick #ifdef tahoe 79*30030Smckusick struct entry_exit_cookie { 80*30030Smckusick struct nl *nlp; 81*30030Smckusick char extname[BUFSIZ]; 82*30030Smckusick int toplabel; 83*30030Smckusick int savlabel; 84*30030Smckusick }; 85*30030Smckusick #define FRAME_SIZE_LABEL "LF" 86*30030Smckusick #define SAVE_MASK_LABEL "L" 87*30030Smckusick #endif tahoe 88*30030Smckusick 8910659Speter #ifdef mc68000 9010659Speter struct entry_exit_cookie { 9110659Speter struct nl *nlp; 9210659Speter char extname[BUFSIZ]; 9310659Speter int toplabel; 9410659Speter }; 9510659Speter #define FRAME_SIZE_LABEL "LF" 9610659Speter #define PAGE_BREAK_LABEL "LP" 9710659Speter #define SAVE_MASK_LABEL "LS" 9810659Speter #endif mc68000 99738Speter 100738Speter /* 101738Speter * formats for various names 102738Speter * NAMEFORMAT arbitrary length strings. 103738Speter * EXTFORMAT for externals, a preceding underscore. 1044880Speter * LABELFORMAT for label names, a preceding dollar-sign. 105738Speter * PREFIXFORMAT used to print made up names with prefixes. 106738Speter * LABELPREFIX with getlab() makes up label names. 107738Speter * LLABELPREFIX with getlab() makes up sdb labels. 1083428Speter * FORMALPREFIX prefix for EXTFORMAT for formal entry points. 109738Speter * a typical use might be to print out a name with a preceeding underscore 110738Speter * with putprintf( EXTFORMAT , 0 , name ); 111738Speter */ 112738Speter #define NAMEFORMAT "%s" 113738Speter #define EXTFORMAT "_%s" 1144880Speter #define LABELFORMAT "$%s" 115738Speter #define PREFIXFORMAT "%s%d" 116738Speter #define LABELPREFIX "L" 117738Speter #define LLABELPREFIX "LL" 1183428Speter #define FORMALPREFIX "__" 119738Speter 120738Speter /* 121738Speter * the name of the statement counter 122738Speter */ 123738Speter #define STMTCOUNT "__stcnt" 124738Speter 125738Speter /* 126738Speter * the name of the pcp counters 127738Speter */ 128738Speter #define PCPCOUNT "__pcpcount" 129738Speter 130738Speter /* 131738Speter * a vector of pointer to enclosing functions for fully qualified names. 132738Speter */ 133738Speter char *enclosing[ DSPLYSZ ]; 134738Speter 13510659Speter #ifdef vax 136738Speter /* 13710659Speter * the runtime framepointer and argumentpointer registers 13810659Speter */ 13910659Speter # define P2FP 13 14010659Speter # define P2FPNAME "fp" 14110659Speter # define P2AP 12 14210659Speter # define P2APNAME "ap" 14310659Speter 14410659Speter /* 14510659Speter * the register save mask for saving no registers 14610659Speter */ 14710659Speter # define RSAVEMASK ( 0 ) 14810659Speter 14910659Speter /* 15010659Speter * runtime check mask for divide check and integer overflow 15110659Speter */ 15210659Speter # define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) 15311328Speter 15410659Speter /* 155738Speter * and of course ... 156738Speter */ 15710659Speter # define BITSPERBYTE 8 15810659Speter #endif vax 15910659Speter 160*30030Smckusick #ifdef tahoe 161*30030Smckusick /* 162*30030Smckusick * the runtime framepointer and argumentpointer registers 163*30030Smckusick */ 164*30030Smckusick # define P2FP 13 165*30030Smckusick # define P2FPNAME "fp" 166*30030Smckusick # define P2AP 13 167*30030Smckusick # define P2APNAME "fp" 168*30030Smckusick 169*30030Smckusick /* 170*30030Smckusick * the register save mask for saving no registers 171*30030Smckusick */ 172*30030Smckusick # define RSAVEMASK ( 0 ) 173*30030Smckusick 174*30030Smckusick /* 175*30030Smckusick * divide check and integer overflow don't exist in the save mask 176*30030Smckusick */ 177*30030Smckusick # define RUNCHECK ( 0 ) 178*30030Smckusick 179*30030Smckusick /* 180*30030Smckusick * and of course ... 181*30030Smckusick */ 182*30030Smckusick # define BITSPERBYTE 8 183*30030Smckusick #endif tahoe 184*30030Smckusick 18510659Speter #ifdef mc68000 18610659Speter /* 18711328Speter * these magic numbers lifted from pcc/mac2defs 18814905Speter * the offsets are for mapping data and address register numbers 18914905Speter * to linear register numbers. e.g. d2 ==> r2, and a2 ==> r10. 19010659Speter */ 19114905Speter # define DATA_REG_OFFSET 0 19214905Speter # define ADDR_REG_OFFSET 8 19310659Speter # define P2FPNAME "a6" 19414905Speter # define P2FP (ADDR_REG_OFFSET + 6) 19510659Speter # define P2APNAME "a6" 19614905Speter # define P2AP (ADDR_REG_OFFSET + 6) 19710659Speter 19810659Speter /* 19910659Speter * and still ... 20010659Speter */ 20110659Speter # define BITSPERBYTE 8 20210659Speter #endif mc68000 203