⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objfmt.h.new

📁 早期freebsd实现
💻 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 + -