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

📄 crt0.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic	char *sccsid = "@(#)crt0.c	4.1	ULTRIX	7/3/90";#endif/*	Based on: @(#)crt0.c	4.6 (Berkeley) 3/30/83 *//* *	C start up routine. *	Robert Henry, UCB, 20 Oct 81 * *	We make the following (true) assumptions: *	1) when the kernel calls start, it does a jump to location 2, *	and thus avoids the register save mask.  We are NOT called *	with a calls!  see sys1.c:setregs(). *	2) The only register variable that we can trust is sp, *	which points to the base of the kernel calling frame. *	Do NOT believe the documentation in exec(2) regarding the *	values of fp and ap. *	3) We can allocate as many register variables as we want, *	and don't have to save them for anybody. *	4) Because of the ways that asm's work, we can't have *	any automatic variables allocated on the stack, because *	we must catch the value of sp before any automatics are *	allocated. */char **__environ;asm("#define _start start");asm("#define _eprol eprol");extern	unsigned char	etext;extern	unsigned char	eprol;start(){	struct kframe {		int	kargc;		char	*kargv[1];	/* size depends on kargc */		char	kargstr[1];	/* size varies */		char	kenvstr[1];	/* size varies */	};	/*	 *	ALL REGISTER VARIABLES!!!	 */	register int r11;		/* needed for init */	register struct kframe *kfp;	/* r10 */	register char **targv;	register char **argv;#ifdef lint	kfp = 0;	initcode = initcode = 0;#else not lint	asm("	movl	sp,r10");	/* catch it quick */#endif not lint	for (argv = targv = &kfp->kargv[0]; *targv++; /* void */)		/* void */ ;	if (targv >= (char **)(*argv))		--targv;	__environ = targv;asm("eprol:");#ifdef MCRT0	monstartup(&eprol, &etext);#endif MCRT0	exit(main(kfp->kargc, argv, __environ));}asm("#undef _start");asm("#undef _eprol");#ifdef MCRT0/*ARGSUSED*/exit(code)	register int code;	/* r11 */{	monitor(0);	_cleanup();	asm("	movl r11,r0");	asm("	chmk $1");}#endif MCRT0#ifdef CRT0/* * null mcount and moncontrol, * just in case some routine is compiled for profiling */moncontrol(val)	int val;{}asm("	.globl	mcount");asm("mcount:	rsb");#endif CRT0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -