This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 3/3] gdbserver/Windows: crash during connection establishment phase
- From: Joel Brobecker <brobecker at adacore dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 4 May 2018 14:30:03 -0400
- Subject: [PATCH 3/3] gdbserver/Windows: crash during connection establishment phase
- References: <1525458603-33351-1-git-send-email-brobecker@adacore.com>
On Windows, starting a new process with GDBserver seeems to work,
in the sense that the program does get started, and GDBserver
confirms that it is listening for GDB to connect. However, as soon as
GDB establishes the connection with GDBserver, and starts discussing
with it, GDBserver crashes, with a SEGV.
This SEGV occurs in remote-utils.c::prepare_resume_reply...
| regp = current_target_desc ()->expedite_regs;
| [...]
| while (*regp)
... because, in our case, REGP is NULL.
This patch fixes the problem for Windows targets based on Intel
(x86 and x86_64).
gdb/gdbserver/ChangeLog:
* win32-i386-low.c (i386_arch_setup): set tdesc->expedite_regs.
---
gdb/gdbserver/win32-i386-low.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c
index a242f72..fdb95ce 100644
--- a/gdb/gdbserver/win32-i386-low.c
+++ b/gdb/gdbserver/win32-i386-low.c
@@ -442,6 +442,16 @@ i386_arch_setup (void)
init_target_desc (tdesc);
+#ifndef IN_PROCESS_AGENT
+#ifdef __x86_64__
+ static const char *expedite_regs_amd64[] = { "rbp", "rsp", "rip", NULL };
+ tdesc->expedite_regs = expedite_regs_amd64;
+#else /* __x86_64__ */
+ static const char *expedite_regs_i386[] = { "ebp", "esp", "eip", NULL };
+ tdesc->expedite_regs = expedite_regs_i386;
+#endif /* __x86_64__ */
+#endif
+
win32_tdesc = tdesc;
}
--
2.1.4