From 8d14e26acff106daabec089207f5e472f8069f9f Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 12 Jun 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-06-12 --- carrera/dat.h | 5 +- carrera/fptrap.c | 2 +- carrera/l.s | 209 +++++++++++++++++++++-------------------------- carrera/main.c | 1 - carrera/mem.h | 50 +++++++++++- carrera/trap.c | 21 +++-- carrera/ureg.h | 74 +++++++++-------- pc/dat.h | 2 +- pc/trap.c | 1 - port/devproc.c | 50 ------------ port/fault.c | 1 - port/portdat.h | 4 - port/proc.c | 7 +- port/sysproc.c | 3 +- power/dat.h | 2 +- 15 files changed, 200 insertions(+), 232 deletions(-) diff --git a/carrera/dat.h b/carrera/dat.h index eb9be43835cdb535700ee3c6f3cfb607fdbb393f..652ea1d7eaa8dde3c70f41358649694a6b9cd994 100644 --- a/carrera/dat.h +++ b/carrera/dat.h @@ -15,7 +15,7 @@ typedef struct Ureg Ureg; /* * parameters for sysproc.c */ -#define AOUT_MAGIC V_MAGIC +#define EXEC_MAGIC(magic) (magic==V_MAGIC||magic==M_MAGIC) /* * machine dependent definitions used by ../port/dat.h @@ -81,7 +81,8 @@ struct PMMU struct Notsave { ulong svstatus; - ulong svr1; + long svr1; + long svhr1; }; #include "../port/portdat.h" diff --git a/carrera/fptrap.c b/carrera/fptrap.c index d41ab97228d0ccd1161d0337087b034c0dab7cff..dfdcf01f32a323964d00d5f94aca62d904c2a833 100644 --- a/carrera/fptrap.c +++ b/carrera/fptrap.c @@ -174,7 +174,7 @@ fpunimp(ulong iw) return 0; } -static ulong* +static long* reg(Ureg *ur, int regno) { /* regs go from R31 down in ureg, R29 is missing */ diff --git a/carrera/l.s b/carrera/l.s index 7d56a4b510141c2d61355aedeb86a163892f9696..35a02288a6479ac2758ef3e9d938dd5b2c08f576 100644 --- a/carrera/l.s +++ b/carrera/l.s @@ -12,30 +12,21 @@ /* * R4000 instructions */ -#define LD(offset, base, rt) WORD $((067<<26)|((base)<<21)|((rt)<<16)|((offset)&0xFFFF)) -#define STD(rt, offset, base) WORD $((077<<26)|((base)<<21)|((rt)<<16)|((offset)&0xFFFF)) -#define DSLL(sa, rt, rd) WORD $(((rt)<<16)|((rd)<<11)|((sa)<<6)|070) -#define DSRA(sa, rt, rd) WORD $(((rt)<<16)|((rd)<<11)|((sa)<<6)|073) #define LL(base, rt) WORD $((060<<26)|((base)<<21)|((rt)<<16)) #define SC(base, rt) WORD $((070<<26)|((base)<<21)|((rt)<<16)) -#define DBG(S) CONST(0xa0001000, R20);CONST(S, R21);MOVW R21,(R20) - /* * Boot first processor */ TEXT start(SB), $-4 -DBG(0x55aa0000) MOVW $setR30(SB), R30 MOVW $(CU1|INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0), R1 MOVW R1, M(STATUS) WAIT -DBG(0x55aa0001) MOVW $TLBROFF, R1 MOVW R1, M(WIRED) -DBG(0x55aa0002) MOVW $((0x1C<<7)|(1<<24)), R1 MOVW R1, FCR31 /* permit only inexact and underflow */ @@ -57,19 +48,14 @@ DBG(0x55aa0002) MOVD F24, F18 MOVD F24, F20 MOVD F24, F22 -DBG(0x55aa0003) MOVW $MACHADDR, R(MACH) ADDU $(BY2PG-4), R(MACH), SP MOVW $0, R(USER) -DBG(0x55aa0010) -MOVW R(MACH),4(R20) MOVW R0, 0(R(MACH)) -DBG(0x55aa0011) MOVW $edata(SB), R1 MOVW $end(SB), R2 -DBG(0x55aa0004) clrbss: MOVB $0, (R1) @@ -93,7 +79,7 @@ TEXT touser(SB), $-4 MOVW M(STATUS), R4 WAIT AND $(~KMODEMASK), R4 - OR $(KUSER|EXL|IE), R4 + OR $(KUSER|EXL|IE|UX), R4 MOVW R4, M(STATUS) WAIT MOVW R1, SP @@ -384,14 +370,14 @@ wasuser: MOVW 8(R27), R26 /* R26 = m->proc */ MOVW 8(R26), R27 /* R27 = m->proc->kstack */ MOVW SP, R26 /* save user sp */ - ADDU $(KSTACK-UREGSIZE-2*BY2WD), R27, SP + ADDU $(KSTACK-UREGSIZE), R27, SP - MOVW R26, 0x10(SP) /* user SP */ - MOVW R31, 0x28(SP) - MOVW R30, 0x2C(SP) + MOVW R26, Ureg_sp(SP) /* user SP */ + MOVV R31, Ureg_r31(SP) + MOVV R30, Ureg_r30(SP) MOVW M(CAUSE), R26 - MOVW R(MACH), 0x3C(SP) - MOVW R(USER), 0x40(SP) + MOVV R(MACH), Ureg_r25(SP) + MOVV R(USER), Ureg_r24(SP) AND $(EXCMASK<<2), R26 SUBU $(CSYS<<2), R26 @@ -407,13 +393,13 @@ wasuser: JAL syscall(SB) sysrestore: - MOVW 0x28(SP), R31 - MOVW 0x08(SP), R26 - MOVW 0x2C(SP), R30 + MOVV Ureg_r31(SP), R31 + MOVW Ureg_status(SP), R26 + MOVV Ureg_r30(SP), R30 MOVW R26, M(STATUS) WAIT - MOVW 0x0C(SP), R26 /* old pc */ - MOVW 0x10(SP), SP + MOVW Ureg_pc(SP), R26 /* old pc */ + MOVW Ureg_sp(SP), SP MOVW R26, M(EPC) ERET @@ -421,25 +407,28 @@ notsys: JAL trap(SB) restore: JAL restregs(SB) - MOVW 0x28(SP), R31 - MOVW 0x2C(SP), R30 - MOVW 0x3C(SP), R(MACH) - MOVW 0x40(SP), R(USER) - MOVW 0x10(SP), SP + MOVV Ureg_r31(SP), R31 + MOVV Ureg_r30(SP), R30 + MOVV Ureg_r25(SP), R(MACH) + MOVV Ureg_r24(SP), R(USER) + MOVW Ureg_sp(SP), SP MOVW R26, M(EPC) ERET waskernel: - MOVW $1, R26 /* not syscall */ - MOVW SP, -(UREGSIZE-16)(SP) + MOVW SP, R26 SUBU $UREGSIZE, SP - MOVW R31, 0x28(SP) + OR $7, SP + XOR $7, SP + MOVW R26, Ureg_sp(SP) + MOVV R31, Ureg_r31(SP) + MOVW $1, R26 /* not syscall */ JAL saveregs(SB) MOVW 4(SP), R1 /* first arg for trap */ JAL trap(SB) JAL restregs(SB) - MOVW 0x28(SP), R31 - ADDU $UREGSIZE, SP + MOVV Ureg_r31(SP), R31 + MOVW Ureg_sp(SP), SP MOVW R26, M(EPC) ERET @@ -448,21 +437,17 @@ TEXT forkret(SB), $0 JMP sysrestore TEXT saveregs(SB), $-4 - MOVW R1, 0x9C(SP) - MOVW R2, 0x98(SP) - /* save R5, R6 as 64 bits */ - ADDU $(UREGSIZE-16), SP, R1 - MOVW $~7, R2 /* don't let him use R28 */ - AND R2, R1 - STD (5, 0,(1)) - STD (6, 8,(1)) - ADDU $8, SP, R1 - MOVW R1, 0x04(SP) /* arg to base of regs */ + MOVV R1, Ureg_r1(SP) + MOVV R2, Ureg_r2(SP) + MOVV R5, Ureg_r5(SP) + MOVV R6, Ureg_r6(SP) + ADDU $Uoffset, SP, R1 + MOVW R1, 4(SP) /* arg to base of regs */ MOVW M(STATUS), R1 MOVW M(EPC), R2 WAIT - MOVW R1, 0x08(SP) - MOVW R2, 0x0C(SP) + MOVW R1, Ureg_status(SP) + MOVW R2, Ureg_pc(SP) MOVW $(~KMODEMASK),R2 /* don't let him use R28 */ AND R2, R1 @@ -473,88 +458,80 @@ TEXT saveregs(SB), $-4 MOVW M(CAUSE), R1 MOVW M(BADVADDR), R2 NOOP - MOVW R1, 0x14(SP) + MOVW R1, Ureg_cause(SP) MOVW M(TLBVIRT), R1 NOOP - MOVW R2, 0x18(SP) - MOVW R1, 0x1C(SP) - MOVW HI, R1 - MOVW LO, R2 - MOVW R1, 0x20(SP) - MOVW R2, 0x24(SP) + MOVW R2, Ureg_badvaddr(SP) + MOVW R1, Ureg_tlbvirt(SP) + + MOVV HI, R1 + MOVV LO, R2 + MOVV R1, Ureg_hi(SP) + MOVV R2, Ureg_lo(SP) /* LINK,SB,SP missing */ - MOVW R28, 0x30(SP) + MOVV R28, Ureg_r28(SP) /* R27, R26 not saved */ /* R25, R24 missing */ - MOVW R23, 0x44(SP) - MOVW R22, 0x48(SP) - MOVW R21, 0x4C(SP) - MOVW R20, 0x50(SP) - MOVW R19, 0x54(SP) - MOVW R18, 0x58(SP) - MOVW R17, 0x5C(SP) - MOVW R16, 0x60(SP) - MOVW R15, 0x64(SP) - MOVW R14, 0x68(SP) - MOVW R13, 0x6C(SP) - MOVW R12, 0x70(SP) - MOVW R11, 0x74(SP) - MOVW R10, 0x78(SP) - MOVW R9, 0x7C(SP) - MOVW R8, 0x80(SP) - MOVW R7, 0x84(SP) - MOVW R6, 0x88(SP) - MOVW R5, 0x8C(SP) - MOVW R4, 0x90(SP) - MOVW R3, 0x94(SP) + MOVV R23, Ureg_r23(SP) + MOVV R22, Ureg_r22(SP) + MOVV R21, Ureg_r21(SP) + MOVV R20, Ureg_r20(SP) + MOVV R19, Ureg_r19(SP) + MOVV R18, Ureg_r18(SP) + MOVV R17, Ureg_r17(SP) + MOVV R16, Ureg_r16(SP) + MOVV R15, Ureg_r15(SP) + MOVV R14, Ureg_r14(SP) + MOVV R13, Ureg_r13(SP) + MOVV R12, Ureg_r12(SP) + MOVV R11, Ureg_r11(SP) + MOVV R10, Ureg_r10(SP) + MOVV R9, Ureg_r9(SP) + MOVV R8, Ureg_r8(SP) + MOVV R7, Ureg_r7(SP) + MOVV R6, Ureg_r6(SP) + MOVV R5, Ureg_r5(SP) + MOVV R4, Ureg_r4(SP) + MOVV R3, Ureg_r3(SP) return: RET TEXT restregs(SB), $-4 /* LINK,SB,SP missing */ - MOVW 0x30(SP), R28 + MOVV Ureg_r28(SP), R28 /* R27, R26 not saved */ /* R25, R24 missing */ - MOVW 0x44(SP), R23 - MOVW 0x48(SP), R22 - MOVW 0x4C(SP), R21 - MOVW 0x50(SP), R20 - MOVW 0x54(SP), R19 - MOVW 0x58(SP), R18 - MOVW 0x5C(SP), R17 - MOVW 0x60(SP), R16 - MOVW 0x64(SP), R15 - MOVW 0x68(SP), R14 - MOVW 0x6C(SP), R13 - MOVW 0x70(SP), R12 - MOVW 0x74(SP), R11 - MOVW 0x78(SP), R10 - MOVW 0x7C(SP), R9 - MOVW 0x80(SP), R8 - MOVW 0x84(SP), R7 - /* - * restored below - * MOVW 0x88(SP), R6 - * MOVW 0x8C(SP), R5 - */ - MOVW 0x90(SP), R4 - MOVW 0x94(SP), R3 - MOVW 0x24(SP), R2 - MOVW 0x20(SP), R1 - MOVW R2, LO - MOVW R1, HI - /* restore 64-bit R5, R6 */ - ADDU $(UREGSIZE-16), SP, R1 - MOVW $~7, R2 /* don't let him use R28 */ - AND R2, R1 - LD (0,(1), 5) - LD (8,(1), 6) - MOVW 0x08(SP), R1 - MOVW 0x98(SP), R2 + MOVV Ureg_r23(SP), R23 + MOVV Ureg_r22(SP), R22 + MOVV Ureg_r21(SP), R21 + MOVV Ureg_r20(SP), R20 + MOVV Ureg_r19(SP), R19 + MOVV Ureg_r18(SP), R18 + MOVV Ureg_r17(SP), R17 + MOVV Ureg_r16(SP), R16 + MOVV Ureg_r15(SP), R15 + MOVV Ureg_r14(SP), R14 + MOVV Ureg_r13(SP), R13 + MOVV Ureg_r12(SP), R12 + MOVV Ureg_r11(SP), R11 + MOVV Ureg_r10(SP), R10 + MOVV Ureg_r9(SP), R9 + MOVV Ureg_r8(SP), R8 + MOVV Ureg_r7(SP), R7 + MOVV Ureg_r6(SP), R6 + MOVV Ureg_r5(SP), R5 + MOVV Ureg_r4(SP), R4 + MOVV Ureg_r3(SP), R3 + MOVV Ureg_lo(SP), R2 + MOVV Ureg_hi(SP), R1 + MOVV R2, LO + MOVV R1, HI + MOVW Ureg_status(SP), R1 + MOVV Ureg_r2(SP), R2 MOVW R1, M(STATUS) WAIT - MOVW 0x9C(SP), R1 - MOVW 0x0C(SP), R26 /* old pc */ + MOVV Ureg_r1(SP), R1 + MOVW Ureg_pc(SP), R26 RET TEXT rfnote(SB), $0 diff --git a/carrera/main.c b/carrera/main.c index 44d1abfab10b3561488984fac3a4f3da8d015a14..b180d7410b8cf325f727fa7eed6b1812ab2307fd 100644 --- a/carrera/main.c +++ b/carrera/main.c @@ -460,7 +460,6 @@ procsave(Proc *p) USED(p); /* keep track of tlbfaults */ - up->counter[TLBCNTR] += m->tlbfault - m->otlbfault; m->otlbfault = m->tlbfault; } diff --git a/carrera/mem.h b/carrera/mem.h index b5b062b4c672e6aee21e420720958bcf82206555..26e007575ae65d287dd7d3dc086cf85c443a7564 100644 --- a/carrera/mem.h +++ b/carrera/mem.h @@ -66,6 +66,7 @@ #define ERL 0x00000004 #define KSUPER 0x00000008 #define KUSER 0x00000010 +#define UX 0x00000020 #define INTMASK 0x0000ff00 #define INTR0 0x00000100 #define INTR1 0x00000200 @@ -98,10 +99,55 @@ * Fundamental addresses */ #define MACHADDR (KTZERO-MAXMACH*BY2PG) /* warning: rdbg is near here */ -/* Sizeof(Ureg)+R5,R6+16 bytes slop+retpc & ur */ -#define UREGSIZE 0xC0 #define MACHP(n) ((Mach *)(MACHADDR+(n)*BY2PG)) +/* + * offsets in ureg.h for l.s + */ +#define Ureg_status (Uoffset+0) +#define Ureg_pc (Uoffset+4) +#define Ureg_sp (Uoffset+8) +#define Ureg_cause (Uoffset+12) +#define Ureg_badvaddr (Uoffset+16) +#define Ureg_tlbvirt (Uoffset+20) + +#define Ureg_hi (Uoffset+28-4) +#define Ureg_lo (Uoffset+36-4) +#define Ureg_r31 (Uoffset+44-4) +#define Ureg_r30 (Uoffset+52-4) +#define Ureg_r28 (Uoffset+60-4) +#define Ureg_r27 (Uoffset+68-4) +#define Ureg_r26 (Uoffset+76-4) +#define Ureg_r25 (Uoffset+84-4) +#define Ureg_r24 (Uoffset+92-4) +#define Ureg_r23 (Uoffset+100-4) +#define Ureg_r22 (Uoffset+108-4) +#define Ureg_r21 (Uoffset+116-4) +#define Ureg_r20 (Uoffset+124-4) +#define Ureg_r19 (Uoffset+132-4) +#define Ureg_r18 (Uoffset+140-4) +#define Ureg_r17 (Uoffset+148-4) +#define Ureg_r16 (Uoffset+156-4) +#define Ureg_r15 (Uoffset+164-4) +#define Ureg_r14 (Uoffset+172-4) +#define Ureg_r13 (Uoffset+180-4) +#define Ureg_r12 (Uoffset+188-4) +#define Ureg_r11 (Uoffset+196-4) +#define Ureg_r10 (Uoffset+204-4) +#define Ureg_r9 (Uoffset+212-4) +#define Ureg_r8 (Uoffset+220-4) +#define Ureg_r7 (Uoffset+228-4) +#define Ureg_r6 (Uoffset+236-4) +#define Ureg_r5 (Uoffset+244-4) +#define Ureg_r4 (Uoffset+252-4) +#define Ureg_r3 (Uoffset+260-4) +#define Ureg_r2 (Uoffset+268-4) +#define Ureg_r1 (Uoffset+276-4) + +/* Sizeof(Ureg) + (R5,R6) + 16 bytes slop + retpc + ur */ +#define UREGSIZE ((Ureg_r1+8-Uoffset) + 16 + 16 + 4 + 4) +#define Uoffset 8 + /* * MMU */ diff --git a/carrera/trap.c b/carrera/trap.c index ce57dd6a073e1e52bb3c4f7f3411672fff04a3fc..d662dd640d8d978c23f3e172f4ea44585bbeea9e 100644 --- a/carrera/trap.c +++ b/carrera/trap.c @@ -253,7 +253,7 @@ trap(Ureg *ur) postnote(up, 1, buf, NDebug); break; } - print("kernel %s pc=%llux\n", excname[ecode], ur->pc); + print("kernel %s pc=%lux\n", excname[ecode], ur->pc); dumpregs(ur); dumpstack(); if(m->machno == 0) @@ -392,7 +392,7 @@ fpexcname(Ureg *ur, ulong fcr31, char *buf) { int i; char *s; - uvlong fppc; + ulong fppc; fppc = ur->pc; if(ur->cause & (1<<31)) /* branch delay */ @@ -411,7 +411,7 @@ fpexcname(Ureg *ur, ulong fcr31, char *buf) if(s == 0) return "no floating point exception"; - sprint(buf, "%s fppc=0x%llux", s, fppc); + sprint(buf, "%s fppc=0x%lux", s, fppc); return buf; } @@ -421,7 +421,7 @@ void kernfault(Ureg *ur, int code) { print("kfault %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); - print("UP=0x%lux SR=0x%lux PC=0x%llux R31=%llux SP=0x%llux\n", + print("UP=0x%lux SR=0x%lux PC=0x%lux R31=%lux SP=0x%lux\n", up, ur->status, ur->pc, ur->r31, ur->sp); dumpregs(ur); @@ -487,7 +487,7 @@ notify(Ureg *ur) if(l > ERRLEN-23) /* " pc=0x12345678\0" */ l = ERRLEN-23; - sprint(n->msg+l, " pc=0x%llux", ur->pc); + sprint(n->msg+l, " pc=0x%lux", ur->pc); } if(n->flag != NUser && (up->notified || up->notify==0)) { @@ -526,7 +526,11 @@ notify(Ureg *ur) sp -= 3*BY2WD; *(ulong*)(sp+2*BY2WD) = sp+3*BY2WD; /* arg 2 is string */ up->svr1 = ur->r1; /* save away r1 */ - ur->r1 = (ulong)up->ureg; /* arg 1 is ureg* */ + up->svhr1 = ur->hr1; /* save away r1 */ + ur->r1 = (long)up->ureg; /* arg 1 is ureg* */ + ur->hr1 = 0; + if(ur->r1 < 0) + ur->hr1 = ~0; ((ulong*)sp)[1] = (ulong)up->ureg; /* arg 1 0(FP) is ureg* */ ((ulong*)sp)[0] = 0; /* arg 0 is pc */ ur->usp = sp; @@ -566,6 +570,7 @@ noted(Ureg **urp, ulong arg0) memmove(*urp, up->ureg, sizeof(Ureg)); (*urp)->r1 = up->svr1; + (*urp)->hr1 = up->svhr1; switch(arg0) { case NCONT: if(!okaddr(nur->pc, 1, 0) || !okaddr(nur->usp, BY2WD, 0)){ @@ -627,13 +632,13 @@ syscall(Ureg *aur) goto error; if(up->scallnr >= nsyscall){ - pprint("bad sys call %d pc %llux\n", up->scallnr, ur->pc); + pprint("bad sys call %d pc %lux\n", up->scallnr, ur->pc); postnote(up, 1, "sys: bad sys call", NDebug); error(Ebadarg); } if(sp & (BY2WD-1)){ - pprint("odd sp in sys call pc %llux sp %llux\n", ur->pc, ur->sp); + pprint("odd sp in sys call pc %lux sp %lux\n", ur->pc, ur->sp); postnote(up, 1, "sys: odd stack", NDebug); error(Ebadarg); } diff --git a/carrera/ureg.h b/carrera/ureg.h index 32cbfb3fc85f67d4204766ce48ca339d2d651916..9206e5681c7a70f733f6f8693dbb0382b3bd6b36 100644 --- a/carrera/ureg.h +++ b/carrera/ureg.h @@ -1,44 +1,46 @@ struct Ureg { ulong status; - ulong pc; - union{ - ulong sp; /* r29 */ - ulong usp; /* r29 */ + long pc; + union + { + long sp; /* r29 */ + long usp; /* r29 */ }; ulong cause; ulong badvaddr; ulong tlbvirt; - ulong hi; - ulong lo; - ulong r31; - ulong r30; - ulong r28; - ulong r27; /* unused */ - ulong r26; /* unused */ - ulong r25; - ulong r24; - ulong r23; - ulong r22; - ulong r21; - ulong r20; - ulong r19; - ulong r18; - ulong r17; - ulong r16; - ulong r15; - ulong r14; - ulong r13; - ulong r12; - ulong r11; - ulong r10; - ulong r9; - ulong r8; - ulong r7; - ulong r6; - ulong r5; - ulong r4; - ulong r3; - ulong r2; - ulong r1; + + long hhi; long hi; + long hlo; long lo; + long hr31; long r31; + long hr30; long r30; + long hr28; long r28; + long hr27; long r27; + long hr26; long r26; + long hr25; long r25; + long hr24; long r24; + long hr23; long r23; + long hr22; long r22; + long hr21; long r21; + long hr20; long r20; + long hr19; long r19; + long hr18; long r18; + long hr17; long r17; + long hr16; long r16; + long hr15; long r15; + long hr14; long r14; + long hr13; long r13; + long hr12; long r12; + long hr11; long r11; + long hr10; long r10; + long hr9; long r9; + long hr8; long r8; + long hr7; long r7; + long hr6; long r6; + long hr5; long r5; + long hr4; long r4; + long hr3; long r3; + long hr2; long r2; + long hr1; long r1; }; diff --git a/pc/dat.h b/pc/dat.h index 333aa14ba17ef3214998ff6b1cdd542a0dc4f3ba..b147d8b9db9008ba6064d3123dc048a5dce101cf 100644 --- a/pc/dat.h +++ b/pc/dat.h @@ -20,7 +20,7 @@ extern void (*kprofp)(ulong); /* * parameters for sysproc.c */ -#define AOUT_MAGIC I_MAGIC +#define EXEC_MAGIC(magic) (magic==I_MAGIC) struct Lock { diff --git a/pc/trap.c b/pc/trap.c index 1b94c6926870ffec811f08317ebe31a423cf5d9e..4e7d7c2d2df23f9ea026822de1877f1722bdc44d 100644 --- a/pc/trap.c +++ b/pc/trap.c @@ -414,7 +414,6 @@ syscall(Ureg *ur, void *arg) postnote(up, 1, "sys: bad sys call", NDebug); error(Ebadarg); } - up->syscall[up->scallnr]++; if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-(1+MAXSYSARG)*BY2WD)) validaddr(sp, (1+MAXSYSARG)*BY2WD, 0); diff --git a/port/devproc.c b/port/devproc.c index b4dd53f20ace441a6837c825ba9f2ca4b1fbf529..ac44726a08859487d40a4c4222f9f20d4cc9694e 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -23,7 +23,6 @@ enum Qregs, Qsegment, Qstatus, - Qcounters, Qtext, Qwait, }; @@ -31,7 +30,6 @@ enum #define STATSIZE (2*NAMELEN+12+7*12) Dirtab procdir[] = { - "counters", {Qcounters}, 0, 0444, "ctl", {Qctl}, 0, 0000, "fpregs", {Qfpregs}, sizeof(FPsave), 0000, "kregs", {Qkregs}, sizeof(Ureg), 0000, @@ -73,7 +71,6 @@ Chan* proctext(Chan*, Proc*); Segment* txt2data(Proc*, Segment*); int procstopped(void*); void mntscan(Mntwalk*); -ulong readcounters(Proc*, ulong, void*, int); int procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) @@ -121,11 +118,6 @@ procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) void procinit(void) { - /* standard counters - this ordering is important */ - proccounter("sched"); - proccounter("fault"); - proccounter("tlbmiss"); - if(conf.nproc >= (1<<(16-QSHIFT))-1) print("warning: too many procs for devproc\n"); } @@ -196,7 +188,6 @@ procopen(Chan *c, int omode) error(Eperm); break; - case Qcounters: case Qctl: case Qnote: case Qnoteid: @@ -375,9 +366,6 @@ procread(Chan *c, void *va, long n, ulong offset) memmove(a, rptr+offset, n); return n; - case Qcounters: - return readcounters(p, offset, va, n); - case Qstatus: if(offset >= STATSIZE) return 0; @@ -863,41 +851,3 @@ data2txt(Segment *s) return ps; } - -static char *counter[Pcounter]; -int ncounter; - -int -proccounter(char *name) -{ - if(ncounter >= Pcounter) - panic("too many process counters"); - counter[ncounter] = name; - return ncounter++; -} - -ulong -readcounters(Proc *p, ulong offset, void *va, int n) -{ - char *bp; - int i, j, m; - extern char *sysctab[]; - - bp = smalloc((nsyscall+ncounter)*(NAMELEN+8)); - m = 0; - for(i = 0; i < Pcounter; i++) - if(counter[i]) - m += sprint(bp+m, "%s\t%8d\n", counter[i], p->counter[i]); - j = 0; - for(i = 0; i < nsyscall; i++) - j += p->syscall[i]; - m += sprint(bp+m, "syscall\t%8d\n", j); - for(i = 0; i < nsyscall; i++) - if(p->syscall[i]) - m += sprint(bp+m, "%s\t%8d\n", sysctab[i], p->syscall[i]); - n = readstr(offset, va, n, bp); - free(bp); - memset(p->counter, 0, sizeof(p->counter)); - memset(p->syscall, 0, sizeof(p->syscall)); - return n; -} diff --git a/port/fault.c b/port/fault.c index 14c16a79391f9f207e44da56b7107cfa44fc4b05..8adc26683c3744c17ab132f9a7a55d1975160e93 100644 --- a/port/fault.c +++ b/port/fault.c @@ -18,7 +18,6 @@ fault(ulong addr, int read) spllo(); m->pfault++; - up->counter[FAULTCNTR]++; for(;;) { s = seg(up, addr, 1); if(s == 0) { diff --git a/port/portdat.h b/port/portdat.h index b3db649de27e0b26bb64829567f5cc75bea1dd71..b723f863c4dd30a10dba8161507d814e39b5ce6c 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -581,10 +581,6 @@ struct Proc void *dbgreg; /* User registers for devproc */ Notsave; - /* statistics */ - ulong counter[Pcounter]; /* specialized per process counters */ - ulong *syscall; - /* * machine specific MMU */ diff --git a/port/proc.c b/port/proc.c index b7e215bdabff4d18f8ff46b8e51e968ed28d8748..56cd8a63345f8f3a3dc5529e82d79cb48e3d53f4 100644 --- a/port/proc.c +++ b/port/proc.c @@ -82,7 +82,6 @@ sched(void) /* statistics */ m->cs++; - up->counter[CSCNTR]++; procsave(up); if(setlabel(&up->sched)) { @@ -229,8 +228,6 @@ newproc(void) panic("pidalloc"); if(p->kstack == 0) p->kstack = smalloc(KSTACK); - memset(p->counter, 0, sizeof(p->counter)); - memset(p->syscall, 0, sizeof(p->syscall)); return p; } @@ -245,10 +242,8 @@ procinit0(void) /* bad planning - clashes with devproc.c */ procalloc.arena = procalloc.free; p = procalloc.free; - for(i=0; iqnext = p+1; - p->syscall = xalloc(nsyscall * sizeof(ulong)); - } p->qnext = 0; } diff --git a/port/sysproc.c b/port/sysproc.c index 5caf6a715be612923082fc06649312c3df3b76cb..70ecbceeeb2739eef40def9d3926a37a18278242 100644 --- a/port/sysproc.c +++ b/port/sysproc.c @@ -12,7 +12,6 @@ int shargs(char*, int, char**); long sysr1(ulong *arg) { - xsummary(); print("[%s %s %d] r1 = %d\n", up->user, up->text, up->pid, arg[0]); return 0; } @@ -216,7 +215,7 @@ sysexec(ulong *arg) magic = l2be(exec.magic); text = l2be(exec.text); entry = l2be(exec.entry); - if(n==sizeof(Exec) && (magic==AOUT_MAGIC)){ + if(n==sizeof(Exec) && EXEC_MAGIC(magic)){ if((text&KZERO) || entry < UTZERO+sizeof(Exec) || entry >= UTZERO+sizeof(Exec)+text) diff --git a/power/dat.h b/power/dat.h index ba8e1203c61873611771acb48a40661f91f8d025..e0a1f4f5f83a7af63f06070551cbd6176dfdf893 100644 --- a/power/dat.h +++ b/power/dat.h @@ -14,7 +14,7 @@ typedef struct Ureg Ureg; /* * parameters for sysproc.c */ -#define AOUT_MAGIC V_MAGIC +#define EXEC_MAGIC(magic) (magic==V_MAGIC) /* * machine dependent definitions used by ../port/dat.h