summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/alpha/remote_gdb.cc4
-rw-r--r--src/arch/alpha/remote_gdb.hh2
-rw-r--r--src/arch/arm/remote_gdb.cc6
-rw-r--r--src/arch/arm/remote_gdb.hh15
-rw-r--r--src/arch/mips/remote_gdb.cc4
-rw-r--r--src/arch/mips/remote_gdb.hh7
-rw-r--r--src/arch/power/remote_gdb.cc4
-rw-r--r--src/arch/power/remote_gdb.hh7
-rw-r--r--src/arch/riscv/remote_gdb.cc4
-rw-r--r--src/arch/riscv/remote_gdb.hh1
-rw-r--r--src/arch/sparc/remote_gdb.cc13
-rw-r--r--src/arch/sparc/remote_gdb.hh3
-rw-r--r--src/arch/x86/remote_gdb.cc6
-rw-r--r--src/arch/x86/remote_gdb.hh15
14 files changed, 63 insertions, 28 deletions
diff --git a/src/arch/alpha/remote_gdb.cc b/src/arch/alpha/remote_gdb.cc
index 8c01005da..a9ec4cf89 100644
--- a/src/arch/alpha/remote_gdb.cc
+++ b/src/arch/alpha/remote_gdb.cc
@@ -262,12 +262,12 @@ RemoteGDB::write(Addr vaddr, size_t size, const char *data)
}
-bool
+void
RemoteGDB::insertHardBreak(Addr addr, size_t len)
{
warn_once("Breakpoints do not work in Alpha PAL mode.\n"
" See PCEventQueue::doService() in cpu/pc_event.cc.\n");
- return BaseRemoteGDB::insertHardBreak(addr, len);
+ BaseRemoteGDB::insertHardBreak(addr, len);
}
RemoteGDB::BaseGdbRegCache*
diff --git a/src/arch/alpha/remote_gdb.hh b/src/arch/alpha/remote_gdb.hh
index 4b71fd23a..38ff91933 100644
--- a/src/arch/alpha/remote_gdb.hh
+++ b/src/arch/alpha/remote_gdb.hh
@@ -53,7 +53,7 @@ class RemoteGDB : public BaseRemoteGDB
bool acc(Addr addr, size_t len);
bool write(Addr addr, size_t size, const char *data);
- bool insertHardBreak(Addr addr, size_t len);
+ void insertHardBreak(Addr addr, size_t len) override;
class AlphaGdbRegCache : public BaseGdbRegCache
{
diff --git a/src/arch/arm/remote_gdb.cc b/src/arch/arm/remote_gdb.cc
index b0f6d8e5e..eefe62b42 100644
--- a/src/arch/arm/remote_gdb.cc
+++ b/src/arch/arm/remote_gdb.cc
@@ -165,7 +165,7 @@ using namespace std;
using namespace ArmISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc)
- : BaseRemoteGDB(_system, tc)
+ : BaseRemoteGDB(_system, tc), regCache32(this), regCache64(this)
{
}
@@ -297,7 +297,7 @@ RemoteGDB::BaseGdbRegCache*
RemoteGDB::gdbRegs()
{
if (inAArch64(context))
- return new AArch64GdbRegCache(this);
+ return &regCache32;
else
- return new AArch32GdbRegCache(this);
+ return &regCache64;
}
diff --git a/src/arch/arm/remote_gdb.hh b/src/arch/arm/remote_gdb.hh
index 13ceac17f..acd6f32d2 100644
--- a/src/arch/arm/remote_gdb.hh
+++ b/src/arch/arm/remote_gdb.hh
@@ -79,7 +79,11 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".AArch32GdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".AArch32GdbRegCache";
+ }
};
class AArch64GdbRegCache : public BaseGdbRegCache
@@ -98,9 +102,16 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".AArch64GdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".AArch64GdbRegCache";
+ }
};
+ AArch32GdbRegCache regCache32;
+ AArch64GdbRegCache regCache64;
+
public:
RemoteGDB(System *_system, ThreadContext *tc);
BaseGdbRegCache *gdbRegs();
diff --git a/src/arch/mips/remote_gdb.cc b/src/arch/mips/remote_gdb.cc
index 4fa7cac70..2cc2d779b 100644
--- a/src/arch/mips/remote_gdb.cc
+++ b/src/arch/mips/remote_gdb.cc
@@ -152,7 +152,7 @@ using namespace std;
using namespace MipsISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc)
- : BaseRemoteGDB(_system, tc)
+ : BaseRemoteGDB(_system, tc), regCache(this)
{
}
@@ -207,5 +207,5 @@ RemoteGDB::MipsGdbRegCache::setRegs(ThreadContext *context) const
RemoteGDB::BaseGdbRegCache*
RemoteGDB::gdbRegs() {
- return new MipsGdbRegCache(this);
+ return &regCache;
}
diff --git a/src/arch/mips/remote_gdb.hh b/src/arch/mips/remote_gdb.hh
index fd006e0b6..fba55d84c 100644
--- a/src/arch/mips/remote_gdb.hh
+++ b/src/arch/mips/remote_gdb.hh
@@ -70,9 +70,14 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".MipsGdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".MipsGdbRegCache";
+ }
};
+ MipsGdbRegCache regCache;
public:
RemoteGDB(System *_system, ThreadContext *tc);
diff --git a/src/arch/power/remote_gdb.cc b/src/arch/power/remote_gdb.cc
index 1ed7afbc0..c85aa38f2 100644
--- a/src/arch/power/remote_gdb.cc
+++ b/src/arch/power/remote_gdb.cc
@@ -152,7 +152,7 @@ using namespace std;
using namespace PowerISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc)
- : BaseRemoteGDB(_system, tc)
+ : BaseRemoteGDB(_system, tc), regCache(this)
{
}
@@ -218,6 +218,6 @@ RemoteGDB::PowerGdbRegCache::setRegs(ThreadContext *context) const
RemoteGDB::BaseGdbRegCache*
RemoteGDB::gdbRegs() {
- return new PowerGdbRegCache(this);
+ return &regCache;
}
diff --git a/src/arch/power/remote_gdb.hh b/src/arch/power/remote_gdb.hh
index e1c396266..9fefb345b 100644
--- a/src/arch/power/remote_gdb.hh
+++ b/src/arch/power/remote_gdb.hh
@@ -69,9 +69,14 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".PowerGdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".PowerGdbRegCache";
+ }
};
+ PowerGdbRegCache regCache;
public:
RemoteGDB(System *_system, ThreadContext *tc);
diff --git a/src/arch/riscv/remote_gdb.cc b/src/arch/riscv/remote_gdb.cc
index 2b508762d..3488c8192 100644
--- a/src/arch/riscv/remote_gdb.cc
+++ b/src/arch/riscv/remote_gdb.cc
@@ -149,7 +149,7 @@ using namespace std;
using namespace RiscvISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc)
- : BaseRemoteGDB(_system, tc)
+ : BaseRemoteGDB(_system, tc), regCache(this)
{
}
@@ -201,5 +201,5 @@ RemoteGDB::RiscvGdbRegCache::setRegs(ThreadContext *context) const
RemoteGDB::BaseGdbRegCache*
RemoteGDB::gdbRegs() {
- return new RiscvGdbRegCache(this);
+ return &regCache;
}
diff --git a/src/arch/riscv/remote_gdb.hh b/src/arch/riscv/remote_gdb.hh
index 735faae02..4b9d6e7f2 100644
--- a/src/arch/riscv/remote_gdb.hh
+++ b/src/arch/riscv/remote_gdb.hh
@@ -82,6 +82,7 @@ class RemoteGDB : public BaseRemoteGDB
}
};
+ RiscvGdbRegCache regCache;
public:
RemoteGDB(System *_system, ThreadContext *tc);
diff --git a/src/arch/sparc/remote_gdb.cc b/src/arch/sparc/remote_gdb.cc
index b7ecd3b7a..3f4df0d3a 100644
--- a/src/arch/sparc/remote_gdb.cc
+++ b/src/arch/sparc/remote_gdb.cc
@@ -148,7 +148,7 @@ using namespace std;
using namespace SparcISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *c)
- : BaseRemoteGDB(_system, c)
+ : BaseRemoteGDB(_system, c), regCache32(this), regCache64(this)
{}
///////////////////////////////////////////////////////////
@@ -248,10 +248,9 @@ RemoteGDB::BaseGdbRegCache*
RemoteGDB::gdbRegs()
{
PSTATE pstate = context->readMiscReg(MISCREG_PSTATE);
- if (pstate.am)
- {DPRINTF(GDBRead, "Creating 32-bit GDB\n");
- return new SPARCGdbRegCache(this);}
- else
- {DPRINTF(GDBRead, "Creating 64-bit GDB\n");
- return new SPARC64GdbRegCache(this);}
+ if (pstate.am) {
+ return &regCache32;
+ } else {
+ return &regCache64;
+ }
}
diff --git a/src/arch/sparc/remote_gdb.hh b/src/arch/sparc/remote_gdb.hh
index 543683ee8..653f0b113 100644
--- a/src/arch/sparc/remote_gdb.hh
+++ b/src/arch/sparc/remote_gdb.hh
@@ -94,6 +94,9 @@ class RemoteGDB : public BaseRemoteGDB
const std::string name() const { return gdb->name() + ".SPARC64GdbRegCache"; }
};
+ SPARCGdbRegCache regCache32;
+ SPARC64GdbRegCache regCache64;
+
public:
RemoteGDB(System *_system, ThreadContext *tc);
BaseGdbRegCache *gdbRegs();
diff --git a/src/arch/x86/remote_gdb.cc b/src/arch/x86/remote_gdb.cc
index 4a9140e64..79613971a 100644
--- a/src/arch/x86/remote_gdb.cc
+++ b/src/arch/x86/remote_gdb.cc
@@ -65,7 +65,7 @@ using namespace std;
using namespace X86ISA;
RemoteGDB::RemoteGDB(System *_system, ThreadContext *c) :
- BaseRemoteGDB(_system, c)
+ BaseRemoteGDB(_system, c), regCache32(this), regCache64(this)
{}
bool
@@ -97,9 +97,9 @@ RemoteGDB::gdbRegs()
{
HandyM5Reg m5reg = context->readMiscRegNoEffect(MISCREG_M5_REG);
if (m5reg.submode == SixtyFourBitMode)
- return new AMD64GdbRegCache(this);
+ return &regCache64;
else
- return new X86GdbRegCache(this);
+ return &regCache32;
}
diff --git a/src/arch/x86/remote_gdb.hh b/src/arch/x86/remote_gdb.hh
index 5696e3dc7..4a917925e 100644
--- a/src/arch/x86/remote_gdb.hh
+++ b/src/arch/x86/remote_gdb.hh
@@ -85,7 +85,11 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".X86GdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".X86GdbRegCache";
+ }
};
class AMD64GdbRegCache : public BaseGdbRegCache
@@ -128,9 +132,16 @@ class RemoteGDB : public BaseRemoteGDB
size_t size() const { return sizeof(r); }
void getRegs(ThreadContext*);
void setRegs(ThreadContext*) const;
- const std::string name() const { return gdb->name() + ".AMD64GdbRegCache"; }
+ const std::string
+ name() const
+ {
+ return gdb->name() + ".AMD64GdbRegCache";
+ }
};
+ X86GdbRegCache regCache32;
+ AMD64GdbRegCache regCache64;
+
public:
RemoteGDB(System *system, ThreadContext *context);
BaseGdbRegCache *gdbRegs();