Bell 32V release
[unix-history] / usr / src / cmd / adb / setup.c
index 8ed84a8..d2f50e1 100644 (file)
@@ -6,6 +6,8 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
+#include "a.out.h"
+SCCSID(@(#)setup.c     2.5);
 
 
 MSG            BADNAM;
 
 
 MSG            BADNAM;
@@ -31,16 +33,28 @@ L_INT               entrypt;
 
 INT            argcount;
 INT            signo;
 
 INT            argcount;
 INT            signo;
-POS            corhdr[512];
-POS            *endhdr &corhdr[512];
+struct user u;
 
 
-STRING         symfil  "a.out";
-STRING         corfil  "core";
+STRING         symfil  "a.out";
+STRING         corfil  "core";
 
 #define TXTHDRSIZ      (sizeof(txthdr))
 
 
 #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()
 {
 setsym()
 {
+#ifndef EDDT
        INT             relflg;
        INT             symval, symflg;
        SYMSLAVE        *symptr;
        INT             relflg;
        INT             symval, symflg;
        SYMSLAVE        *symptr;
@@ -49,7 +63,7 @@ setsym()
 
        fsym=getfile(symfil,1);
        txtmap.ufd=fsym;
 
        fsym=getfile(symfil,1);
        txtmap.ufd=fsym;
-       IF read(fsym, txthdr, TXTHDRSIZ)==TXTHDRSIZ
+       IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
        THEN    magic=txthdr[0];
                IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
                THEN    magic=0;
        THEN    magic=txthdr[0];
                IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
                THEN    magic=0;
@@ -64,8 +78,10 @@ setsym()
                        txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
                        txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
                        entrypt=txthdr[5];
                        txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
                        txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
                        entrypt=txthdr[5];
-                       relflg=txthdr[7];
-                       IF relflg!=1 THEN symbas =<< 1; FI
+       /*              relflg=txthdr[7];
+       /*              IF relflg!=1 THEN symbas =<< 1; FI
+       */
+                       symbas += txthdr[6]+txthdr[7];
                        symbas += TXTHDRSIZ;
 
                        /* set up symvec */
                        symbas += TXTHDRSIZ;
 
                        /* set up symvec */
@@ -75,9 +91,14 @@ setsym()
                                symptr=symvec=sbrk(sizeof (SYMSLAVE));
                        ELSE    symset();
                                WHILE (symp=symget()) ANDF errflg==0
                                symptr=symvec=sbrk(sizeof (SYMSLAVE));
                        ELSE    symset();
                                WHILE (symp=symget()) ANDF errflg==0
-                               DO  symval=symp->symv; symflg=symp->symf;
-                                   symptr->valslave=symval;
+                               DO 
+                                   symflg=symp->symf;
+                                   symptr->valslave=symp->symv;
                                    symptr->typslave=SYMTYPE(symflg);
                                    symptr->typslave=SYMTYPE(symflg);
+                                   IF (symflg & STABTYPES) != 0
+                                   THEN
+                                       symptr->typslave=XSYM;
+                                   FI
                                    symptr++;
                                OD
                        FI
                                    symptr++;
                                OD
                        FI
@@ -85,29 +106,37 @@ setsym()
                FI
        FI
        IF magic==0 THEN txtmap.e1=maxfile; FI
                FI
        FI
        IF magic==0 THEN txtmap.e1=maxfile; FI
+#endif
 }
 
 setcor()
 {
 }
 
 setcor()
 {
+#ifndef EDDT
        fcor=getfile(corfil,2);
        datmap.ufd=fcor;
        fcor=getfile(corfil,2);
        datmap.ufd=fcor;
-       IF read(fcor, corhdr, ctob(USIZE))==ctob(USIZE)
-       THEN    txtsiz = corhdr->u_tsize << 6;
-               datsiz = corhdr->u_dsize << 6;
-               stksiz = corhdr->u_ssize << 6;
+       IF read(fcor, &u, ctob(4))==ctob(4)
+          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);
                datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
                datmap.f1 = ctob(USIZE);
                datmap.b2 = maxstor-stksiz;
                datmap.e2 = maxstor;
                datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
                datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
                datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
                datmap.f1 = ctob(USIZE);
                datmap.b2 = maxstor-stksiz;
                datmap.e2 = maxstor;
                datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
-               IF magic ANDF magic!=corhdr[0].u_exdata.ux_mag
+               signo = *(ADDR *)(((ADDR)&u)+ctob(4)-4*4);
+               IF magic ANDF magic!=u.u_exdata.ux_mag
                THEN    printf("%s\n",BADMAG);
                FI
        ELSE    datmap.e1 = maxfile;
        FI
                THEN    printf("%s\n",BADMAG);
                FI
        ELSE    datmap.e1 = maxfile;
        FI
+#endif
 }
 
 }
 
+#ifndef EDDT
 create(f)
 STRING f;
 {      int fd;
 create(f)
 STRING f;
 {      int fd;
@@ -136,3 +165,4 @@ STRING      filnam;
        FI
        return(fsym);
 }
        FI
        return(fsym);
 }
+#endif