diff --git a/gdbserver/debug.cc b/gdbserver/debug.cc index ae9ca5cd768..3d05a76b26a 100644 --- a/gdbserver/debug.cc +++ b/gdbserver/debug.cc @@ -20,6 +20,8 @@ #if !defined (IN_PROCESS_AGENT) bool remote_debug = false; + +bool suppressed_remote_debug = false; #endif /* Output file for debugging. Default to standard error. */ @@ -117,3 +119,11 @@ debug_write (const void *buf, size_t nbyte) int fd = fileno (debug_file); return write (fd, buf, nbyte); } + +/* See debug.h. */ + +void +suppress_next_putpkt_log () +{ + suppressed_remote_debug = true; +} diff --git a/gdbserver/debug.h b/gdbserver/debug.h index f78ef2580c3..eb6f69549ae 100644 --- a/gdbserver/debug.h +++ b/gdbserver/debug.h @@ -22,6 +22,11 @@ #if !defined (IN_PROCESS_AGENT) extern bool remote_debug; +/* If true, do not print the packet content sent with the next putpkt. + This flag is reset to false after each putpkt logging. Useful to + omit printing binary packet contents. */ +extern bool suppressed_remote_debug; + /* Print a "remote" debug statement. */ #define remote_debug_printf(fmt, ...) \ @@ -59,4 +64,9 @@ void debug_flush (void); /* Async signal safe debug output function that calls write directly. */ ssize_t debug_write (const void *buf, size_t nbyte); +/* Suppress the next putpkt debug log by omitting the packet contents. + Useful to reduce the logs when sending binary packets. */ + +void suppress_next_putpkt_log (); + #endif /* GDBSERVER_DEBUG_H */ diff --git a/gdbserver/remote-utils.cc b/gdbserver/remote-utils.cc index 3584697b2ab..df606c71bba 100644 --- a/gdbserver/remote-utils.cc +++ b/gdbserver/remote-utils.cc @@ -26,6 +26,7 @@ #include "dll.h" #include "gdbsupport/common-gdbthread.h" #include "gdbsupport/rsp-low.h" +#include "gdbsupport/scope-exit.h" #include "gdbsupport/netstuff.h" #include "gdbsupport/filestuff.h" #include "gdbsupport/gdb-sigmask.h" @@ -638,6 +639,8 @@ putpkt_binary_1 (char *buf, int cnt, int is_notif) char *p; int cc; + SCOPE_EXIT { suppressed_remote_debug = false; }; + buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1); /* Copy the packet into buffer BUF2, encapsulating it @@ -672,15 +675,15 @@ putpkt_binary_1 (char *buf, int cnt, int is_notif) if (cs.noack_mode || is_notif) { /* Don't expect an ack then. */ - if (is_notif) - remote_debug_printf ("putpkt (\"%s\"); [notif]", buf2); - else - remote_debug_printf ("putpkt (\"%s\"); [noack mode]", buf2); + remote_debug_printf ("putpkt (\"%s\"); [%s]", + (suppressed_remote_debug ? "..." : buf2), + (is_notif ? "notif" : "noack mode")); break; } - remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", buf2); + remote_debug_printf ("putpkt (\"%s\"); [looking for ack]", + (suppressed_remote_debug ? "..." : buf2)); cc = readchar ();