📄 objfmt.h.new
字号:
/*- * 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 OBJstruct 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 OBJstruct 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 OBJstruct 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -