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

  1. #
  2. /*
  3.  *
  4.  *    UNIX debugger
  5.  *
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10.  
  11. MSG        BADNAM;
  12. MSG        BADMAG;
  13.  
  14. MAP        txtmap;
  15. MAP        datmap;
  16. SYMSLAVE    *symvec;
  17. INT        wtflag;
  18. INT        fcor;
  19. INT        fsym;
  20. L_INT        maxfile;
  21. L_INT        maxstor;
  22. L_INT        txtsiz;
  23. L_INT        datsiz;
  24. L_INT        datbas;
  25. L_INT        stksiz;
  26. STRING        errflg;
  27. INT        magic;
  28. L_INT        symbas;
  29. L_INT        symnum;
  30. L_INT        entrypt;
  31.  
  32. INT        argcount;
  33. INT        signo;
  34. POS        corhdr[512];
  35. POS        *endhdr &corhdr[512];
  36.  
  37. STRING        symfil    "a.out";
  38. STRING        corfil    "core";
  39.  
  40. #define TXTHDRSIZ    (sizeof(txthdr))
  41.  
  42. setsym()
  43. {
  44.     INT        relflg;
  45.     INT        symval, symflg;
  46.     SYMSLAVE    *symptr;
  47.     SYMPTR        symp;
  48.     TXTHDR        txthdr;
  49.  
  50.     fsym=getfile(symfil,1);
  51.     txtmap.ufd=fsym;
  52.     IF read(fsym, txthdr, TXTHDRSIZ)==TXTHDRSIZ
  53.     THEN    magic=txthdr[0];
  54.         IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
  55.         THEN    magic=0;
  56.         ELSE    symnum=txthdr[4]/SYMTABSIZ;
  57.             txtsiz=txthdr[1];
  58.             datsiz=txthdr[2];
  59.             symbas=txtsiz+datsiz;
  60.             txtmap.b1=0;
  61.             txtmap.e1=(magic==0407?symbas:txtsiz);
  62.             txtmap.f1 = TXTHDRSIZ;
  63.             txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0);
  64.             txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
  65.             txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
  66.             entrypt=txthdr[5];
  67.             relflg=txthdr[7];
  68.             IF relflg!=1 THEN symbas =<< 1; FI
  69.             symbas += TXTHDRSIZ;
  70.  
  71.             /* set up symvec */
  72.             symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE));
  73.             IF (symptr=symvec)==-1
  74.             THEN    printf("%s\n",BADNAM);
  75.                 symptr=symvec=sbrk(sizeof (SYMSLAVE));
  76.             ELSE    symset();
  77.                 WHILE (symp=symget()) ANDF errflg==0
  78.                 DO  symval=symp->symv; symflg=symp->symf;
  79.                     symptr->valslave=symval;
  80.                     symptr->typslave=SYMTYPE(symflg);
  81.                     symptr++;
  82.                 OD
  83.             FI
  84.             symptr->typslave=ESYM;
  85.         FI
  86.     FI
  87.     IF magic==0 THEN txtmap.e1=maxfile; FI
  88. }
  89.  
  90. setcor()
  91. {
  92.     fcor=getfile(corfil,2);
  93.     datmap.ufd=fcor;
  94.     IF read(fcor, corhdr, ctob(USIZE))==ctob(USIZE)
  95.     THEN    txtsiz = corhdr->u_tsize << 6;
  96.         datsiz = corhdr->u_dsize << 6;
  97.         stksiz = corhdr->u_ssize << 6;
  98.         datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
  99.         datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
  100.         datmap.f1 = ctob(USIZE);
  101.         datmap.b2 = maxstor-stksiz;
  102.         datmap.e2 = maxstor;
  103.         datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
  104.         IF magic ANDF magic!=corhdr[0].u_exdata.ux_mag
  105.         THEN    printf("%s\n",BADMAG);
  106.         FI
  107.     ELSE    datmap.e1 = maxfile;
  108.     FI
  109. }
  110.  
  111. create(f)
  112. STRING    f;
  113. {    int fd;
  114.     IF (fd=creat(f,0644))>=0
  115.     THEN close(fd); return(open(f,wtflag));
  116.     ELSE return(-1);
  117.     FI
  118. }
  119.  
  120. getfile(filnam,cnt)
  121. STRING    filnam;
  122. {
  123.     REG INT        fsym;
  124.  
  125.     IF !eqstr("-",filnam)
  126.     THEN    fsym=open(filnam,wtflag);
  127.         IF fsym<0 ANDF argcount>cnt
  128.         THEN    IF wtflag
  129.             THEN    fsym=create(filnam);
  130.             FI
  131.             IF fsym<0
  132.             THEN printf("cannot open `%s'\n", filnam);
  133.             FI
  134.         FI
  135.     ELSE    fsym = -1;
  136.     FI
  137.     return(fsym);
  138. }
  139.