findfn.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 58 行

C
58
字号
#/* * *	UNIX debugger * */#include "defs.h"MSG		NOCFN;INT		callpc;BOOL		localok;SYMTAB		symbol;STRING		errflg;findroutine(cframe)	L_INT		cframe;{	REG INT		narg, inst;	INT		lastpc, back2;	BOOL		v;	v=FALSE; localok=FALSE; lastpc=callpc;	callpc=get(cframe+2, DSP); back2=get(leng(callpc-2), ISP);	IF (inst=get(leng(callpc-4), ISP)) == 04737	/* jsr pc,*$... */	THEN	narg = 1;	ELIF (inst&~077)==04700			/* jsr pc,... */	THEN	narg=0; v=(inst!=04767);	ELIF (back2&~077)==04700	THEN	narg=0; v=TRUE;	ELSE	errflg=NOCFN;		return(0);	FI	IF findsym( (v ? lastpc : ((inst==04767?callpc:0) + back2) ),ISYM) == -1	    ANDF !v	THEN	symbol.symc[0] = '?';		symbol.symc[1] = 0;		symbol.symv = 0;	ELSE	localok=TRUE;	FI	inst = get(leng(callpc), ISP);	IF inst == 05726		/* tst (sp)+ */	THEN	return(narg+1);	FI	IF inst == 022626		/* cmp (sp)+,(sp)+ */	THEN	return(narg+2);	FI	IF inst == 062706		/* add $n,sp */	THEN	return(narg+get(leng(callpc+2), ISP)/2);	FI	return(narg);}

⌨️ 快捷键说明

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