non-working version
authorBill Joy <root@ucbvax.Berkeley.EDU>
Fri, 15 May 1981 11:09:14 +0000 (03:09 -0800)
committerBill Joy <root@ucbvax.Berkeley.EDU>
Fri, 15 May 1981 11:09:14 +0000 (03:09 -0800)
SCCS-vsn: old/adb/adb.vax/Makefile 4.2
SCCS-vsn: old/adb/adb.vax/access.c 4.2
SCCS-vsn: old/adb/adb.vax/command.c 4.2
SCCS-vsn: old/adb/adb.vax/defs.h 4.2
SCCS-vsn: old/adb/adb.vax/expr.c 4.2
SCCS-vsn: old/adb/adb.vax/expr.c.bad 4.2
SCCS-vsn: old/adb/adb.vax/mode.h 4.2
SCCS-vsn: old/adb/adb.vax/print.c 4.2
SCCS-vsn: old/adb/adb.vax/setup.c 4.2

usr/src/old/adb/adb.vax/Makefile
usr/src/old/adb/adb.vax/access.c
usr/src/old/adb/adb.vax/command.c
usr/src/old/adb/adb.vax/defs.h
usr/src/old/adb/adb.vax/expr.c
usr/src/old/adb/adb.vax/expr.c.bad
usr/src/old/adb/adb.vax/mode.h
usr/src/old/adb/adb.vax/print.c
usr/src/old/adb/adb.vax/setup.c

index f2e3f0e..5aca281 100644 (file)
@@ -1,5 +1,5 @@
 #
 #
-#      Makefile        4.1     81/05/14
+#      Makefile        4.2     81/05/14
 #
 DESTDIR= 
 CFLAGS=        -O -w
 #
 DESTDIR= 
 CFLAGS=        -O -w
@@ -24,7 +24,7 @@ message.o:    mac.h mode.h message.c
        ${CC} -c -R message.c
 opset.o:       defs.h opset.c
 optab.o:       defs.h optab.c
        ${CC} -c -R message.c
 opset.o:       defs.h opset.c
 optab.o:       defs.h optab.c
-       ${CC} -S -R  optab.c
+       ${CC} -c -R  optab.c
 output.o:      defs.h output.c
 pcs.o:         defs.h pcs.c
 print.o:       defs.h print.c
 output.o:      defs.h output.c
 pcs.o:         defs.h pcs.c
 print.o:       defs.h print.c
index f6c87bf..e865c5c 100644 (file)
@@ -5,8 +5,10 @@
  *
  */
 
  *
  */
 
+#define dprintf if (0) printf
+
 #include "defs.h"
 #include "defs.h"
-static char sccsid[] = "@(#)access.c 4.1 %G%";
+static char sccsid[] = "@(#)access.c 4.2 %G%";
 
 MSG            ODDADR;
 MSG            BADDAT;
 
 MSG            ODDADR;
 MSG            BADDAT;
@@ -63,7 +65,7 @@ L_INT n;
 
 #ifndef EDDT
 access(mode,adr,space,value)
 
 #ifndef EDDT
 access(mode,adr,space,value)
