Go to file
Andrew Burgess abbbd4a3e0 gdb: use libbacktrace to create a better backtrace for fatal signals
GDB recently gained the ability to print a backtrace when a fatal
signal is encountered.  This backtrace is produced using the backtrace
and backtrace_symbols_fd API available in glibc.

However, in order for this API to actually map addresses to symbol
names it is required that the application (GDB) be compiled with
-rdynamic, which GDB is not by default.

As a result, the backtrace produced often looks like this:

  Fatal signal: Bus error
  ----- Backtrace -----
  ./gdb/gdb[0x80ec00]
  ./gdb/gdb[0x80ed56]
  /lib64/libc.so.6(+0x3c6b0)[0x7fc2ce1936b0]
  /lib64/libc.so.6(__poll+0x4f)[0x7fc2ce24da5f]
  ./gdb/gdb[0x15495ba]
  ./gdb/gdb[0x15489b8]
  ./gdb/gdb[0x9b794d]
  ./gdb/gdb[0x9b7a6d]
  ./gdb/gdb[0x9b943b]
  ./gdb/gdb[0x9b94a1]
  ./gdb/gdb[0x4175dd]
  /lib64/libc.so.6(__libc_start_main+0xf3)[0x7fc2ce17e1a3]
  ./gdb/gdb[0x4174de]
  ---------------------

This is OK if you have access to the exact same build of GDB, you can
manually map the addresses back to symbols, however, it is next to
useless if all you have is a backtrace copied into a bug report.

GCC uses libbacktrace for printing a backtrace when it encounters an
error.  In recent commits I added this library into the binutils-gdb
repository, and in this commit I allow this library to be used by
GDB.  Now (when GDB is compiled with debug information) the backtrace
looks like this:

  ----- Backtrace -----
  0x80ee08 gdb_internal_backtrace
  	../../src/gdb/event-top.c:989
  0x80ef0b handle_fatal_signal
  	../../src/gdb/event-top.c:1036
  0x7f24539dd6af ???
  0x7f2453a97a5f ???
  0x154976f gdb_wait_for_event
  	../../src/gdbsupport/event-loop.cc:613
  0x1548b6d _Z16gdb_do_one_eventv
  	../../src/gdbsupport/event-loop.cc:237
  0x9b7b02 start_event_loop
  	../../src/gdb/main.c:421
  0x9b7c22 captured_command_loop
  	../../src/gdb/main.c:481
  0x9b95f0 captured_main
  	../../src/gdb/main.c:1353
  0x9b9656 _Z8gdb_mainP18captured_main_args
  	../../src/gdb/main.c:1368
  0x4175ec main
  	../../src/gdb/gdb.c:32
  ---------------------

Which seems much more useful.

Use of libbacktrace is optional.  If GDB is configured with
--disable-libbacktrace then the libbacktrace directory will not be
built, and GDB will not try to use this library.  In this case GDB
would try to use the old backtrace and backtrace_symbols_fd API.

All of the functions related to writing the backtrace of GDB itself
have been moved into the new files gdb/by-utils.{c,h}.
2021-09-28 12:21:22 +01:00
bfd Automatic date update in version.in 2021-09-28 00:00:07 +00:00
binutils PR28391, strip/objcopy --preserve-dates *.a: cannot set time 2021-09-28 20:18:48 +09:30
config Deprecate a.out support for NetBSD targets. 2021-08-11 13:17:54 +01:00
contrib
cpu Re: opcodes: constify & local meps macros 2021-07-05 21:40:49 +09:30
elfcpp PATCH [4/4] arm: Add Tag_PACRET_use build attribute 2021-08-17 14:49:42 +02:00
etc etc: switch to automake 2021-09-09 23:30:12 -04:00
gas x86: Print {bad} on invalid broadcast in OP_E_memory 2021-09-28 11:13:50 +08:00
gdb gdb: use libbacktrace to create a better backtrace for fatal signals 2021-09-28 12:21:22 +01:00
gdbserver Change ptid_t::tid to ULONGEST 2021-09-23 09:30:54 -06:00
gdbsupport Change ptid_t::tid to ULONGEST 2021-09-23 09:30:54 -06:00
gnulib gnulib: import various network functions 2021-09-08 17:48:09 -04:00
gold [GOLD] PowerPC64 support for sym+addend GOT entries 2021-09-18 08:20:11 +09:30
gprof configure: regenerate in all projects that use libtool.m4 2021-09-27 20:31:24 +01:00
include Revert: [AArch64] MTE corefile support 2021-09-07 11:03:20 -03:00
intl Deprecate a.out support for NetBSD targets. 2021-08-11 13:17:54 +01:00
ld configure: regenerate in all projects that use libtool.m4 2021-09-27 20:31:24 +01:00
libbacktrace Copy in libbacktrace from gcc 2021-09-28 12:21:21 +01:00
libctf libctf, lookup: fix bounds of pptrtab lookup 2021-09-27 20:31:26 +01:00
libdecnumber
libiberty Deprecate a.out support for NetBSD targets. 2021-08-11 13:17:54 +01:00
opcodes x86: Print {bad} on invalid broadcast in OP_E_memory 2021-09-28 11:13:50 +08:00
readline
sim sim: drop weak func attrs on module inits 2021-09-28 01:51:38 -04:00
texinfo
zlib configure: regenerate in all projects that use libtool.m4 2021-09-27 20:31:24 +01:00
.cvsignore
.gitattributes
.gitignore
ar-lib
ChangeLog src-release.sh: add libbacktrace to GDB_SUPPORT_DIRS 2021-09-28 12:21:21 +01:00
compile
config-ml.in
config.guess
config.rpath
config.sub
configure top-level configure: setup target_configdirs based on repository 2021-09-28 12:21:21 +01:00
configure.ac top-level configure: setup target_configdirs based on repository 2021-09-28 12:21:21 +01:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4 libtool.m4: fix nm BSD flag detection 2021-09-27 20:31:23 +01:00
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def gdb: Add a dependency between gdb and libbacktrace 2021-09-28 12:21:21 +01:00
Makefile.in gdb: Add a dependency between gdb and libbacktrace 2021-09-28 12:21:21 +01:00
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode
setup.com
src-release.sh src-release.sh: add libbacktrace to GDB_SUPPORT_DIRS 2021-09-28 12:21:21 +01:00
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.