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