diff options
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r-- | gdb/gdbserver/server.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 6bb36d8..1083aa9 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -2042,8 +2042,12 @@ handle_v_cont (char *own_buf) { p++; + memset (&resume_info[i], 0, sizeof resume_info[i]); + if (p[0] == 's' || p[0] == 'S') resume_info[i].kind = resume_step; + else if (p[0] == 'r') + resume_info[i].kind = resume_step; else if (p[0] == 'c' || p[0] == 'C') resume_info[i].kind = resume_continue; else if (p[0] == 't') @@ -2063,9 +2067,22 @@ handle_v_cont (char *own_buf) goto err; resume_info[i].sig = gdb_signal_to_host (sig); } + else if (p[0] == 'r') + { + char *p1; + + p = p + 1; + p1 = strchr (p, ','); + decode_address (&resume_info[i].step_range_start, p, p1 - p); + + p = p1 + 1; + p1 = strchr (p, ':'); + decode_address (&resume_info[i].step_range_end, p, p1 - p); + + p = p1; + } else { - resume_info[i].sig = 0; p = p + 1; } @@ -2311,6 +2328,11 @@ handle_v_requests (char *own_buf, int packet_len, int *new_packet_len) if (strncmp (own_buf, "vCont?", 6) == 0) { strcpy (own_buf, "vCont;c;C;s;S;t"); + if (target_supports_range_stepping ()) + { + own_buf = own_buf + strlen (own_buf); + strcpy (own_buf, ";r"); + } return; } } |