Go to the documentation of this file.
133 #include <sys/signal.h>
139 #include "arch/arm/gdb-xml/gdb_xml_aarch64_core.hh"
140 #include "arch/arm/gdb-xml/gdb_xml_aarch64_fpu.hh"
141 #include "arch/arm/gdb-xml/gdb_xml_aarch64_target.hh"
142 #include "arch/arm/gdb-xml/gdb_xml_arm_core.hh"
143 #include "arch/arm/gdb-xml/gdb_xml_arm_target.hh"
144 #include "arch/arm/gdb-xml/gdb_xml_arm_vfpv3.hh"
158 #include "debug/GDBAcc.hh"
159 #include "debug/GDBMisc.hh"
169 using namespace ArmISA;
190 auto req = std::make_shared<Request>(
addr, 64, 0x40, -1, 0, 0);
205 :
BaseRemoteGDB(_system, _port), regCache32(this), regCache64(this)
218 DPRINTF(GDBAcc,
"acc: %#x mapping is invalid\n",
va);
223 DPRINTF(GDBAcc,
"acc: %#x mapping is valid\n",
va);
235 DPRINTF(GDBAcc,
"getRegs in remotegdb \n");
237 for (
int i = 0;
i < 31; ++
i)
260 DPRINTF(GDBAcc,
"setRegs in remotegdb \n");
262 for (
int i = 0;
i < 31; ++
i)
290 DPRINTF(GDBAcc,
"getRegs in remotegdb \n");
311 for (
int i = 0;
i < 32;
i++)
320 DPRINTF(GDBAcc,
"setRegs in remotegdb \n");
338 pc_state.
set(
r.gpr[15]);
350 #define GDB_XML(x, s) \
351 { x, std::string(reinterpret_cast<const char *>(Blobs::s), \
353 static const std::map<std::string, std::string> annexMap32{
354 GDB_XML(
"target.xml", gdb_xml_arm_target),
355 GDB_XML(
"arm-core.xml", gdb_xml_arm_core),
356 GDB_XML(
"arm-vfpv3.xml", gdb_xml_arm_vfpv3),
358 static const std::map<std::string, std::string> annexMap64{
359 GDB_XML(
"target.xml", gdb_xml_aarch64_target),
360 GDB_XML(
"aarch64-core.xml", gdb_xml_aarch64_core),
361 GDB_XML(
"aarch64-fpu.xml", gdb_xml_aarch64_fpu),
365 auto it = annexMap.find(annex);
366 if (it == annexMap.end())
384 switch (ArmBpKind(kind)) {
385 case ArmBpKind::THUMB:
386 case ArmBpKind::THUMB_2:
Addr instAddr() const
Returns the memory address of the instruction this PC points to.
constexpr RegId R3(IntRegClass, _R3Idx)
constexpr decltype(nullptr) NoFault
void setRegs(ThreadContext *) const
Set the ThreadContext's registers from the values in the raw buffer.
constexpr RegId R1(IntRegClass, _R1Idx)
constexpr unsigned NumVecElemPerNeonVecReg
virtual RegVal getReg(const RegId ®) const
static void output(const char *filename)
constexpr RegId R6(IntRegClass, _R6Idx)
virtual BaseMMU * getMMUPtr()=0
virtual const PCStateBase & pcState() const =0
constexpr RegId R7(IntRegClass, _R7Idx)
RemoteGDB(System *_system, int _port)
bool acc(Addr addr, size_t len) override
const Entry * lookup(Addr vaddr)
Lookup function.
bool inAArch64(ThreadContext *tc)
virtual void * getWritableReg(const RegId ®)
constexpr RegId R4(IntRegClass, _R4Idx)
static bool tryTranslate(ThreadContext *tc, Addr addr)
Concrete subclasses of this abstract class represent how the register values are transmitted on the w...
void setRegs(ThreadContext *) const
Set the ThreadContext's registers from the values in the raw buffer.
virtual Fault translateFunctional(const RequestPtr &req, ThreadContext *tc, Mode mode)
constexpr RegId R10(IntRegClass, _R10Idx)
This class takes an arbitrary memory region (address/length pair) and generates a series of appropria...
Vector Register Abstraction This generic class is the model in a particularization of MVC,...
bool done() const
Are we done? That is, did the last call to next() advance past the end of the region?
ThreadContext is the external interface to all thread state for anything outside of the CPU.
VecElem * as()
View interposers.
EmulationPageTable * pTable
constexpr RegId R8(IntRegClass, _R8Idx)
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
constexpr RegId R2(IntRegClass, _R2Idx)
bool checkBpKind(size_t kind) override
constexpr RegId R11(IntRegClass, _R11Idx)
constexpr RegId R9(IntRegClass, _R9Idx)
constexpr RegId R0(IntRegClass, _R0Idx)
BaseGdbRegCache * gdbRegs() override
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
AArch64GdbRegCache regCache64
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
virtual Process * getProcessPtr()=0
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
AArch32GdbRegCache regCache32
constexpr RegId Lr(IntRegClass, _LrIdx)
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
void set(Addr val)
Force this PC to reflect a particular value, resetting all its other fields around it.
bool getXferFeaturesRead(const std::string &annex, std::string &output) override
Get an XML target description.
const int NumVecV8ArchRegs
ThreadContext * context()
@ VecRegClass
Vector Register.
constexpr RegId R5(IntRegClass, _R5Idx)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
struct gem5::ArmISA::RemoteGDB::AArch64GdbRegCache::GEM5_PACKED r
constexpr RegId R12(IntRegClass, _R12Idx)
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
VecElem v[NumVecV8ArchRegs *NumVecElemPerNeonVecReg]
Register ID: describe an architectural register with its class and index.
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
virtual void setReg(const RegId ®, RegVal val)
Generated on Thu Jul 28 2022 13:32:24 for gem5 by doxygen 1.8.17