X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/d94e2462ae0bf5e8fb2f3108b6ba61fe4886c47c..251b09710fa057c01df8d132b6e165bd3b6c9a34:/usr/src/cmd/adb/setup.c diff --git a/usr/src/cmd/adb/setup.c b/usr/src/cmd/adb/setup.c index 8ed84a8cf9..d2f50e1aed 100644 --- a/usr/src/cmd/adb/setup.c +++ b/usr/src/cmd/adb/setup.c @@ -6,6 +6,8 @@ */ #include "defs.h" +#include "a.out.h" +SCCSID(@(#)setup.c 2.5); MSG BADNAM; @@ -31,16 +33,28 @@ L_INT entrypt; 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)) +#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; @@ -49,7 +63,7 @@ setsym() 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; @@ -64,8 +78,10 @@ setsym() 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 */ @@ -75,9 +91,14 @@ setsym() 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); + IF (symflg & STABTYPES) != 0 + THEN + symptr->typslave=XSYM; + FI symptr++; OD FI @@ -85,29 +106,37 @@ setsym() FI FI IF magic==0 THEN txtmap.e1=maxfile; FI +#endif } setcor() { +#ifndef EDDT 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); - 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 +#endif } +#ifndef EDDT create(f) STRING f; { int fd; @@ -136,3 +165,4 @@ STRING filnam; FI return(fsym); } +#endif