42#include "debug/Faults.hh"
78 "NMI overwriting M-mode trap handler state");
88 if (pp ==
PRV_U && misa.rvs && misa.rvn &&
97 if (pp ==
PRV_U && misa.rvs && misa.rvn &&
136 panic(
"Unknown privilege mode %d.", prv);
141 uint64_t _cause =
_code;
182 std::unique_ptr<PCState> new_pc(
dynamic_cast<PCState *
>(
184 panic_if(!new_pc,
"Failed create new PCState from ISA pointer");
187 new_pc->vtype(vtype);
193 if (mmu ==
nullptr) {
194 warn(
"MMU is not Riscv MMU instance, we can't reset PMP");
197 mmu->getPMP()->pmpReset();
204 panic(
"Unknown instruction 0x%08x at pc %s", rsi->machInst,
213 panic(
"Illegal instruction 0x%08x at pc %s: %s", rsi->machInst,
227 panic(
"Illegal floating-point rounding mode 0x%x at pc %s.",
254 auto addr_fault =
dynamic_cast<AddressFault *
>(fault.get());
#define DPRINTFS(x, s,...)
virtual PCStateBase * newPCState(Addr new_inst_addr=0) const =0
Addr getFaultVAddr() const
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
T * get() const
Directly access the pointer itself without taking a reference.
RegVal trap_value() const override
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
void clearLoadReservation(ContextID cid)
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
virtual void invokeSE(ThreadContext *tc, const StaticInstPtr &inst)
ExceptionCode exception() const
void invoke(ThreadContext *tc, const StaticInstPtr &inst) override
FaultName name() const override
bool isNonMaskableInterrupt() const
virtual RegVal trap_value() const
Base class for all RISC-V static instructions.
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
const std::string instName
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
void invokeSE(ThreadContext *tc, const StaticInstPtr &inst) override
virtual void advancePC(PCStateBase &pc_state) const =0
Workload * workload
OS kernel.
bool trapToGdb(GDBSignal signal, ContextID ctx_id) const
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
virtual System * getSystemPtr()=0
virtual BaseISA * getIsaPtr() const =0
virtual BaseCPU * getCpuPtr()=0
virtual const PCStateBase & pcState() const =0
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
virtual BaseMMU * getMMUPtr()=0
virtual ContextID contextId() const =0
virtual void syscall(ThreadContext *tc)
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
#define panic(...)
This implements a cprintf based panic() function.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
#define warn_if(cond,...)
Conditional warning macro that checks the supplied condition and only prints a warning if the conditi...
const RegVal CAUSE_INTERRUPT_MASKS[enums::Num_RiscvType]
bool getFaultVAddr(Fault fault, Addr &va)
Returns true if the fault passed as a first argument was triggered by a memory access,...
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
std::shared_ptr< FaultBase > Fault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
void schedRelBreak(Tick delta)
Cause the simulator to execute a breakpoint relative to the current tick.