This is an automated email from Gerrit. "Jan Matyas <mat...@codasip.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6879
-- gerrit commit fe5dd5ccfb9b903d6945e8b4a0b5315ce73e4911 Author: Jan Matyas <mat...@codasip.com> Date: Thu Mar 17 14:27:58 2022 +0100 gdb_server: Improve logging of GDB-remote packets - Print also the target name, not just the packet contents. This is important when there are more GDB servers active in one OpenOCD session. - Log also the received Ctrl-C requests from GDB (one byte 0x3). Also do not print zero-length incoming packets (this occurred when Ctrl-C packets were received). - Removed a stray apostrophe "'" that got printed in gdb_log_outgoing_packet() Signed-off-by: Jan Matyas <mat...@codasip.com> Change-Id: If68fe0a8aa635165d0bbe6fa0e48a4645a02da67 diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 4dee7e8642..ab6db6ad55 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -362,11 +362,17 @@ static int gdb_write(struct connection *connection, void *data, int len) return ERROR_SERVER_REMOTE_CLOSED; } -static void gdb_log_incoming_packet(char *packet) +static void gdb_log_incoming_packet(struct connection *connection, char *packet) { + assert(connection); + assert(packet); + if (!LOG_LEVEL_IS(LOG_LVL_DEBUG)) return; + struct target *target = get_target_from_connection(connection); + assert(target); + /* Avoid dumping non-printable characters to the terminal */ const unsigned packet_len = strlen(packet); const char *nonprint = find_nonprint_char(packet, packet_len); @@ -380,25 +386,35 @@ static void gdb_log_incoming_packet(char *packet) if (packet_prefix_printable) { const unsigned int prefix_len = colon - packet + 1; /* + 1 to include the ':' */ const unsigned int payload_len = packet_len - prefix_len; - LOG_DEBUG("received packet: %.*s<binary-data-%u-bytes>", prefix_len, packet, payload_len); + LOG_TARGET_DEBUG(target, "received packet: %.*s<binary-data-%u-bytes>", prefix_len, + packet, payload_len); } else { - LOG_DEBUG("received packet: <binary-data-%u-bytes>", packet_len); + LOG_TARGET_DEBUG(target, "received packet: <binary-data-%u-bytes>", packet_len); } } else { /* All chars printable, dump the packet as is */ - LOG_DEBUG("received packet: %s", packet); + LOG_TARGET_DEBUG(target, "received packet: %s", packet); } } -static void gdb_log_outgoing_packet(char *packet_buf, unsigned int packet_len, unsigned char checksum) +static void gdb_log_outgoing_packet(struct connection *connection, char *packet_buf, + unsigned int packet_len, unsigned char checksum) { + assert(connection); + assert(packet_buf); + if (!LOG_LEVEL_IS(LOG_LVL_DEBUG)) return; + struct target *target = get_target_from_connection(connection); + assert(target); + if (find_nonprint_char(packet_buf, packet_len)) - LOG_DEBUG("sending packet: $<binary-data-%u-bytes>#%2.2x", packet_len, checksum); + LOG_TARGET_DEBUG(target, "sending packet: $<binary-data-%u-bytes>#%2.2x", + packet_len, checksum); else - LOG_DEBUG("sending packet: $%.*s#%2.2x'", packet_len, packet_buf, checksum); + LOG_TARGET_DEBUG(target, "sending packet: $%.*s#%2.2x", packet_len, packet_buf, + checksum); } static int gdb_put_packet_inner(struct connection *connection, @@ -441,7 +457,7 @@ static int gdb_put_packet_inner(struct connection *connection, #endif while (1) { - gdb_log_outgoing_packet(buffer, len, my_checksum); + gdb_log_outgoing_packet(connection, buffer, len, my_checksum); char local_buffer[1024]; local_buffer[0] = '$'; @@ -482,6 +498,7 @@ static int gdb_put_packet_inner(struct connection *connection, LOG_WARNING("negative reply, retrying"); } else if (reply == 0x3) { gdb_con->ctrl_c = true; + gdb_log_incoming_packet(connection, "<Ctrl-C>"); retval = gdb_get_char(connection, &reply); if (retval != ERROR_OK) return retval; @@ -687,6 +704,7 @@ static int gdb_get_packet_inner(struct connection *connection, break; case 0x3: gdb_con->ctrl_c = true; + gdb_log_incoming_packet(connection, "<Ctrl-C>"); *len = 0; return ERROR_OK; default: @@ -3436,9 +3454,10 @@ static int gdb_input_inner(struct connection *connection) /* terminate with zero */ gdb_packet_buffer[packet_size] = '\0'; - gdb_log_incoming_packet(gdb_packet_buffer); - if (packet_size > 0) { + + gdb_log_incoming_packet(connection, gdb_packet_buffer); + retval = ERROR_OK; switch (packet[0]) { case 'T': /* Is thread alive? */ --