Currently, gdb stub and internal debugger are mutually exclusive. The patch attempts to solve this limitation.
Please note this is only a draft version. Just want to know if someone interested.
Overview:
gdb stub will run as a separate thread, the port is hard-coded to 1234. It is strongly recommended to connect gdb when simulator is stopped to avoid race condition.
When gdb client want to continue or step the program, gdb stub just simulates the key press of F5/F11 on GUI debugger. Therefore, if you control the execution by gdb client only, the consistency of gdb client and internal debugger is supposed to be guaranteed.
GDB stub uses simulator linear breakpoints pool rather than private one used in previous gdbstub.cc.
The exception handler is installed in OnBreak() function; it will signal a conditional var that blocked gdb stub thread.
Known issues:
Only tested with x86-64 enabled bochs.
gdb client must load elf-64 to debug. It always outputs 64-bit regs.
Only gtk-based method is implemented to send fake key press.
Observered abnormal exit of simulator when "step" the HLT instruction.
ddd sometimes reports invalid packet for "m" command.
F5/F11 is hard-coded
Tested in ddd with step, next, continue commands.
new gdb stub v0.1