[GDB] Handle kill and detach packets.
authorStefan Hajnoczi <stefanha@gmail.com>
Thu, 5 Jun 2008 14:31:48 +0000 (15:31 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Thu, 5 Jun 2008 14:31:48 +0000 (15:31 +0100)
This commit also includes a test to ensure that single stepping works,
since continue, kill, detach, and single step all share code.

src/core/gdbstub.c
src/tests/gdbstub_test.S
src/tests/gdbstub_test.gdb

index 213887b..544595e 100644 (file)
@@ -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;
index ee594ea..6478308 100644 (file)
@@ -25,5 +25,9 @@ gdbstub_test:
        int     $3
        addl    $8, %esp
 
+       /* 5. Step test */
+       int     $3
+       nop
+
 1:
        jmp     1b
index 10db863..c0c5964 100755 (executable)
@@ -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