aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r--gdb/gdbserver/server.c16
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