1*48117Sbostic /*- 2*48117Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48117Sbostic * All rights reserved. 422228Sdist * 5*48117Sbostic * %sccs.include.redist.c% 6*48117Sbostic * 7*48117Sbostic * @(#)pc.h 5.3 (Berkeley) 04/16/91 822228Sdist */ 9738Speter 109120Smckusick #include <setjmp.h> 119120Smckusick 12738Speter /* 1310659Speter * random constants for pc 14738Speter */ 15738Speter 16738Speter /* 17738Speter * the name of the display. 18738Speter */ 19738Speter #define DISPLAYNAME "__disply" 20738Speter 21738Speter /* 22738Speter * the structure below describes the locals used by the run time system. 23738Speter * at function entry, at least this much space is allocated, 24738Speter * and the following information is filled in: 25738Speter * the address of a routine to close the current frame for unwinding, 26738Speter * a pointer to the display entry for the current static level and 27738Speter * the previous contents of the display for this static level. 28738Speter * the curfile location is used to point to the currently active file, 29738Speter * and is filled in as io is initiated. 30738Speter * one of these structures is allocated on the (negatively growing) stack. 31738Speter * at function entry, fp is set to point to the last field of the struct, 32738Speter * thus the offsets of the fields are as indicated below. 33738Speter */ 3430030Smckusick #ifdef vax 35738Speter struct rtlocals { 369120Smckusick jmp_buf gotoenv; 37738Speter struct iorec *curfile; 38738Speter struct dispsave dsave; 39738Speter } rtlocs; 4030030Smckusick #endif vax 4130030Smckusick 4230030Smckusick #ifdef tahoe 4330030Smckusick struct rtlocals { 4430030Smckusick jmp_buf gotoenv; 4530030Smckusick struct iorec *curfile; 4630030Smckusick struct dispsave dsave; 4730030Smckusick long savedregs[9]; 4830030Smckusick } rtlocs; 4930030Smckusick #endif tahoe 5030030Smckusick 5130030Smckusick #ifdef mc68000 5230030Smckusick struct rtlocals { 5330030Smckusick jmp_buf gotoenv; 5430030Smckusick struct iorec *curfile; 5530030Smckusick struct dispsave dsave; 5630030Smckusick } rtlocs; 5730030Smckusick #endif mc68000 5830030Smckusick 599120Smckusick #define GOTOENVOFFSET ( -sizeof rtlocs ) 609120Smckusick #define CURFILEOFFSET ( GOTOENVOFFSET + sizeof rtlocs.gotoenv ) 61738Speter #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) 62738Speter 63738Speter /* 6410659Speter * this is a cookie used to communicate between the 6510659Speter * routine entry code and the routine exit code. 6610659Speter * mostly it's for labels shared between the two. 67738Speter */ 6810659Speter #ifdef vax 6910659Speter struct entry_exit_cookie { 7010659Speter struct nl *nlp; 7110659Speter char extname[BUFSIZ]; 7210659Speter int toplabel; 7310659Speter int savlabel; 7410659Speter }; 7510659Speter #define FRAME_SIZE_LABEL "LF" 7610659Speter #define SAVE_MASK_LABEL "L" 7710659Speter #endif vax 78738Speter 7930030Smckusick #ifdef tahoe 8030030Smckusick struct entry_exit_cookie { 8130030Smckusick struct nl *nlp; 8230030Smckusick char extname[BUFSIZ]; 8330030Smckusick int toplabel; 8430030Smckusick int savlabel; 8530030Smckusick }; 8630030Smckusick #define FRAME_SIZE_LABEL "LF" 8730030Smckusick #define SAVE_MASK_LABEL "L" 8830030Smckusick #endif tahoe 8930030Smckusick 9010659Speter #ifdef mc68000 9110659Speter struct entry_exit_cookie { 9210659Speter struct nl *nlp; 9310659Speter char extname[BUFSIZ]; 9410659Speter int toplabel; 9510659Speter }; 9610659Speter #define FRAME_SIZE_LABEL "LF" 9710659Speter #define PAGE_BREAK_LABEL "LP" 9810659Speter #define SAVE_MASK_LABEL "LS" 9910659Speter #endif mc68000 100738Speter 101738Speter /* 102738Speter * formats for various names 103738Speter * NAMEFORMAT arbitrary length strings. 104738Speter * EXTFORMAT for externals, a preceding underscore. 1054880Speter * LABELFORMAT for label names, a preceding dollar-sign. 106738Speter * PREFIXFORMAT used to print made up names with prefixes. 107738Speter * LABELPREFIX with getlab() makes up label names. 108738Speter * LLABELPREFIX with getlab() makes up sdb labels. 1093428Speter * FORMALPREFIX prefix for EXTFORMAT for formal entry points. 110738Speter * a typical use might be to print out a name with a preceeding underscore 111738Speter * with putprintf( EXTFORMAT , 0 , name ); 112738Speter */ 113738Speter #define NAMEFORMAT "%s" 114738Speter #define EXTFORMAT "_%s" 1154880Speter #define LABELFORMAT "$%s" 116738Speter #define PREFIXFORMAT "%s%d" 117738Speter #define LABELPREFIX "L" 118738Speter #define LLABELPREFIX "LL" 1193428Speter #define FORMALPREFIX "__" 120738Speter 121738Speter /* 122738Speter * the name of the statement counter 123738Speter */ 124738Speter #define STMTCOUNT "__stcnt" 125738Speter 126738Speter /* 127738Speter * the name of the pcp counters 128738Speter */ 129738Speter #define PCPCOUNT "__pcpcount" 130738Speter 131738Speter /* 132738Speter * a vector of pointer to enclosing functions for fully qualified names. 133738Speter */ 134738Speter char *enclosing[ DSPLYSZ ]; 135738Speter 13610659Speter #ifdef vax 137738Speter /* 13810659Speter * the runtime framepointer and argumentpointer registers 13910659Speter */ 14010659Speter # define P2FP 13 14110659Speter # define P2FPNAME "fp" 14210659Speter # define P2AP 12 14310659Speter # define P2APNAME "ap" 14410659Speter 14510659Speter /* 14610659Speter * the register save mask for saving no registers 14710659Speter */ 14810659Speter # define RSAVEMASK ( 0 ) 14910659Speter 15010659Speter /* 15110659Speter * runtime check mask for divide check and integer overflow 15210659Speter */ 15310659Speter # define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) 15411328Speter 15510659Speter /* 156738Speter * and of course ... 157738Speter */ 15810659Speter # define BITSPERBYTE 8 15910659Speter #endif vax 16010659Speter 16130030Smckusick #ifdef tahoe 16230030Smckusick /* 16330030Smckusick * the runtime framepointer and argumentpointer registers 16430030Smckusick */ 16530030Smckusick # define P2FP 13 16630030Smckusick # define P2FPNAME "fp" 16730030Smckusick # define P2AP 13 16830030Smckusick # define P2APNAME "fp" 16930030Smckusick 17030030Smckusick /* 17130030Smckusick * the register save mask for saving no registers 17230030Smckusick */ 17330030Smckusick # define RSAVEMASK ( 0 ) 17430030Smckusick 17530030Smckusick /* 17630030Smckusick * divide check and integer overflow don't exist in the save mask 17730030Smckusick */ 17830030Smckusick # define RUNCHECK ( 0 ) 17930030Smckusick 18030030Smckusick /* 18130030Smckusick * and of course ... 18230030Smckusick */ 18330030Smckusick # define BITSPERBYTE 8 18430030Smckusick #endif tahoe 18530030Smckusick 18610659Speter #ifdef mc68000 18710659Speter /* 18811328Speter * these magic numbers lifted from pcc/mac2defs 18914905Speter * the offsets are for mapping data and address register numbers 19014905Speter * to linear register numbers. e.g. d2 ==> r2, and a2 ==> r10. 19110659Speter */ 19214905Speter # define DATA_REG_OFFSET 0 19314905Speter # define ADDR_REG_OFFSET 8 19410659Speter # define P2FPNAME "a6" 19514905Speter # define P2FP (ADDR_REG_OFFSET + 6) 19610659Speter # define P2APNAME "a6" 19714905Speter # define P2AP (ADDR_REG_OFFSET + 6) 19810659Speter 19910659Speter /* 20010659Speter * and still ... 20110659Speter */ 20210659Speter # define BITSPERBYTE 8 20310659Speter #endif mc68000 204