home *** CD-ROM | disk | FTP | other *** search
- /*-
- * Copyright (c) 1980 The Regents of the University of California.
- * All rights reserved.
- *
- * %sccs.include.redist.c%
- *
- * %W% (Berkeley) %G%
- */
-
- /*
- * The size of the display.
- */
- #define DSPLYSZ 20
-
- /*
- * The structure of the runtime display
- */
- #ifdef OBJ
- struct dispsave {
- char *locvars; /* pointer to local variables */
- struct blockmark *stp; /* pointer to local stack frame */
- };
- /*
- * The following union allows fast access to
- * precomputed display entries
- */
- union display {
- struct dispsave frame[DSPLYSZ];
- char *raw[2*DSPLYSZ];
- } display;
- #endif OBJ
- #ifdef PC
- #ifdef vax
- /*
- * the display is made up of saved AP's and FP's.
- * FP's are used to find locals,
- * and AP's are used to find parameters.
- * FP and AP are untyped pointers,
- * but are used throughout as (char *).
- * the display is used by adding AP_OFFSET or FP_OFFSET to the
- * address of the approriate display entry.
- */
- struct dispsave {
- char *savedAP;
- char *savedFP;
- } display[ DSPLYSZ ];
-
- # define AP_OFFSET ( 0 )
- # define FP_OFFSET ( sizeof (char *) )
- #endif vax
- #ifdef mc68000
- /*
- * the display is just the saved a6.
- * arguments are at positive offsets,
- * locals are at negative offsets.
- * there are no offsets within the saved display structure.
- */
- struct dispsave {
- char *saveda6;
- } display[ DSPLYSZ ];
-
- # define AP_OFFSET (0)
- # define FP_OFFSET (0)
- #endif mc68000
- #ifdef tahoe
- /*
- * the display is just the saved FP.
- * arguments are at positive offsets,
- * locals are at negative offsets.
- * there are no offsets within the saved display structure.
- */
- struct dispsave {
- char *savedFP;
- } display[ DSPLYSZ ];
-
- # define AP_OFFSET 0
- # define FP_OFFSET 0
- #endif tahoe
- #endif PC
-
- /*
- * the structure below describes the block mark used by the architecture.
- * this is the space used by the machine between the arguments and the
- * whatever is used to point to the arguments.
- */
- #ifdef OBJ
- struct blockmark {
- char *tos; /* pointer to top of stack frame */
- struct iorec *file; /* pointer to active file name */
- struct hdr {
- long framesze; /* number of bytes of local vars */
- long nargs; /* number of bytes of arguments */
- long tests; /* TRUE => perform runtime tests */
- short offset; /* offset of procedure in source file */
- char name[1]; /* name of active procedure */
- } *entry;
- struct dispsave odisp; /* previous display value for this level */
- struct dispsave *dp; /* pointer to active display entry */
- char *pc; /* previous location counter */
- long lino; /* previous line number */
- };
- #endif OBJ
- #ifdef PC
- #ifdef vax
- /*
- * since we have the ap pointing to the number of args:
- */
- struct blockmark {
- long nargs;
- };
- #endif vax
- #ifdef mc68000
- /*
- * there's the saved pc (from the jsr)
- * and the saved a6 (from the link a6).
- */
- struct blockmark {
- char *savedpc;
- char *saveda6;
- };
- #endif mc68000
- #ifdef tahoe
- /*
- * since we have the fp pointing to its predecessor
- */
- struct blockmark {
- long savedfp;
- };
- #endif tahoe
- #endif PC
-
- /*
- * formal routine structure:
- */
- struct formalrtn {
- long (*fentryaddr)(); /* formal entry point */
- long fbn; /* block number of function */
- struct dispsave fdisp[ DSPLYSZ ]; /* saved at first passing */
- };
- #ifndef PC
- #ifndef OBJ
- struct formalrtn frtn;
- #endif
- #endif
-
- #define FENTRYOFFSET 0
- #define FBNOFFSET ( FENTRYOFFSET + sizeof frtn.fentryaddr )
- #define FDISPOFFSET ( FBNOFFSET + sizeof frtn.fbn )
-
- #ifdef OBJ
- /*
- * the creation time, the size and the magic number of the obj file
- */
- struct pxhdr {
- long maketime;
- long objsize;
- long symtabsize;
- short magicnum;
- };
-
- /*
- * START defines the beginning of the text space.
- * This should be the defined external label "start",
- * however there is no way to access externals from C
- * whose names do not begin with an "_".
- */
- #ifdef vax
- # define HEADER_BYTES 2048 /* the size of px_header */
- # define START 0x0 /* beginning of text */
- #endif vax
- #ifdef tahoe
- # define HEADER_BYTES 2048 /* the size of px_header */
- # define START 0x0 /* beginning of text */
- #endif tahoe
- #ifdef mc68000
- # define HEADER_BYTES 3072 /* the size of px_header */
- # define START 0x8000 /* beginning of text */
- #endif mc68000
- # define INDX 1 /* amt to shift display index */
- # define A_OBJSTACK 2 /* interpreter stack alignment */
- #endif OBJ
-
- /*
- * these are because of varying sizes of pointers
- */
- #ifdef ADDR16
- # define PTR_AS O_AS2
- # define PTR_RV O_RV2
- # define PTR_IND O_IND2
- # define PTR_CON O_CON2
- # define PTR_DUP O_SDUP2
- # define CON_INT O_CON2
- # define INT_TYP (nl + T2INT)
- # define PTR_DCL char *
- # define TOOMUCH 50000
- # define SHORTADDR 65536
- # define MAXSET 65536 /* maximum set size */
- #endif ADDR16
- #ifdef ADDR32
- # define PTR_AS O_AS4
- # define PTR_RV O_RV4
- # define PTR_IND O_IND4
- # define PTR_CON O_CON4
- # define PTR_DUP O_SDUP4
- # define CON_INT O_CON24
- # define INT_TYP (nl + T4INT)
- # define PTR_DCL unsigned long /* for pointer variables */
- # define SHORTADDR 32768 /* maximum short address */
- # define TOOMUCH 65536 /* maximum variable size */
- # define MAXSET 65536 /* maximum set size */
- #endif ADDR32
- /*
- * Offsets due to the structure of the runtime stack.
- * DPOFF1 is the amount of fixed storage in each block allocated
- * as local variables for the runtime system.
- * since locals are allocated negative offsets,
- * -DPOFF1 is the last used implicit local offset.
- * DPOFF2 is the size of the block mark.
- * since arguments are allocated positive offsets,
- * DPOFF2 is the end of the implicit arguments.
- * for obj, the first argument has the highest offset
- * from the stackpointer. and the block mark is an
- * implicit last parameter.
- * for pc, the first argument has the lowest offset
- * from the argumentpointer. and the block mark is an
- * implicit first parameter.
- */
- # ifdef OBJ
- # ifdef ADDR32
- # define MAGICNUM 0403 /* obj magic number */
- # define DPOFF1 0
- # define DPOFF2 (sizeof (struct blockmark))
- # define INPUT_OFF -8 /* offset of `input' */
- # define OUTPUT_OFF -4 /* offset of `output' */
- # endif ADDR32
- # ifdef ADDR16
- # define MAGICNUM 0404
- # define DPOFF1 0
- # define DPOFF2 (sizeof (struct blockmark))
- # define INPUT_OFF -2
- # define OUTPUT_OFF -4
- # endif ADDR16
- # endif OBJ
- # ifdef PC
- # define DPOFF1 ( sizeof (struct rtlocals) )
- # define DPOFF2 ( sizeof (struct blockmark) )
- # define INPUT_OFF 0
- # define OUTPUT_OFF 0
- # endif PC
-