Ian Lance Taylor 6f8310e238 libbacktrace: support returning discriminator field
Based on patch from Andi Kleen.

	* backtrace.h (backtrace_create_state): Rewrite comment to change
	threaded parameter to flags.
	(backtrace_full_callback, backtrace_syminfo_callback): Document
	behavior change if moredata flag is set.
	(struct backtrace_moredata): Define.
	* backtrace-supported.h.in (BACKTRACE_SUPPORTS_MOREDATA): Define.
	* internal.h (struct backtrace_state): Add moredata field.
	(BACKTRACE_MOREDATA_VERSION): Define.
	* state.c (backtrace_create_state): Change threaded parameter to
	flags.  Set state moredata field based on flags.
	* dwarf.c (struct line): Add disc field.
	(struct function): Add caller_disc field.
	(call_callback): New static function.
	(add_line): Add disc parameter.  Change all callers.  Store disc
	in new line value.
	(read_line_program): Track discriminator value.
	(read_line_info): Initialize disc field in final line entry.
	(read_function_entry): Handle DW_AT_GNU_discriminator.
	(report_inlined_functions): Add disc parameter. Change all
	callers. Call call_callback rather than calling callback
	directly.
	(dwarf_lookup_pc): Handle inlined discriminators. Call
	call_callback rather than calling callback directly.
	(dwarf_fileline): Call call_callback rather than calling callback
	directly.
	* elf.c (elf_syminfo): Pass moredata if requested.
	* macho.c (macho_syminfo): Likewise.
	* pecoff.c (coff_syminfo): Likewise.
	* xcoff.c (xcoff_syminfo): Likewise.
	(xcoff_lookup_pc): Likewise.
	* backtrace.c: #include <string.h>.
	(unwind): Pass moredata if requested.
	* unknown.c: #include <string.h>.
	(unknown_fileline): Pass moredata if requested.
	* fileline.c (backtrace_syminfo_to_full_callback): Add comment
	about moredata.
	* mdtest.c: New test file.
	* Makefile.am (mdtest_SOURCES): Define.
	(mdtest_CFLAGS, mdtest_LDFLAGS, mdtest_LDADD): Define.
	(BUILDTESTS): Add mdtest.
	* Makefile.in: Regenerate.
2026-07-06 12:42:21 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2024-05-01 10:40:39 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2016-09-10 07:59:09 -07:00
2022-01-18 20:10:43 -08:00
2022-01-18 20:10:43 -08:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00
2026-05-03 18:21:13 -07:00

libbacktrace

A C library that may be linked into a C/C++ program to produce symbolic backtraces

Initially written by Ian Lance Taylor iant@golang.org.

This is version 1.0. It is likely that this will always be version 1.0.

The libbacktrace library may be linked into a program or library and used to produce symbolic backtraces. Sample uses would be to print a detailed backtrace when an error occurs or to gather detailed profiling information.

In general the functions provided by this library are async-signal-safe, meaning that they may be safely called from a signal handler. That said, on systems that use dl_iterate_phdr, such as GNU/Linux, the first call to a libbacktrace function will call dl_iterate_phdr, which is not in general async-signal-safe. Therefore, programs that call libbacktrace from a signal handler should ensure that they make an initial call from outside of a signal handler. Similar considerations apply when arranging to call libbacktrace from within malloc; dl_iterate_phdr can also call malloc, so make an initial call to a libbacktrace function outside of malloc before trying to call libbacktrace functions within malloc.

The libbacktrace library is provided under a BSD license. See the source files for the exact license text.

The public functions are declared and documented in the header file backtrace.h, which should be #include'd by a user of the library.

Building libbacktrace will generate a file backtrace-supported.h, which a user of the library may use to determine whether backtraces will work. See the source file backtrace-supported.h.in for the macros that it defines.

As of July 2024, libbacktrace supports ELF, PE/COFF, Mach-O, and XCOFF executables with DWARF debugging information. In other words, it supports GNU/Linux, *BSD, macOS, Windows, and AIX. The library is written to make it straightforward to add support for other object file and debugging formats.

The library relies on the C++ unwind API defined at https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html This API is provided by GCC and clang.

S
Description
A C library that may be linked into a C/C++ program to produce symbolic backtraces
Readme BSD-3-Clause
4.2 MiB
Languages
C 55.9%
Shell 25.6%
Makefile 14.9%
M4 3.5%