mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-24 03:06:17 +00:00
thermosphere: introduce GDB_TEST_NO_CMD_DATA
This commit is contained in:
parent
dd7f0b805b
commit
ff2c835b0a
3 changed files with 15 additions and 7 deletions
|
@ -30,17 +30,19 @@
|
||||||
// IDA seems to want additional bytes as well.
|
// IDA seems to want additional bytes as well.
|
||||||
// 1024 is fine enough to put all regs in the 'T' stop reply packets
|
// 1024 is fine enough to put all regs in the 'T' stop reply packets
|
||||||
// Add 4 to this for the actual allocated size, for $#<checksum>, see below.
|
// Add 4 to this for the actual allocated size, for $#<checksum>, see below.
|
||||||
#define GDB_BUF_LEN 0x800
|
#define GDB_BUF_LEN 0x800
|
||||||
#define GDB_WORK_BUF_LEN 0x1000
|
#define GDB_WORK_BUF_LEN 0x1000
|
||||||
|
|
||||||
#define GDB_HANDLER(name) Handle##name
|
#define GDB_HANDLER(name) Handle##name
|
||||||
#define GDB_QUERY_HANDLER(name) GDB_HANDLER(Query##name)
|
#define GDB_QUERY_HANDLER(name) GDB_HANDLER(Query##name)
|
||||||
#define GDB_VERBOSE_HANDLER(name) GDB_HANDLER(Verbose##name)
|
#define GDB_VERBOSE_HANDLER(name) GDB_HANDLER(Verbose##name)
|
||||||
#define GDB_REMOTE_COMMAND_HANDLER(name) GDB_HANDLER(RemoteCommand##name)
|
#define GDB_REMOTE_COMMAND_HANDLER(name) GDB_HANDLER(RemoteCommand##name)
|
||||||
#define GDB_XFER_HANDLER(name) GDB_HANDLER(Xfer##name)
|
#define GDB_XFER_HANDLER(name) GDB_HANDLER(Xfer##name)
|
||||||
|
|
||||||
#define GDB_DEFINE_HANDLER(name) int Context::GDB_HANDLER(name)()
|
#define GDB_DEFINE_HANDLER(name) int Context::GDB_HANDLER(name)()
|
||||||
#define GDB_DEFINE_QUERY_HANDLER(name) GDB_DEFINE_HANDLER(Query##name)
|
#define GDB_DEFINE_QUERY_HANDLER(name) GDB_DEFINE_HANDLER(Query##name)
|
||||||
#define GDB_DEFINE_VERBOSE_HANDLER(name) GDB_DEFINE_HANDLER(Verbose##name)
|
#define GDB_DEFINE_VERBOSE_HANDLER(name) GDB_DEFINE_HANDLER(Verbose##name)
|
||||||
#define GDB_DEFINE_REMOTE_COMMAND_HANDLER(name) GDB_DEFINE_HANDLER(RemoteCommand##name)
|
#define GDB_DEFINE_REMOTE_COMMAND_HANDLER(name) GDB_DEFINE_HANDLER(RemoteCommand##name)
|
||||||
#define GDB_DECLARE_XFER_HANDLER(name) GDB_DEFINE_HANDLER(Xfer##name)
|
#define GDB_DECLARE_XFER_HANDLER(name) GDB_DEFINE_HANDLER(Xfer##name)
|
||||||
|
|
||||||
|
#define GDB_TEST_NO_CMD_DATA() do { if (!m_commandData.empty()) return ReplyErrno(EILSEQ); } while (false)
|
||||||
|
|
|
@ -75,6 +75,7 @@ namespace ams::hvisor::gdb {
|
||||||
GDB_DEFINE_HANDLER(ReadRegisters)
|
GDB_DEFINE_HANDLER(ReadRegisters)
|
||||||
{
|
{
|
||||||
ENSURE(m_selectedCoreId == currentCoreCtx->coreId);
|
ENSURE(m_selectedCoreId == currentCoreCtx->coreId);
|
||||||
|
GDB_TEST_NO_CMD_DATA();
|
||||||
|
|
||||||
ExceptionStackFrame *frame = currentCoreCtx->guestFrame;
|
ExceptionStackFrame *frame = currentCoreCtx->guestFrame;
|
||||||
FpuRegisterCache *fpuRegCache = fpuReadRegisters();
|
FpuRegisterCache *fpuRegCache = fpuReadRegisters();
|
||||||
|
|
|
@ -96,11 +96,14 @@ namespace ams::hvisor::gdb {
|
||||||
|
|
||||||
GDB_DEFINE_QUERY_HANDLER(CurrentThreadId)
|
GDB_DEFINE_QUERY_HANDLER(CurrentThreadId)
|
||||||
{
|
{
|
||||||
|
GDB_TEST_NO_CMD_DATA();
|
||||||
return SendFormattedPacket("QC%x", 1 + currentCoreCtx->coreId);
|
return SendFormattedPacket("QC%x", 1 + currentCoreCtx->coreId);
|
||||||
}
|
}
|
||||||
|
|
||||||
GDB_DEFINE_QUERY_HANDLER(fThreadInfo)
|
GDB_DEFINE_QUERY_HANDLER(fThreadInfo)
|
||||||
{
|
{
|
||||||
|
GDB_TEST_NO_CMD_DATA();
|
||||||
|
|
||||||
// We have made our GDB packet big enough to list all the thread ids (coreIds + 1 for each coreId)
|
// We have made our GDB packet big enough to list all the thread ids (coreIds + 1 for each coreId)
|
||||||
char *buf = GetInPlaceOutputBuffer();
|
char *buf = GetInPlaceOutputBuffer();
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
|
@ -117,6 +120,8 @@ namespace ams::hvisor::gdb {
|
||||||
|
|
||||||
GDB_DEFINE_QUERY_HANDLER(sThreadInfo)
|
GDB_DEFINE_QUERY_HANDLER(sThreadInfo)
|
||||||
{
|
{
|
||||||
|
GDB_TEST_NO_CMD_DATA();
|
||||||
|
|
||||||
// We have made our GDB packet big enough to list all the thread ids (coreIds + 1 for each coreId) in fThreadInfo
|
// We have made our GDB packet big enough to list all the thread ids (coreIds + 1 for each coreId) in fThreadInfo
|
||||||
// Note: we assume GDB doesn't accept notifications during the sequence transfer...
|
// Note: we assume GDB doesn't accept notifications during the sequence transfer...
|
||||||
return SendPacket("l");
|
return SendPacket("l");
|
||||||
|
|
Loading…
Reference in a new issue