home *** CD-ROM | disk | FTP | other *** search
- #
- /*
- *
- * 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);
- }
-
-