diff options
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r-- | gdb/gdbserver/server.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 25845a7..4e4e5db 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -920,6 +920,9 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) we access breakpoint shadows. */ validate_breakpoints (); + if (target_supports_tracepoints ()) + tracepoint_look_up_symbols (); + if (target_running () && the_target->look_up_symbols != NULL) (*the_target->look_up_symbols) (); @@ -1338,6 +1341,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) && (own_buf[10] == ':' || own_buf[10] == '\0')) { char *p = &own_buf[10]; + int gdb_supports_qRelocInsn = 0; /* Start processing qSupported packet. */ target_process_qsupported (NULL); @@ -1372,6 +1376,11 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) if (target_supports_multi_process ()) multi_process = 1; } + else if (strcmp (p, "qRelocInsn+") == 0) + { + /* GDB supports relocate instruction requests. */ + gdb_supports_qRelocInsn = 1; + } else target_process_qsupported (p); @@ -1422,6 +1431,8 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) strcat (own_buf, ";TraceStateVariables+"); strcat (own_buf, ";TracepointSource+"); strcat (own_buf, ";DisconnectedTracing+"); + if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ()) + strcat (own_buf, ";FastTracepoints+"); } return; @@ -2122,6 +2133,7 @@ handle_status (char *own_buf) else { pause_all (0); + stabilize_threads (); gdb_wants_all_threads_stopped (); if (all_threads.head) @@ -2821,7 +2833,7 @@ process_serial_event (void) break; case 'M': require_running (own_buf); - decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf); + decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf); if (write_memory (mem_addr, mem_buf, len) == 0) write_ok (own_buf); else @@ -2830,7 +2842,7 @@ process_serial_event (void) case 'X': require_running (own_buf); if (decode_X_packet (&own_buf[1], packet_len - 1, - &mem_addr, &len, mem_buf) < 0 + &mem_addr, &len, &mem_buf) < 0 || write_memory (mem_addr, mem_buf, len) != 0) write_enn (own_buf); else |