BSD 3 development
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Wed, 26 Dec 1979 17:15:01 +0000 (09:15 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Wed, 26 Dec 1979 17:15:01 +0000 (09:15 -0800)
Work on file usr/src/cmd/adb/setup.c.512

Synthesized-from: 3bsd

usr/src/cmd/adb/setup.c.512 [new file with mode: 0644]

diff --git a/usr/src/cmd/adb/setup.c.512 b/usr/src/cmd/adb/setup.c.512
new file mode 100644 (file)
index 0000000..9b36970
--- /dev/null
@@ -0,0 +1,187 @@
+#
+/*
+ *
+ *     UNIX debugger
+ *
+ */
+
+#include "defs.h"
+#include <pagsiz.h>
+SCCSID(@(#)setup.c     2.5);
+
+
+MSG            BADNAM;
+MSG            BADMAG;
+
+MAP            txtmap;
+MAP            datmap;
+SYMSLAVE       *symvec;
+INT            wtflag;
+INT            fcor;
+INT            fsym;
+L_INT          maxfile;
+L_INT          maxstor;
+L_INT          txtsiz;
+L_INT          datsiz;
+L_INT          datbas;
+L_INT          stksiz;
+STRING         errflg;
+INT            magic;
+L_INT          symbas;
+L_INT          symnum;
+L_INT          entrypt;
+
+INT            argcount;
+INT            signo;
+struct user u;
+
+STRING         symfil  = "a.out";
+STRING         corfil  = "core";
+
+#define TXTHDRSIZ      (sizeof(txthdr))
+
+#ifndef EDDT
+readl(f,p,n) int f,n; long * p;{
+#ifndef vax
+       int t=0;
+       do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n);
+       return(t);
+#else
+       return(read(f,p,n*sizeof(long)));
+#endif
+}
+#endif
+
+setsym()
+{
+#ifndef EDDT
+       INT             relflg;
+       INT             symval, symflg;
+       SYMSLAVE        *symptr;
+       SYMPTR          symp;
+       TXTHDR          txthdr;
+
+       fsym=getfile(symfil,1);
+       txtmap.ufd=fsym;
+       IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
+       THEN    magic=txthdr[0];
+               IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413
+               THEN    magic=0;
+               ELSE
+                       symnum=txthdr[4]/SYMTABSIZ;
+                       txtsiz=txthdr[1];
+                       datsiz=txthdr[2];
+                       symbas=txtsiz+datsiz;
+                       txtmap.f1=txtmap.f2=TXTHDRSIZ;
+                       switch (magic) {
+
+                       case 0412:
+                               txtmap.f1=txtmap.f2=PAGSIZ;
+                       case 0407:
+                               txtmap.b1=0;
+                               txtmap.e1=symbas;
+                               txtmap.b2=datbas=0;
+                               txtmap.e2=symbas;
+                               break;
+
+                       case 0413:
+                               txtmap.f1=txtmap.f2=PAGSIZ;
+                       case 0410:
+                               txtmap.b1=0;
+                               txtmap.e1=txtsiz;
+                               txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ);
+                               txtmap.e2=datbas+datsiz;
+                               txtmap.f2+=txtmap.e1;
+                       }
+                       entrypt=txthdr[5];
+                       symbas += txthdr[6]+txthdr[7];
+                       symbas += magic==0412||magic==0413 ? PAGSIZ : TXTHDRSIZ;
+
+                       /* set up symvec */
+                       symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE));
+                       IF (symptr=symvec)==-1
+                       THEN    printf("%s\n",BADNAM);
+                               symptr=symvec=sbrk(sizeof (SYMSLAVE));
+                       ELSE    symset();
+                               WHILE (symp=symget()) ANDF errflg==0
+                               DO  symflg=symp->symf;
+                                   symptr->valslave=symp->symv;
+                                   symptr->typslave=SYMTYPE(symflg);
+#define STABTYPES 0340 /* from <a.out.h> */
+                                   IF (symflg & STABTYPES) != 0
+                                   THEN
+                                       symptr->typslave = XSYM;
+                                   FI
+                                   symptr++;
+                               OD
+                       FI
+                       symptr->typslave=ESYM;
+               FI
+       FI
+       IF magic==0 THEN txtmap.e1=maxfile; FI
+#endif
+}
+
+setcor()
+{
+#ifndef EDDT
+       fcor=getfile(corfil,2);
+       datmap.ufd=fcor;
+       IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
+          ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L
+          ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L
+       THEN    signo = u.u_arg[0]&017;
+               txtsiz = ctob(u.u_tsize);
+               datsiz = ctob(u.u_dsize);
+               stksiz = ctob(u.u_ssize);
+               datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
+               if (magic==0413)
+                       datmap.b1 = datbas = txtsiz;
+               datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
+               datmap.f1 = ctob(UPAGES);
+               datmap.b2 = maxstor-stksiz;
+               datmap.e2 = maxstor;
+               datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413)
+                                            ? datsiz : datmap.e1);
+               signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int));
+               IF magic ANDF magic!=u.u_exdata.ux_mag
+               THEN    printf("%s , object = %o, core = %o\n"
+                                  ,BADMAG
+                                  ,magic
+                                  ,u.u_exdata.ux_mag);
+               FI
+       ELSE    datmap.e1 = maxfile;
+       FI
+#endif
+}
+
+#ifndef EDDT
+create(f)
+STRING f;
+{      int fd;
+       IF (fd=creat(f,0644))>=0
+       THEN close(fd); return(open(f,wtflag));
+       ELSE return(-1);
+       FI
+}
+
+getfile(filnam,cnt)
+STRING filnam;
+{
+       REG INT         fsym;
+
+       IF !eqstr("-",filnam)
+       THEN    fsym=open(filnam,wtflag);
+               IF fsym<0 ANDF argcount>cnt
+               THEN    IF wtflag
+                       THEN    fsym=create(filnam);
+                       FI
+                       IF fsym<0
+                       THEN printf("cannot open `%s'\n", filnam);
+                       FI
+               FI
+       ELSE    fsym = -1;
+       FI
+       return(fsym);
+}
+#endif