mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
ffcc2b69d1
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.
75 lines
2.7 KiB
C
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 */
|