M carrera/dat.h => carrera/dat.h +3 -2
@@ 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"
M carrera/fptrap.c => carrera/fptrap.c +1 -1
@@ 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 */
M carrera/l.s => carrera/l.s +93 -116
@@ 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
M carrera/main.c => carrera/main.c +0 -1
@@ 460,7 460,6 @@ procsave(Proc *p)
USED(p);
/* keep track of tlbfaults */
- up->counter[TLBCNTR] += m->tlbfault - m->otlbfault;
m->otlbfault = m->tlbfault;
}
M carrera/mem.h => carrera/mem.h +48 -2
@@ 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,11 99,56 @@
* 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
*/
#define PGSZ4K (0x00<<13)
M carrera/trap.c => carrera/trap.c +13 -8
@@ 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);
}
M carrera/ureg.h => carrera/ureg.h +38 -36
@@ 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;
};
M pc/dat.h => pc/dat.h +1 -1
@@ 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
{
M pc/trap.c => pc/trap.c +0 -1
@@ 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);
M port/devproc.c => port/devproc.c +0 -50
@@ 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;
-}
M port/fault.c => port/fault.c +0 -1
@@ 18,7 18,6 @@ fault(ulong addr, int read)
spllo();
m->pfault++;
- up->counter[FAULTCNTR]++;
for(;;) {
s = seg(up, addr, 1);
if(s == 0) {
M port/portdat.h => port/portdat.h +0 -4
@@ 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
*/
M port/proc.c => port/proc.c +1 -6
@@ 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; i<conf.nproc-1; i++,p++){
+ for(i=0; i<conf.nproc-1; i++,p++)
p->qnext = p+1;
- p->syscall = xalloc(nsyscall * sizeof(ulong));
- }
p->qnext = 0;
}
M port/sysproc.c => port/sysproc.c +1 -2
@@ 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)
M power/dat.h => power/dat.h +1 -1
@@ 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