gdbserver: Ensure all debug output uses debug functions
authorAlan Hayward <alan.hayward@arm.com>
Tue, 16 Apr 2019 09:37:47 +0000 (10:37 +0100)
committerAlan Hayward <alan.hayward@arm.com>
Wed, 17 Apr 2019 09:42:46 +0000 (10:42 +0100)
All debug output needs to go via debug functions to ensure it writes to the
correct output stream.

gdb/ChangeLog:

* nat/linux-waitpid.c (linux_debug): Call debug_vprintf.

gdb/gdbserver/ChangeLog:

* ax.c (ax_vdebug): Call debug_printf.
* debug.c (debug_write): New function.
* debug.h (debug_write): New declaration.
* linux-low.c (sigchld_handler): Call debug_write.

gdb/ChangeLog
gdb/gdbserver/ChangeLog
gdb/gdbserver/ax.c
gdb/gdbserver/debug.c
gdb/gdbserver/debug.h
gdb/gdbserver/linux-low.c
gdb/nat/linux-waitpid.c

index f8120db4c74b2d33916030e78671d162fd084468..2fb4b8724488acf8a7a4556e49010525a8b8e499 100644 (file)
@@ -1,3 +1,7 @@
+2019-04-17  Alan Hayward  <alan.hayward@arm.com>
+
+       * nat/linux-waitpid.c (linux_debug): Call debug_vprintf.
+
 2019-04-17  Jim Wilson  <jimw@sifive.com>
            Andrew Burgess  <andrew.burgess@embecosm.com>
 
index d3380d614526ca00332edf7fbb47c482135035c1..f8f600e46d271444ba9f97128da09f21ba92e13b 100644 (file)
@@ -1,3 +1,10 @@
+2019-04-17  Alan Hayward  <alan.hayward@arm.com>
+
+       * ax.c (ax_vdebug): Call debug_printf.
+       * debug.c (debug_write): New function.
+       * debug.h (debug_write): New declaration.
+       * linux-low.c (sigchld_handler): Call debug_write.
+
 2019-04-17  Alan Hayward  <alan.hayward@arm.com>
 
        * debug.c (debug_set_output): New function.
index a16fba1ccd73c50950d1be638a6c1a24b39402eb..7b8df917492debf251c4eba54f944d02d83a5798 100644 (file)
@@ -36,7 +36,11 @@ ax_vdebug (const char *fmt, ...)
 
   va_start (ap, fmt);
   vsprintf (buf, fmt, ap);
+#ifdef IN_PROCESS_AGENT
   fprintf (stderr, PROG "/ax: %s\n", buf);
+#else
+  debug_printf (PROG "/ax: %s\n", buf);
+#endif
   va_end (ap);
 }
 
index d80cd5254051bc77aa6d84f6d03a9537b6ea2323..a1cf5dbf7aa918ed39052978fa4fa8fda7bec032 100644 (file)
@@ -130,3 +130,12 @@ do_debug_exit (const char *function_name)
   if (function_name != NULL)
     debug_printf ("<<<< exiting %s\n", function_name);
 }
+
+/* See debug.h.  */
+
+size_t
+debug_write (const void *buf, size_t nbyte)
+{
+  int fd = fileno (debug_file);
+  return write (fd, buf, nbyte);
+}
index f65c91c9ebc3bbc0b0dff8afc046b53343eaf07e..29e58ad8a488311d7b9ef24f09db7959047e8388 100644 (file)
@@ -35,6 +35,9 @@ void debug_flush (void);
 void do_debug_enter (const char *function_name);
 void do_debug_exit (const char *function_name);
 
+/* Async signal safe debug output function that calls write directly.  */
+size_t debug_write (const void *buf, size_t nbyte);
+
 /* These macros are for use in major functions that produce a lot of
    debugging output.  They help identify in the mass of debugging output
    when these functions enter and exit.  debug_enter is intended to be
index 168f4b2abc2db0f33ac65eb574f141f9052b18e6..917b1c290bcdc0dde742a405907eb920d9f8ae90 100644 (file)
@@ -6185,10 +6185,9 @@ sigchld_handler (int signo)
     {
       do
        {
-         /* fprintf is not async-signal-safe, so call write
-            directly.  */
-         if (write (2, "sigchld_handler\n",
-                    sizeof ("sigchld_handler\n") - 1) < 0)
+         /* Use the async signal safe debug function.  */
+         if (debug_write ("sigchld_handler\n",
+                          sizeof ("sigchld_handler\n") - 1) < 0)
            break; /* just ignore */
        } while (0);
     }
index e31c088f66d402c3d2f297a18f21152588887198..a7d11ab8d32aa48ec5dbe7f45031806f16981bb8 100644 (file)
@@ -42,7 +42,7 @@ linux_debug (const char *format, ...)
     {
       va_list args;
       va_start (args, format);
-      vfprintf (stderr, format, args);
+      debug_vprintf (format, args);
       va_end (args);
     }
 #endif