Do not print anything when self-backtrace unavailable
authorTom Tromey <tromey@adacore.com>
Wed, 5 Jan 2022 15:43:59 +0000 (08:43 -0700)
committerTom Tromey <tromey@adacore.com>
Wed, 5 Jan 2022 17:08:15 +0000 (10:08 -0700)
Right now, gdb's self-backtrace feature will still print something
when a backtrace is unavailable:

   sig_write (_("----- Backtrace -----\n"));
[...]
     sig_write (_("Backtrace unavailable\n"));
    sig_write ("---------------------\n");

However, if GDB_PRINT_INTERNAL_BACKTRACE is undefined, it seems better
to me to print nothing at all.

This patch implements this change.  It also makes a couple of other
small changes in this same module: it adds a header guard to
bt-utils.h, and it protects the definitions of
gdb_internal_backtrace_1 with a check of GDB_PRINT_INTERNAL_BACKTRACE.

gdb/bt-utils.c
gdb/bt-utils.h

index d45631551afbce6eae56a78b79bdfd7758b183ce..681f02c733b61b300dc14ebe3ec3abbef8e70f54 100644 (file)
@@ -41,6 +41,7 @@ gdb_internal_backtrace_set_cmd (const char *args, int from_tty,
 #endif
 }
 
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE
 #ifdef GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE
 
 /* Callback used by libbacktrace if it encounters an error.  */
@@ -142,7 +143,10 @@ gdb_internal_backtrace_1 ()
     sig_write (_("Backtrace might be incomplete.\n"));
 }
 
+#else
+#error "unexpected internal backtrace policy"
 #endif
+#endif /* GDB_PRINT_INTERNAL_BACKTRACE */
 
 /* See bt-utils.h.  */
 
@@ -152,6 +156,7 @@ gdb_internal_backtrace ()
   if (current_ui == nullptr)
     return;
 
+#ifdef GDB_PRINT_INTERNAL_BACKTRACE
   const auto sig_write = [] (const char *msg) -> void
   {
     gdb_stderr->write_async_safe (msg, strlen (msg));
@@ -159,12 +164,11 @@ gdb_internal_backtrace ()
 
   sig_write (_("----- Backtrace -----\n"));
 
-#ifdef GDB_PRINT_INTERNAL_BACKTRACE
   if (gdb_stderr->fd () > -1)
     gdb_internal_backtrace_1 ();
   else
-#endif
     sig_write (_("Backtrace unavailable\n"));
 
   sig_write ("---------------------\n");
+#endif
 }
index 42edc94cef060f8a6090ad308d4c92a1c32e1e7f..898af41044b6e8eeb79c49035c3d9ef1b814d834 100644 (file)
@@ -18,6 +18,9 @@
 /* Support for printing a backtrace when GDB hits an error.  This is not
    for printing backtraces of the inferior, but backtraces of GDB itself.  */
 
+#ifndef BT_UTILS_H
+#define BT_UTILS_H
+
 #ifdef HAVE_LIBBACKTRACE
 # include "backtrace.h"
 # include "backtrace-supported.h"
@@ -67,3 +70,5 @@ extern void gdb_internal_backtrace ();
 
 extern void gdb_internal_backtrace_set_cmd (const char *args, int from_tty,
                                            cmd_list_element *c);
+
+#endif /* BT_UTILS_H */