Browse Source

pk: remove vestigial trapframe_t::insn field

This assumes that stval is populated with the opcode on illegal
instruction exceptions.  But since we're only using the opcode for
error reporting, it's OK if this assumption is violated.
pull/237/head
Andrew Waterman 5 years ago
parent
commit
fe4118a691
  1. 3
      pk/console.c
  2. 4
      pk/entry.S
  3. 7
      pk/handlers.c
  4. 1
      pk/pk.h

3
pk/console.c

@ -48,8 +48,7 @@ void dump_tf(trapframe_t* tf)
for(int j = 0; j < 4; j++)
printk("%s %lx%c", get_regname(i+j), tf->gpr[i+j], j < 3 ? ' ' : '\n');
}
printk("pc %lx va %lx insn %x sr %lx\n", tf->epc, tf->badvaddr,
(uint32_t)tf->insn, tf->status);
printk("pc %lx va/inst %lx sr %lx\n", tf->epc, tf->badvaddr, tf->status);
}
void do_panic(const char* s, ...)

4
pk/entry.S

@ -47,10 +47,6 @@
STORE t1,33*REGBYTES(x2)
STORE t2,34*REGBYTES(x2)
STORE t3,35*REGBYTES(x2)
# get faulting insn, if it wasn't a fetch-related trap
li x5,-1
STORE x5,36*REGBYTES(x2)
1:
.endm

7
pk/handlers.c

@ -25,13 +25,6 @@ static void handle_store_access_fault(trapframe_t *tf)
static void handle_illegal_instruction(trapframe_t* tf)
{
tf->insn = *(uint16_t*)tf->epc;
int len = insn_len(tf->insn);
if (len == 4)
tf->insn |= ((uint32_t)*(uint16_t*)(tf->epc + 2) << 16);
else
kassert(len == 2);
dump_tf(tf);
panic("An illegal instruction was executed!");
}

1
pk/pk.h

@ -17,7 +17,6 @@ typedef struct
long epc;
long badvaddr;
long cause;
long insn;
} trapframe_t;
#define panic(s,...) do { do_panic(s"\n", ##__VA_ARGS__); } while(0)

Loading…
Cancel
Save