138#include "arch/riscv/gdb-xml/gdb_xml_riscv_32bit_cpu.hh"
139#include "arch/riscv/gdb-xml/gdb_xml_riscv_32bit_csr.hh"
140#include "arch/riscv/gdb-xml/gdb_xml_riscv_32bit_fpu.hh"
141#include "arch/riscv/gdb-xml/gdb_xml_riscv_32bit_target.hh"
142#include "arch/riscv/gdb-xml/gdb_xml_riscv_64bit_cpu.hh"
143#include "arch/riscv/gdb-xml/gdb_xml_riscv_64bit_csr.hh"
144#include "arch/riscv/gdb-xml/gdb_xml_riscv_64bit_fpu.hh"
145#include "arch/riscv/gdb-xml/gdb_xml_riscv_64bit_target.hh"
153#include "debug/GDBAcc.hh"
160using namespace RiscvISA;
166 panic_if(!isa,
"Cannot derive rv_type from non-riscv isa");
167 return isa->rvType();
170template <
typename x
int>
178 newVal = (oldVal & ~mask) | (
val &
mask);
182template <
typename x
int>
189 newVal = (oldVal & ~mask) | (
val &
mask);
194 : BaseRemoteGDB(_system, _listen_config),
195 regCache32(this), regCache64(this)
200RemoteGDB::acc(Addr va,
size_t len)
204 MMU *mmu =
static_cast<MMU *
>(context()->getMMUPtr());
208 PrivilegeMode pmode = mmu->getMemPriv(context(), BaseMMU::Read);
209 SATP satp = context()->readMiscReg(MISCREG_SATP);
210 if (pmode != PrivilegeMode::PRV_M &&
211 satp.mode != AddrXlateMode::BARE) {
212 Walker *walker = mmu->getDataWalker();
213 Fault fault = walker->startFunctional(
214 context(), paddr, logBytes, BaseMMU::Read);
215 if (fault != NoFault)
221 return context()->getProcessPtr()->pTable->lookup(va) !=
nullptr;
227 DPRINTF(GDBAcc,
"getregs in remotegdb, size %lu\n", size());
231 for (
int i = 0;
i < int_reg::NumArchRegs;
i++) {
237 for (
int i = 0;
i < float_reg::NumRegs;
i++)
341 DPRINTF(GDBAcc,
"setregs in remotegdb \n");
342 for (
int i = 0;
i < int_reg::NumArchRegs;
i++)
347 for (
int i = 0;
i < float_reg::NumRegs;
i++)
422 DPRINTF(GDBAcc,
"getregs in remotegdb, size %lu\n", size());
426 for (
int i = 0;
i < int_reg::NumArchRegs;
i++) {
432 for (
int i = 0;
i < float_reg::NumRegs;
i++)
530 DPRINTF(GDBAcc,
"setregs in remotegdb \n");
531 for (
int i = 0;
i < int_reg::NumArchRegs;
i++)
536 for (
int i = 0;
i < float_reg::NumRegs;
i++)
609RemoteGDB::getXferFeaturesRead(
const std::string &annex, std::string &output)
617#define GDB_XML(x, s) \
619 x, std::string(reinterpret_cast<const char *>(Blobs::s), \
622 static const std::map<std::string, std::string> annexMaps[enums::Num_RiscvType] = {
623 [
RV32] = {
GDB_XML(
"target.xml", gdb_xml_riscv_32bit_target),
624 GDB_XML(
"riscv-32bit-cpu.xml", gdb_xml_riscv_32bit_cpu),
625 GDB_XML(
"riscv-32bit-fpu.xml", gdb_xml_riscv_32bit_fpu),
626 GDB_XML(
"riscv-32bit-csr.xml", gdb_xml_riscv_32bit_csr)},
627 [
RV64] = {
GDB_XML(
"target.xml", gdb_xml_riscv_64bit_target),
628 GDB_XML(
"riscv-64bit-cpu.xml", gdb_xml_riscv_64bit_cpu),
629 GDB_XML(
"riscv-64bit-fpu.xml", gdb_xml_riscv_64bit_fpu),
630 GDB_XML(
"riscv-64bit-csr.xml", gdb_xml_riscv_64bit_csr)},
632 auto& annexMap = annexMaps[getRvType(context())];
633 auto it = annexMap.find(annex);
634 if (it == annexMap.end())
643 BaseGdbRegCache* regs[enums::Num_RiscvType] = {
644 [
RV32] = ®Cache32,
645 [
RV64] = ®Cache64,
RemoteGDB(System *_system, ListenSocketConfig _listen_config)
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
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 RegVal getReg(const RegId ®) const
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
virtual BaseISA * getIsaPtr() const =0
virtual void setReg(const RegId ®, RegVal val)
virtual const PCStateBase & pcState() const =0
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
virtual ContextID contextId() const =0
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
constexpr RegClass intRegClass
constexpr enums::RiscvType RV32
enums::RiscvType RiscvType
const std::unordered_map< int, CSRMetadata > CSRData
const std::unordered_map< int, RegVal > CSRMasks[enums::Num_RiscvType]
constexpr enums::RiscvType RV64
constexpr RegClass floatRegClass
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::shared_ptr< FaultBase > Fault
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
static RiscvType getRvType(ThreadContext *tc)
static void setRegNoEffectWithMask(ThreadContext *context, RiscvType type, CSRIndex idx, xint val)
static void setRegWithMask(ThreadContext *context, RiscvType type, CSRIndex idx, xint val)
Declarations of a non-full system Page Table.