https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9930eeca765ac2520a7bd5...
commit 9930eeca765ac2520a7bd5dd411915d232cc96c3 Author: Jérôme Gardou jerome.gardou@reactos.org AuthorDate: Thu May 6 18:32:44 2021 +0200 Commit: Jérôme Gardou jerome.gardou@reactos.org CommitDate: Tue May 11 11:00:49 2021 +0200
[KDGDB] Implement TIB address retrieval --- drivers/base/kdgdb/gdb_input.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/drivers/base/kdgdb/gdb_input.c b/drivers/base/kdgdb/gdb_input.c index c10d7750c84..822efb88042 100644 --- a/drivers/base/kdgdb/gdb_input.c +++ b/drivers/base/kdgdb/gdb_input.c @@ -259,6 +259,30 @@ handle_gdb_query(void) return send_gdb_packet("l"); }
+ if (strncmp(gdb_input, "qGetTIBAddr:", 12) == 0) + { + ULONG_PTR Pid, Tid; + PETHREAD Thread; + +#if MONOPROCESS + Pid = 0; + Tid = hex_to_tid(&gdb_input[12]); + + KDDBGPRINT(" %p.\n", Tid); + + Thread = find_thread(Pid, Tid); +#else + Pid = hex_to_pid(&gdb_input[13]); + Tid = hex_to_tid(strstr(&gdb_input[13], ".") + 1); + + /* We cannot use PsLookupProcessThreadByCid as we could be running at any IRQL. + * So loop. */ + KDDBGPRINT(" p%p.%p.\n", Pid, Tid); + Thread = find_thread(Pid, Tid); +#endif + return send_gdb_memory(&Thread->Tcb.Teb, sizeof(Thread->Tcb.Teb)); + } + if (strncmp(gdb_input, "qThreadExtraInfo,", 17) == 0) { ULONG_PTR Pid, Tid;