1736Speter /* Copyright (c) 1979 Regents of the University of California */ 2736Speter 3*10660Speter /* static char sccsid[] = "@(#)objfmt.h 1.11 02/01/83"; */ 4736Speter 5*10660Speter /* 6*10660Speter * The size of the display. 7*10660Speter */ 8*10660Speter #define DSPLYSZ 20 9*10660Speter 10*10660Speter /* 11*10660Speter * The structure of the runtime display 12*10660Speter */ 13736Speter #ifdef OBJ 14*10660Speter struct dispsave { 15*10660Speter char *locvars; /* pointer to local variables */ 16*10660Speter struct blockmark *stp; /* pointer to local stack frame */ 17*10660Speter }; 18736Speter /* 19*10660Speter * The following union allows fast access to 20*10660Speter * precomputed display entries 21*10660Speter */ 22*10660Speter union display { 23*10660Speter struct dispsave frame[DSPLYSZ]; 24*10660Speter char *raw[2*DSPLYSZ]; 25*10660Speter } display; 26*10660Speter #endif OBJ 27*10660Speter #ifdef PC 28*10660Speter #ifdef vax 29*10660Speter /* 30*10660Speter * the display is made up of saved AP's and FP's. 31*10660Speter * FP's are used to find locals, 32*10660Speter * and AP's are used to find parameters. 33*10660Speter * FP and AP are untyped pointers, 34*10660Speter * but are used throughout as (char *). 35*10660Speter * the display is used by adding AP_OFFSET or FP_OFFSET to the 36*10660Speter * address of the approriate display entry. 37*10660Speter */ 38*10660Speter struct dispsave { 39*10660Speter char *savedAP; 40*10660Speter char *savedFP; 41*10660Speter } display[ DSPLYSZ ]; 42*10660Speter 43*10660Speter # define AP_OFFSET ( 0 ) 44*10660Speter # define FP_OFFSET ( sizeof (char *) ) 45*10660Speter #endif vax 46*10660Speter #ifdef mc68000 47*10660Speter /* 48*10660Speter * the display is just the saved a6. 49*10660Speter * arguments are at positive offsets, 50*10660Speter * locals are at negative offsets. 51*10660Speter * there are no offsets within the saved display structure. 52*10660Speter */ 53*10660Speter struct dispsave { 54*10660Speter char *saveda6; 55*10660Speter } display[ DSPLYSZ ]; 56*10660Speter 57*10660Speter # define AP_OFFSET (0) 58*10660Speter # define FP_OFFSET (0) 59*10660Speter #endif mc68000 60*10660Speter #endif PC 61*10660Speter 62*10660Speter /* 63*10660Speter * the structure below describes the block mark used by the architecture. 64*10660Speter * this is the space used by the machine between the arguments and the 65*10660Speter * whatever is used to point to the arguments. 66*10660Speter */ 67*10660Speter #ifdef OBJ 68*10660Speter struct blockmark { 69*10660Speter char *tos; /* pointer to top of stack frame */ 70*10660Speter struct iorec *file; /* pointer to active file name */ 71*10660Speter struct hdr { 72*10660Speter long framesze; /* number of bytes of local vars */ 73*10660Speter long nargs; /* number of bytes of arguments */ 74*10660Speter long tests; /* TRUE => perform runtime tests */ 75*10660Speter short offset; /* offset of procedure in source file */ 76*10660Speter char name[1]; /* name of active procedure */ 77*10660Speter } *entry; 78*10660Speter struct dispsave odisp; /* previous display value for this level */ 79*10660Speter struct dispsave *dp; /* pointer to active display entry */ 80*10660Speter char *pc; /* previous location counter */ 81*10660Speter long lino; /* previous line number */ 82*10660Speter }; 83*10660Speter #endif OBJ 84*10660Speter #ifdef PC 85*10660Speter #ifdef vax 86*10660Speter /* 87*10660Speter * since we have the ap pointing to the number of args: 88*10660Speter */ 89*10660Speter struct blockmark { 90*10660Speter long nargs; 91*10660Speter }; 92*10660Speter #endif vax 93*10660Speter #ifdef mc68000 94*10660Speter /* 95*10660Speter * there's the saved pc (from the jsr) 96*10660Speter * and the saved a6 (from the link a6). 97*10660Speter */ 98*10660Speter struct blockmark { 99*10660Speter char *savedpc; 100*10660Speter char *saveda6; 101*10660Speter }; 102*10660Speter #endif mc68000 103*10660Speter #endif PC 104*10660Speter 105*10660Speter /* 106*10660Speter * formal routine structure: 107*10660Speter */ 108*10660Speter struct formalrtn { 109*10660Speter long (*fentryaddr)(); /* formal entry point */ 110*10660Speter long fbn; /* block number of function */ 111*10660Speter struct dispsave fdisp[ DSPLYSZ ]; /* saved at first passing */ 112*10660Speter } frtn; 113*10660Speter 114*10660Speter #define FENTRYOFFSET 0 115*10660Speter #define FBNOFFSET ( FENTRYOFFSET + sizeof frtn.fentryaddr ) 116*10660Speter #define FDISPOFFSET ( FBNOFFSET + sizeof frtn.fbn ) 117*10660Speter 118*10660Speter #ifdef OBJ 119*10660Speter /* 120736Speter * the creation time, the size and the magic number of the obj file 121736Speter */ 122736Speter struct pxhdr { 1232948Smckusic long maketime; 1242948Smckusic long objsize; 1255642Smckusic long symtabsize; 126736Speter short magicnum; 127736Speter }; 128736Speter 129*10660Speter #ifdef vax 1305642Smckusic # define HEADER_BYTES 1536 /* the size of px_header */ 131*10660Speter #endif vax 132*10660Speter #ifdef mc68000 133*10660Speter # define HEADER_BYTES 3072 /* the size of px_header */ 134*10660Speter #endif mc68000 1352088Smckusic # define INDX 1 /* amt to shift display index */ 136736Speter #endif OBJ 137736Speter 138736Speter /* 139736Speter * these are because of varying sizes of pointers 140736Speter */ 141*10660Speter #ifdef ADDR16 142*10660Speter # define PTR_AS O_AS2 143*10660Speter # define PTR_RV O_RV2 144*10660Speter # define PTR_IND O_IND2 145*10660Speter # define PTR_CON O_CON2 146*10660Speter # define PTR_DUP O_SDUP2 147*10660Speter # define CON_INT O_CON2 148*10660Speter # define INT_TYP (nl + T2INT) 149*10660Speter # define PTR_DCL char * 150*10660Speter # define TOOMUCH 50000 151*10660Speter # define SHORTADDR 65536 152*10660Speter # define MAXSET 65536 /* maximum set size */ 153*10660Speter #endif ADDR16 154*10660Speter #ifdef ADDR32 155736Speter # define PTR_AS O_AS4 156736Speter # define PTR_RV O_RV4 157736Speter # define PTR_IND O_IND4 1582948Smckusic # define PTR_CON O_CON4 1592948Smckusic # define PTR_DUP O_SDUP4 1603171Smckusic # define CON_INT O_CON24 1613171Smckusic # define INT_TYP (nl + T4INT) 162736Speter # define PTR_DCL unsigned long /* for pointer variables */ 163736Speter # define SHORTADDR 32768 /* maximum short address */ 164736Speter # define TOOMUCH 65536 /* maximum variable size */ 165736Speter # define MAXSET 65536 /* maximum set size */ 166*10660Speter #endif ADDR32 167*10660Speter /* 168*10660Speter * Offsets due to the structure of the runtime stack. 169*10660Speter * DPOFF1 is the amount of fixed storage in each block allocated 170*10660Speter * as local variables for the runtime system. 171*10660Speter * since locals are allocated negative offsets, 172*10660Speter * -DPOFF1 is the last used implicit local offset. 173*10660Speter * DPOFF2 is the size of the block mark. 174*10660Speter * since arguments are allocated positive offsets, 175*10660Speter * DPOFF2 is the end of the implicit arguments. 176*10660Speter * for obj, the first argument has the highest offset 177*10660Speter * from the stackpointer. and the block mark is an 178*10660Speter * implicit last parameter. 179*10660Speter * for pc, the first argument has the lowest offset 180*10660Speter * from the argumentpointer. and the block mark is an 181*10660Speter * implicit first parameter. 182*10660Speter */ 183736Speter # ifdef OBJ 184*10660Speter # ifdef ADDR32 185*10660Speter # define MAGICNUM 0403 /* obj magic number */ 186*10660Speter # define DPOFF1 0 187*10660Speter # define DPOFF2 (sizeof (struct blockmark)) 188*10660Speter # define INPUT_OFF -8 /* offset of `input' */ 189*10660Speter # define OUTPUT_OFF -4 /* offset of `output' */ 190*10660Speter # endif ADDR32 191*10660Speter # ifdef ADDR16 192*10660Speter # define MAGICNUM 0404 193*10660Speter # define DPOFF1 0 194*10660Speter # define DPOFF2 (sizeof (struct blockmark)) 195*10660Speter # define INPUT_OFF -2 196*10660Speter # define OUTPUT_OFF -4 197*10660Speter # endif ADDR16 198736Speter # endif OBJ 199736Speter # ifdef PC 200*10660Speter # define DPOFF1 ( sizeof (struct rtlocals) ) 201*10660Speter # define DPOFF2 ( sizeof (struct blockmark) ) 202736Speter # define INPUT_OFF 0 203736Speter # define OUTPUT_OFF 0 204736Speter # endif PC 205