binutils-gdb/gdb/bt-utils.h
Tom Tromey ffcc2b69d1 Do not print anything when self-backtrace unavailable
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.
2022-01-05 10:08:15 -07:00

75 lines
2.7 KiB
C

/* Copyright (C) 2021-2022 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* 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"
# if BACKTRACE_SUPPORTED && (! BACKTRACE_USES_MALLOC)
# define GDB_PRINT_INTERNAL_BACKTRACE
# define GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE
# endif
#endif
#if defined HAVE_EXECINFO_H \
&& defined HAVE_EXECINFO_BACKTRACE \
&& !defined PRINT_BACKTRACE_ON_FATAL_SIGNAL
# include <execinfo.h>
# define GDB_PRINT_INTERNAL_BACKTRACE
# define GDB_PRINT_INTERNAL_BACKTRACE_USING_EXECINFO
#endif
/* Define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON. This is a boolean value
that can be used as an initial value for a set/show user setting, where
the setting controls printing a GDB internal backtrace.
If backtrace printing is supported then this will have the value true,
but if backtrace printing is not supported then this has the value
false. */
#ifdef GDB_PRINT_INTERNAL_BACKTRACE
# define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON true
#else
# define GDB_PRINT_INTERNAL_BACKTRACE_INIT_ON false
#endif
/* Print a backtrace of the current GDB process to the current
gdb_stderr. The output is done in a signal async manner, so it is safe
to call from signal handlers. */
extern void gdb_internal_backtrace ();
/* A generic function that can be used as the set function for any set
command that enables printing of an internal backtrace. Command C must
be a boolean set command.
If GDB doesn't support printing a backtrace, and the user has tried to
set the variable associated with command C to true, then the associated
variable will be set back to false, and an error thrown.
If GDB does support printing a backtrace then this function does
nothing. */
extern void gdb_internal_backtrace_set_cmd (const char *args, int from_tty,
cmd_list_element *c);
#endif /* BT_UTILS_H */