summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Hajnoczi2008-06-05 16:31:48 +0200
committerMichael Brown2008-06-30 20:19:48 +0200
commit59b5465b30733dcd457698606b6de7cf31a3882d (patch)
treeb8d901a0eac8eb805cc687d8883d9ee5b81a7195 /src
parent[romprefix] Fix PMM detection start address (diff)
downloadipxe-59b5465b30733dcd457698606b6de7cf31a3882d.tar.gz
ipxe-59b5465b30733dcd457698606b6de7cf31a3882d.tar.xz
ipxe-59b5465b30733dcd457698606b6de7cf31a3882d.zip
[GDB] Handle kill and detach packets.
This commit also includes a test to ensure that single stepping works, since continue, kill, detach, and single step all share code.
Diffstat (limited to 'src')
-rw-r--r--src/core/gdbstub.c13
-rw-r--r--src/tests/gdbstub_test.S4
-rwxr-xr-xsrc/tests/gdbstub_test.gdb7
3 files changed, 19 insertions, 5 deletions
diff --git a/src/core/gdbstub.c b/src/core/gdbstub.c
index 213887b5..544595e6 100644
--- a/src/core/gdbstub.c
+++ b/src/core/gdbstub.c
@@ -235,11 +235,14 @@ static void gdbstub_rx_packet ( struct gdbstub *stub ) {
case 'M':
gdbstub_write_mem ( stub );
break;
- case 'c':
- gdbstub_continue ( stub, 0 );
- break;
- case 's':
- gdbstub_continue ( stub, 1 );
+ case 'c': /* Continue */
+ case 'k': /* Kill */
+ case 's': /* Step */
+ case 'D': /* Detach */
+ gdbstub_continue ( stub, stub->payload [ 0 ] == 's' );
+ if ( stub->payload [ 0 ] == 'D' ) {
+ gdbstub_send_ok ( stub );
+ }
break;
default:
stub->len = 0;
diff --git a/src/tests/gdbstub_test.S b/src/tests/gdbstub_test.S
index ee594ea8..64783089 100644
--- a/src/tests/gdbstub_test.S
+++ b/src/tests/gdbstub_test.S
@@ -25,5 +25,9 @@ gdbstub_test:
int $3
addl $8, %esp
+ /* 5. Step test */
+ int $3
+ nop
+
1:
jmp 1b
diff --git a/src/tests/gdbstub_test.gdb b/src/tests/gdbstub_test.gdb
index 10db863e..c0c59644 100755
--- a/src/tests/gdbstub_test.gdb
+++ b/src/tests/gdbstub_test.gdb
@@ -71,6 +71,12 @@ define gpxe_test_mem_write
gpxe_assert ({char}($esp)) (char)0x99 "gpxe_test_mem_write char"
end
+define gpxe_test_step
+ c
+ si
+ gpxe_assert ({char}($eip-1)) (char)0x90 "gpxe_test_step" # nop = 0x90
+end
+
gpxe_load_symbols
gpxe_connect
gpxe_start_tests
@@ -78,3 +84,4 @@ gpxe_test_regs_read
gpxe_test_regs_write
gpxe_test_mem_read
gpxe_test_mem_write
+gpxe_test_step