mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-12 12:16:04 +08:00
70 lines
2.6 KiB
C
70 lines
2.6 KiB
C
|
/* Copyright (C) 2021 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. */
|
||
|
|
||
|
#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 manor, 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);
|