132c132
< FaultName name() const { return _name; }
---
> FaultName name() const override { return _name; }
134a135
> virtual MiscReg trap_value() const { return 0; }
162c163
< class UnknownInstFault : public RiscvFault
---
> class InstFault : public RiscvFault
163a165,167
> protected:
> const ExtMachInst _inst;
>
165c169,170
< UnknownInstFault() : RiscvFault("Unknown instruction", false, INST_ILLEGAL)
---
> InstFault(FaultName n, const ExtMachInst inst)
> : RiscvFault(n, false, INST_ILLEGAL), _inst(inst)
167a173,182
> MiscReg trap_value() const override { return _inst; }
> };
>
> class UnknownInstFault : public InstFault
> {
> public:
> UnknownInstFault(const ExtMachInst inst)
> : InstFault("Unknown instruction", inst)
> {}
>
171c186
< class IllegalInstFault : public RiscvFault
---
> class IllegalInstFault : public InstFault
177,178c192,193
< IllegalInstFault(std::string r)
< : RiscvFault("Illegal instruction", false, INST_ILLEGAL)
---
> IllegalInstFault(std::string r, const ExtMachInst inst)
> : InstFault("Illegal instruction", inst)
184c199
< class UnimplementedFault : public RiscvFault
---
> class UnimplementedFault : public InstFault
190,191c205,206
< UnimplementedFault(std::string name)
< : RiscvFault("Unimplemented instruction", false, INST_ILLEGAL),
---
> UnimplementedFault(std::string name, const ExtMachInst inst)
> : InstFault("Unimplemented instruction", inst),
198c213
< class IllegalFrmFault: public RiscvFault
---
> class IllegalFrmFault: public InstFault
204,206c219,220
< IllegalFrmFault(uint8_t r)
< : RiscvFault("Illegal floating-point rounding mode", false,
< INST_ILLEGAL),
---
> IllegalFrmFault(uint8_t r, const ExtMachInst inst)
> : InstFault("Illegal floating-point rounding mode", inst),
212a227,239
> class AddressFault : public RiscvFault
> {
> private:
> const Addr _addr;
>
> public:
> AddressFault(const Addr addr, ExceptionCode code)
> : RiscvFault("Address", false, code), _addr(addr)
> {}
>
> MiscReg trap_value() const override { return _addr; }
> };
>
214a242,244
> private:
> const PCState pcState;
>
216c246,250
< BreakpointFault() : RiscvFault("Breakpoint", false, BREAKPOINT) {}
---
> BreakpointFault(const PCState &pc)
> : RiscvFault("Breakpoint", false, BREAKPOINT), pcState(pc)
> {}
>
> MiscReg trap_value() const override { return pcState.pc(); }