diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-03-31 10:07:55 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-03-31 10:07:55 +0100 |
commit | 3d95d58003486f471d73cfbefba347aa4a484436 (patch) | |
tree | 01ea2219efb13d77bde4da11efd148cf5b6b14c9 /tools/debugger | |
parent | f651bf191b0f75c8bc83a1535a2bc328f60ad185 (diff) | |
download | xen-3d95d58003486f471d73cfbefba347aa4a484436.tar.gz xen-3d95d58003486f471d73cfbefba347aa4a484436.tar.bz2 xen-3d95d58003486f471d73cfbefba347aa4a484436.zip |
Enable the setting and trapping of breakpoints for hvm guest.
Catch Ctrl-C for gdbserver and let gdb break from continue command.
Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
Diffstat (limited to 'tools/debugger')
-rw-r--r-- | tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c b/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c index c987c0eb9d..3e1f50ea49 100644 --- a/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c +++ b/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c @@ -287,6 +287,21 @@ handle_v_requests (char *own_buf, char *status, unsigned char *signal) } void +handle_breakpoint_requests (char *own_buf, char *status, unsigned char *signal) +{ + /* Currently we only support software breakpoints */ + switch (own_buf[1]) { + case '0': /* software breakpoint, int3 based */ + own_buf[0] = '\0'; + break; + case '1': /* hardware breakpoint */ + default: + write_enn (own_buf); + break; + } +} + +void myresume (int step, int sig) { struct thread_resume resume_info[2]; @@ -322,6 +337,18 @@ gdbserver_usage (void) "HOST:PORT to listen for a TCP connection.\n"); } +extern control_c_pressed_flag; +#include <signal.h> + +void ctrl_c_handler(int signo) +{ + printf("Ctrl-C pressed: Quit from the attached gdb first\n"); + control_c_pressed_flag = 1; +} + +struct sigaction ctrl_c_sigaction = { .sa_handler = ctrl_c_handler }; +struct sigaction old_sigaction; + int main (int argc, char *argv[]) { @@ -396,9 +423,11 @@ main (int argc, char *argv[]) } } + while (1) { remote_open (argv[1]); + sigaction(SIGINT, &ctrl_c_sigaction, &old_sigaction); restart: setjmp (toplevel); @@ -587,6 +616,9 @@ main (int argc, char *argv[]) /* Extended (long) request. */ handle_v_requests (own_buf, &status, &signal); break; + case 'Z': + handle_breakpoint_requests (own_buf, &status, &signal); + break; default: /* It is a request we don't understand. Respond with an empty packet so that gdb knows that we don't support this @@ -643,5 +675,6 @@ main (int argc, char *argv[]) "GDBserver will reopen the connection.\n"); remote_close (); } + sigaction(SIGINT, &old_sigaction, NULL); } } |