-L_INT  adr;
+long   adr;
 {
        INT     pmode,rd,file;
        ADDR    w;
 {
        INT     pmode,rd,file;
        ADDR    w;
@@ -97,15 +99,79 @@ L_INT       adr;
        THEN return(0);
        FI
        file=(space&DSP?datmap.ufd:txtmap.ufd);
        THEN return(0);
        FI
        file=(space&DSP?datmap.ufd:txtmap.ufd);
-       IF longseek(file,adr)==0 ORF
-          (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1
-       THEN    errflg=(space&DSP?BADDAT:BADTXT);
+       IF kernel && space == DSP THEN
+           int oadr = adr;
+           int v;
+           adr &= ~0x80000000;
+           IF oadr&0x80000000 THEN             /* system space */
+               v = btop(adr);
+               dprintf("system addr %X, v %X\n", adr, v);
+               IF v >= slr THEN errflg="bad system space addr"; return (0); FI
+               adr = vtoa(file, adr);
+               IF adr == -1 THEN
+                   errflg="sys page table page not valid"; return (0); FI
+           ELIF adr&0x40000000 THEN            /* p1 space */
+               v = btop(adr&~0x40000000);
+               dprintf("p1 addr %X, v %X, p1br %X p1lr %X\n", adr, v,
+                   pcb.pcb_p1br, pcb.pcb_p1lr);
+               IF v < pcb.pcb_p1lr THEN
+                   errflg="bad p1 space addr"; return (0); FI
+               adr = vtoa(file, pcb.pcb_p1br+v);
+               IF adr == -1 THEN
+                   errflg="p1 page table page not valid"; return (0); FI
+               goto get;
+           ELSE                                /* p0 space */
+               dprintf("p0 addr %X, v %X, p0br %X p0lr %X\n", adr,
+                  v, pcb.pcb_p0br, pcb.pcb_p0lr);
+               IF v >= pcb.pcb_p0lr THEN
+                   errflg="bad p0 space addr"; return (0); FI
+               adr = vtoa(file, pcb.pcb_p0br+v);
+               IF adr == -1 THEN
+                   errflg="p0 page table page not valid"; return (0); FI
+get:
+               dprintf("addr for pt page %X\n", adr);
+               IF physrw(file, adr, &adr, 1) < 0 THEN
+                   errflg = "page tables botched"; return (0); FI
+               dprintf("user pte value %X\n", adr);
+               IF (adr & PG_V) == 0 &&
+                   ((adr & PG_FOD) || (adr & PG_PFNUM) == 0) THEN
+                   errflg = "user page not resident"; return (0);
+               FI
+               adr = ((adr & 0xfffff) << 9) | (oadr & 0x1ff);
+           FI
+       FI
+       IF physrw(file, adr, &w, rd) < 0 THEN
+           errflg=(space&DSP?BADDAT:BADTXT);
        FI
        return(w);
        FI
        return(w);
-
 }
 #endif
 
 }
 #endif
 
+physrw(file, adr, aw, rd)
+int *aw;
+{
+
+       dprintf("physrw(%X) %s to %X\n", adr, rd ? "read" : "write", aw);
+       IF longseek(file,adr)==0 ORF
+          (rd ? read(file,aw,sizeof(int)) : write(file,aw,sizeof(int))) < 1
+       THEN     return (-1);
+       FI
+       return (0);
+}
+
+vtoa(file, va)
+unsigned long va;
+{
+       struct pte pte;
+
+       physrw(file, ((long)(sbr + btop(va&0x7fffffff)))&~0x80000000, &pte, 1);
+       dprintf("vtoa got pte %X\n", pte);
+       if (pte.pg_v || (pte.pg_fod == 0 && pte.pg_pfnum))
+               return (ptob(pte.pg_pfnum) + (va & PGOFSET));
+       errflg = "page not resident";
+       return (-1);
+}
+       
 chkmap(adr,space)
        REG L_INT       *adr;
        REG INT         space;
 chkmap(adr,space)
        REG L_INT       *adr;
        REG INT         space;
index 7e7e654..5f11ef5 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
-static char sccsid[] = "@(#)command.c 4.1 %G%";
+static char sccsid[] = "@(#)command.c 4.2 %G%";
 
 MSG            BADEQ;
 MSG            NOMATCH;
 
 MSG            BADEQ;
 MSG            NOMATCH;
@@ -178,6 +178,12 @@ CHAR               defcom;
                     ptrace(WUREGS,pid,regptr,* (ADDR *) (((ADDR)&u)+regptr));
                ELIF (modifier=varchk(savc)) != -1
                THEN    var[modifier]=dot;
                     ptrace(WUREGS,pid,regptr,* (ADDR *) (((ADDR)&u)+regptr));
                ELIF (modifier=varchk(savc)) != -1
                THEN    var[modifier]=dot;
+                       IF kcore && savc == 'p' THEN
+                               int pte = access(RD, dot, DSP, 0);
+                               printf("pte %X\n", pte);
+                               masterpcbb = (pte&PG_PFNUM)*512;
+                               getpcb();
+                       FI
                ELSE    error(BADVAR);
                FI
                break;
                ELSE    error(BADVAR);
                FI
                break;
index 996bf18..478512b 100644 (file)
@@ -1,4 +1,4 @@
-/*     defs.h  4.1     81/05/14        */
+/*     defs.h  4.2     81/05/14        */
 
 /*
  * adb - vax string table version; common definitions
 
 /*
  * adb - vax string table version; common definitions
@@ -7,6 +7,7 @@
 #include <sys/param.h>
 #include <sys/dir.h>
 #include <sys/psl.h>
 #include <sys/param.h>
 #include <sys/dir.h>
 #include <sys/psl.h>
+#include <sys/pte.h>
 #include <sys/user.h>
 #include <ctype.h>
 #include <a.out.h>
 #include <sys/user.h>
 #include <ctype.h>
 #include <a.out.h>
@@ -116,3 +117,10 @@ STRING             exform();
 L_INT          round();
 BKPTR          scanbkpt();
 VOID           fault();
 L_INT          round();
 BKPTR          scanbkpt();
 VOID           fault();
+
+struct pcb     pcb;
+int    kernel;
+int    kcore;
+struct pte *sbr;
+int    slr;
+int    masterpcbb;
index 65d8ccf..f142ca5 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
-static char sccsid[] = "@(#)expr.c 4.1 %G%";
+static char sccsid[] = "@(#)expr.c 4.2 %G%";
 
 MSG            BADSYM;
 MSG            BADVAR;
 
 MSG            BADSYM;
 MSG            BADVAR;
@@ -181,7 +181,8 @@ item(a)
        ELIF lastc=='<'
        THEN    savc=rdc();
                IF regptr=getreg(savc)
        ELIF lastc=='<'
        THEN    savc=rdc();
                IF regptr=getreg(savc)
-               THEN    expv= * (ADDR *)(((ADDR)&u)+regptr);
+               THEN    IF kcore THEN expv = *(int *)regptr;
+                       ELSE expv= * (ADDR *)(((ADDR)&u)+regptr); FI
                ELIF (base=varchk(savc)) != -1
                THEN    expv=var[base];
                ELSE    error(BADVAR);
                ELIF (base=varchk(savc)) != -1
                THEN    expv=var[base];
                ELSE    error(BADVAR);
index a4ddbbf..376e907 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #include "defs.h"
  */
 
 #include "defs.h"
-static char sccsid[] = "@(#)expr.c.bad 4.1 %G%";
+static char sccsid[] = "@(#)expr.c.bad 4.2 %G%";
 
 MSG            BADSYM;
 MSG            BADVAR;
 
 MSG            BADSYM;
 MSG            BADVAR;
@@ -181,7 +181,8 @@ item(a)
        ELIF lastc=='<'
        THEN    savc=rdc();
                IF regptr=getreg(savc)
        ELIF lastc=='<'
        THEN    savc=rdc();
                IF regptr=getreg(savc)
-               THEN    expv= * (ADDR *)(((ADDR)&u)+regptr);
+               THEN    IF kcore THEN expv = *(int *)regptr;
+                       ELSE expv= * (ADDR *)(((ADDR)&u)+regptr); FI
                ELIF (base=varchk(savc)) != -1
                THEN    expv=var[base];
                ELSE    error(BADVAR);
                ELIF (base=varchk(savc)) != -1
                THEN    expv=var[base];
                ELSE    error(BADVAR);
index 1ef2b34..7ac35d2 100644 (file)
@@ -1,4 +1,4 @@
-/*     mode.h  4.1     81/05/14        */
+/*     mode.h  4.2     81/05/14        */
 
 #include "machine.h"
 /*
 
 #include "machine.h"
 /*
@@ -51,4 +51,5 @@ TYPE  REGLIST         *REGPTR;
 struct reglist {
        STRING  rname;
        INT     roffs;
 struct reglist {
        STRING  rname;
        INT     roffs;
+       int     *rkern;
 };
 };
index b819d03..d096c80 100644 (file)
@@ -1,4 +1,4 @@
-static char sccsid[] = "@(#)print.c 4.1 %G%";
+static char sccsid[] = "@(#)print.c 4.2 %G%";
 /*
  *
  *     UNIX debugger
 /*
  *
  *     UNIX debugger
@@ -32,30 +32,30 @@ L_INT               localval;
 BKPTR          bkpthead;
 
 REGLIST reglist [] = {
 BKPTR          bkpthead;
 
 REGLIST reglist [] = {
-               "p1lr", P1LR,
-               "p1br",P1BR,
-               "p0lr", P0LR,
-               "p0br",P0BR,
-               "ksp",KSP,
-               "esp",ESP,
-               "ssp",SSP,
-               "psl", PSL,
-               "pc", PC,
-               "usp",USP,
-               "fp", FP,
-               "ap", AP,
-               "r11", R11,
-               "r10", R10,
-               "r9", R9,
-               "r8", R8,
-               "r7", R7,
-               "r6", R6,
-               "r5", R5,
-               "r4", R4,
-               "r3", R3,
-               "r2", R2,
-               "r1", R1,
-               "r0", R0,
+       "p1lr", P1LR,   &pcb.pcb_p1lr,
+       "p1br", P1BR,   &pcb.pcb_p1br,
+       "p0lr", P0LR,   &pcb.pcb_p0lr,
+       "p0br", P0BR,   &pcb.pcb_p0br,
+       "ksp",  KSP,    &pcb.pcb_ksp,
+       "esp",  ESP,    &pcb.pcb_esp,
+       "ssp",  SSP,    &pcb.pcb_ssp,
+       "psl",  PSL,    &pcb.pcb_psl,
+       "pc",   PC,     &pcb.pcb_pc,
+       "usp",  USP,    &pcb.pcb_usp,
+       "fp",   FP,     &pcb.pcb_fp,
+       "ap",   AP,     &pcb.pcb_ap,
+       "r11",  R11,    &pcb.pcb_r11,
+       "r10",  R10,    &pcb.pcb_r10,
+       "r9",   R9,     &pcb.pcb_r9,
+       "r8",   R8,     &pcb.pcb_r8,
+       "r7",   R7,     &pcb.pcb_r7,
+       "r6",   R6,     &pcb.pcb_r6,
+       "r5",   R5,     &pcb.pcb_r5,
+       "r4",   R4,     &pcb.pcb_r4,
+       "r3",   R3,     &pcb.pcb_r3,
+       "r2",   R2,     &pcb.pcb_r2,
+       "r1",   R1,     &pcb.pcb_r1,
+       "r0",   R0,     &pcb.pcb_r0,
 };
 
 char           lastc;
 };
 
 char           lastc;
@@ -346,15 +346,15 @@ printregs()
        L_INT           v;
 
        FOR p=reglist; p < &reglist[24]; p++
        L_INT           v;
 
        FOR p=reglist; p < &reglist[24]; p++
-       DO      printf("%s%6t%R %16t", p->rname, v= *(ADDR *)(((ADDR)&u)+p->roffs));
+       DO      v = kcore ? *p->rkern : *(ADDR *)(((ADDR)&u)+p->roffs);
+               printf("%s%6t%R %16t", p->rname, v);
                valpr(v,(p->roffs==PC?ISYM:DSYM));
                printc(EOR);
        OD
        printpc();
 }
 
                valpr(v,(p->roffs==PC?ISYM:DSYM));
                printc(EOR);
        OD
        printpc();
 }
 
-getreg(regnam)
-{
+getreg(regnam) {
        REG REGPTR      p;
        REG STRING      regptr;
        CHAR    *olp;
        REG REGPTR      p;
        REG STRING      regptr;
        CHAR    *olp;
@@ -372,7 +372,7 @@ getreg(regnam)
                        OD
                        IF *regptr
                        THEN lp=olp;
                        OD
                        IF *regptr
                        THEN lp=olp;
-                       ELSE return(p->roffs);
+                       ELSE return(kcore ? (int)p->rkern : p->roffs);
                        FI
                FI
        OD
                        FI
                FI
        OD
index 371477f..7283102 100644 (file)
@@ -1,4 +1,4 @@
-static char sccsid[] = "@(#)setup.c 4.1 %G%";
+static char sccsid[] = "@(#)setup.c 4.2 %G%";
 /*
  * adb - routines to read a.out+core at startup
  */
 /*
  * adb - routines to read a.out+core at startup
  */
@@ -96,11 +96,25 @@ setcor()
        if (fcor != -1 && INKERNEL(filhdr.a_entry)) {
                struct stat stb;
 
        if (fcor != -1 && INKERNEL(filhdr.a_entry)) {
                struct stat stb;
 
+               kernel = 1;
                fstat(fcor, &stb);
                fstat(fcor, &stb);
+               if (stb.st_mode & S_IFREG)
+                       kcore = 1;
+               /* this is phoney baloney... it is boogered in access.c */
                datmap.b1 = 0;
                datmap.e1 = -1;
                datmap.b1 = 0;
                datmap.e1 = -1;
-               if ((stb.st_mode&S_IFMT) == S_IFREG)
-                       datmap.b1 = 0x80000000;
+               /* end phoney baloney */
+               lookup("_Sysmap");
+               sbr = cursym->n_value;
+               lookup("_Syssize");
+               slr = cursym->n_value;
+               printf("sbr %X slr %X\n", sbr, slr);
+               lookup("_masterpcbb");
+               printf("masterpcbb at %X\n", cursym->n_value);
+               physrw(fcor, cursym->n_value&0x7fffffff, &masterpcbb, 1);
+               printf("masterpcbb value %X\n", masterpcbb);
+               var[varchk('p')] = masterpcbb;
+               getpcb();
                return;
        }
        if (read(fcor, (char *)&u, ctob(UPAGES))!=ctob(UPAGES) ||
                return;
        }
        if (read(fcor, (char *)&u, ctob(UPAGES))!=ctob(UPAGES) ||
@@ -137,6 +151,16 @@ setcor()
                printf("corefile not from this program");
 }
 
                printf("corefile not from this program");
 }
 
+getpcb()
+{
+       printf("getpcb: masterpcbb is %X\n", masterpcbb);
+       lseek(fcor, masterpcbb&~0x80000000, 0);
+       read(fcor, &pcb, sizeof (struct pcb));
+       printf("p0br %X p0lr %X p1br %X p1lr %X\n",
+           pcb.pcb_p0br, pcb.pcb_p0lr, pcb.pcb_p1br, pcb.pcb_p1lr);
+       pcb.pcb_p0lr &= ~AST_CLR;
+}
+
 create(f)
        char *f;
 {
 create(f)
        char *f;
 {