Browse Source

Add gva field to trap_breakpoint

So I can fix breakpoints next to properly report gva.
pull/850/head
Scott Johnson 4 years ago
parent
commit
f862f8c9f2
No known key found for this signature in database GPG Key ID: 61C1F01D3D1410C9
  1. 2
      riscv/execute.cc
  2. 2
      riscv/insns/c_ebreak.h
  3. 2
      riscv/insns/ebreak.h
  4. 8
      riscv/trap.h

2
riscv/execute.cc

@ -329,7 +329,7 @@ void processor_t::step(size_t n)
enter_debug_mode(DCSR_CAUSE_HWBP);
break;
case ACTION_DEBUG_EXCEPTION: {
trap_breakpoint trap(t.address);
trap_breakpoint trap(/*gva*/false, t.address);
take_trap(trap, pc);
break;
}

2
riscv/insns/c_ebreak.h

@ -1,2 +1,2 @@
require_extension('C');
throw trap_breakpoint(pc);
throw trap_breakpoint(/*gva*/false, pc);

2
riscv/insns/ebreak.h

@ -1 +1 @@
throw trap_breakpoint(pc);
throw trap_breakpoint(/*gva*/false, pc);

8
riscv/trap.h

@ -68,6 +68,12 @@ class mem_trap_t : public trap_t
const char* name() { return "trap_"#x; } \
};
#define DECLARE_INST_WITH_GVA_TRAP(n, x) class trap_##x : public insn_trap_t { \
public: \
trap_##x(bool gva, reg_t tval) : insn_trap_t(n, gva, tval) {} \
const char* name() { return "trap_"#x; } \
};
#define DECLARE_MEM_TRAP(n, x) class trap_##x : public mem_trap_t { \
public: \
trap_##x(bool gva, reg_t tval, reg_t tval2, reg_t tinst) : mem_trap_t(n, gva, tval, tval2, tinst) {} \
@ -83,7 +89,7 @@ class mem_trap_t : public trap_t
DECLARE_MEM_TRAP(CAUSE_MISALIGNED_FETCH, instruction_address_misaligned)
DECLARE_MEM_TRAP(CAUSE_FETCH_ACCESS, instruction_access_fault)
DECLARE_INST_TRAP(CAUSE_ILLEGAL_INSTRUCTION, illegal_instruction)
DECLARE_INST_TRAP(CAUSE_BREAKPOINT, breakpoint)
DECLARE_INST_WITH_GVA_TRAP(CAUSE_BREAKPOINT, breakpoint)
DECLARE_MEM_TRAP(CAUSE_MISALIGNED_LOAD, load_address_misaligned)
DECLARE_MEM_TRAP(CAUSE_MISALIGNED_STORE, store_address_misaligned)
DECLARE_MEM_TRAP(CAUSE_LOAD_ACCESS, load_access_fault)

Loading…
Cancel
Save