home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / adb / findfn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1007 b   |  58 lines

  1. #
  2. /*
  3.  *
  4.  *    UNIX debugger
  5.  *
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10.  
  11. MSG        NOCFN;
  12.  
  13. INT        callpc;
  14. BOOL        localok;
  15. SYMTAB        symbol;
  16.  
  17. STRING        errflg;
  18.  
  19.  
  20. findroutine(cframe)
  21.     L_INT        cframe;
  22. {
  23.     REG INT        narg, inst;
  24.     INT        lastpc, back2;
  25.     BOOL        v;
  26.  
  27.     v=FALSE; localok=FALSE; lastpc=callpc;
  28.     callpc=get(cframe+2, DSP); back2=get(leng(callpc-2), ISP);
  29.     IF (inst=get(leng(callpc-4), ISP)) == 04737    /* jsr pc,*$... */
  30.     THEN    narg = 1;
  31.     ELIF (inst&~077)==04700            /* jsr pc,... */
  32.     THEN    narg=0; v=(inst!=04767);
  33.     ELIF (back2&~077)==04700
  34.     THEN    narg=0; v=TRUE;
  35.     ELSE    errflg=NOCFN;
  36.         return(0);
  37.     FI
  38.     IF findsym( (v ? lastpc : ((inst==04767?callpc:0) + back2) ),ISYM) == -1
  39.         ANDF !v
  40.     THEN    symbol.symc[0] = '?';
  41.         symbol.symc[1] = 0;
  42.         symbol.symv = 0;
  43.     ELSE    localok=TRUE;
  44.     FI
  45.     inst = get(leng(callpc), ISP);
  46.     IF inst == 05726        /* tst (sp)+ */
  47.     THEN    return(narg+1);
  48.     FI
  49.     IF inst == 022626        /* cmp (sp)+,(sp)+ */
  50.     THEN    return(narg+2);
  51.     FI
  52.     IF inst == 062706        /* add $n,sp */
  53.     THEN    return(narg+get(leng(callpc+2), ISP)/2);
  54.     FI
  55.     return(narg);
  56. }
  57.  
  58.