aboutsummaryrefslogtreecommitdiffstats
path: root/tools/debugger
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-03-31 10:07:55 +0100
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-03-31 10:07:55 +0100
commit3d95d58003486f471d73cfbefba347aa4a484436 (patch)
tree01ea2219efb13d77bde4da11efd148cf5b6b14c9 /tools/debugger
parentf651bf191b0f75c8bc83a1535a2bc328f60ad185 (diff)
downloadxen-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.c33
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);
}
}