Ian Lance Taylor
735c54d9dc
libbacktrace: handle MOREDATA correctly without debug info
...
Based on patch from Andi Kleen.
* elf.c (elf_nodebug): Handle state->moredata.
* fileline.c (backtrace_syminfo_to_full_callback): Remove
incorrect comment about MOREDATA.
(backtrace_syminfo_to_full_callback_moredata): New function.
* internal.h (backtrace_syminfo_to_full_callback_moredata):
Declare.
* strippedtest.c: New file.
* configure.ac: check whether objcopy supports --strip-debug.
* Makefile.am (strippedtest_SOURCES): New variable.
(strippedtest_CFLAGS, strippedtest_LDFLAGS): Likewise.
(strippedtest_LDADD): Likewise.
(check_PROGRAMS): Add strippedtest.
(MAKETESTS): Add strippedtest_stripped
(%_stripped): New rule.
* configure, Makefile.in: Regenerate.
2026-09-01 15:17:39 -07:00
Ian Lance Taylor
3bd5a08e4f
libbacktrace: use BACKTRACE_MOREDATA_VERSION rather than 3
...
Patch from Andi Kleen.
* pecoff.c (coff_syminfo): Use BACKTRACE_MOREDATA_VERSION.
* xcoff.c (xcoff_syminfo): Likewise.
(xcoff_lookup_pc): Likewise.
(xcoff_fileline): Likewise.
* unknown.c (unknown_fileline): Likewise.
2026-09-01 15:11:24 -07:00
Ian Lance Taylor
6d913c4521
libbacktrace: report decl_lineno with MOREDATA
...
Based on patch by Andi Kleen.
* backtrace.h (struct backtrace_moredata): Add
backtrace_decl_lineno field.
* internal.h (BACKTRACE_MOREDATA_VERSION): Change to 4.
* dwarf.c (struct function): Add decl_lineno field.
(call_callback): Add decl_lineno parameter. Change all callers.
(read_referenced_name_from_attr): Likewise.
(read_referenced_name): Likewise.
(report_inlined_functions): Likewise.
(read_function_entry): Set decl_lineno field.
(dwarf_lookup_pc): Handle decl_lineno across inlines.
* mdtest.c (struct mdinfo): Define.
(struct mddata): Define.
(md_callback_one): Adjust for mddata.
(md_callback_three): Likewise.
(test1, f2): Reformat for simpler line number testing.
(f3): Test that decl_lineno is correct.
(f13): Adjust for mddata.
2026-08-31 12:42:36 -07:00
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
Ian Lance Taylor
5f4a6d4941
libbacktrace: set table field for zstd RLE sequence
...
Patch from Ivan Molodetskikh.
* elf.c (elf_zstd_unpack_seq_decode): Set table field for RLE
sequence.
* zstdtest.c (tests): Add rle-sequence-tables test.
2026-06-27 09:09:58 -07:00
Ian Lance Taylor
058d953bb7
libbacktrace: support window size in zstd decompression
...
Reportedly this occurs on AerynOS.
Patch from Ivan Molodetskikh.
* elf.c (elf_zstd_decompress_frame): Support a compressed block
that does not set the single segment flag.
* zstdtest.c (tests): Add tests without single segment.
2026-06-27 08:53:22 -07:00
Ian Lance Taylor
549b81b43b
libbacktrace: support compressed block with no sequences
...
* elf.c (elf_zstd_decompress_frame): Support a compressed block
with no sequences, only literals.
Fixes #164
2026-06-01 21:39:35 -07:00
Ian Lance Taylor
96664e69b1
libbacktrace: support multiple zstd frames
...
Based on patch by GitHub user ofats.
* elf.c (elf_zstd_decompress_frame): New static function,
broken out of elf_zstd_decompress.
(elf_zstd_decompress): Call elf_zstd_decompress_frame in a loop.
* zstdtest.c (test_large): Compress the file in chunks.
2026-05-03 18:30:11 -07:00
Ian Lance Taylor
ab3c042b80
libbacktrace: don't use ZSTD_CLEVEL_DEFAULT
...
PR 117812 reports that testing GCC with zstd 1.3.4 fails because
ZSTD_CLEVEL_DEFAULT is not defined, so avoid using it.
PR libbacktrace/117812
* zstdtest.c (test_large): Use 3 rather than ZSTD_CLEVEL_DEFAULT
2026-05-03 18:30:08 -07:00
Ian Lance Taylor
b9e40069c0
libbacktrace: use correct names in #undef of ELF macros
...
Patch from Joseph Koshy.
* elf.c (ELFMAGn): In #undef rename from ELF_MAGn.
2025-11-06 11:30:33 -08:00
Ian Lance Taylor
2f67a3abfd
libbacktrace: recognize PE bigobj objects at configure time
...
Patch from Christopher Wellons.
* filetype.awk: Recognize PE bigobj objects at configure time.
2025-09-28 14:48:55 -07:00
Ian Lance Taylor
0034e33946
libbacktrace: add cast to avoid undefined shift
...
Patch from pgerell@github.
* elf.c (elf_uncompress_lzma_block): Add casts to avoid
potentially shifting a value farther than its type size.
2025-02-10 15:04:43 -08:00
Ian Lance Taylor
78af4ffa26
libbacktrace: add casts to avoid undefined shifts
...
Patch from pgerell@github.
* elf.c (elf_fetch_bits): Add casts to avoid potentially shifting
a value farther than its type size.
(elf_fetch_bits_backward): Likewise.
(elf_uncompress_lzma_block): Likewise.
(elf_uncompress_lzma): Likewise.
2025-01-30 15:24:13 -08:00
Ian Lance Taylor
1db85642e3
libbacktrace: use WIN32_LEAN_AND_MEAN, not WIN32_MEAN_AND_LEAN
...
Patch from awmorgan.
* fileline.c: Use WIN32_LEAN_AND_MEAN, not WIN32_MEAN_AND_LEAN.
* pecoff.c: Likewise.
Fixes #144
2024-11-29 13:21:28 -08:00
Ian Lance Taylor
d48f84034c
libbacktrace: recognize new Mach-O DWARF sections
...
Patch from Pavel Safonov.
These sections are used on macOS Sequoia.
Fixes #136
* macho.c (dwarf_section_names): Add __debug_addr and
__debug_line_str.
2024-10-25 15:21:34 -07:00
Ian Lance Taylor
3d0be55844
libbacktrace: don't get confused by overlapping address ranges
...
Fixes https://github.com/ianlancetaylor/libbacktrace/issues/137 .
* dwarf.c (resolve_unit_addrs_overlap_walk): New static function.
(resolve_unit_addrs_overlap): New static function.
(build_dwarf_data): Call resolve_unit_addrs_overlap.
2024-10-18 13:04:47 -07:00
Ian Lance Taylor
86885d1404
libbacktrace: update xcoff.c for base_address changes
...
* xcoff.c (struct xcoff_fileline_data): Change base_address field
to struct libbacktrace_base_address.
(xcoff_initialize_syminfo): Change base_address to struct
libbacktrace_base_address. Use libbacktrace_add_base.
(xcoff_initialize_fileline): Likewise.
(xcoff_lookup_pc): Use libbacktrace_add_base.
(xcoff_add): Change base_address to struct
libbacktrace_base_address.
(xcoff_armem_add, xcoff_add_shared_libs): Likewise.
(backtrace_initialize): Likewise.
* Makefile.am (xcoff.lo): Remove unused target.
(xcoff_32.lo, xcoff_64.lo): New targets.
* Makefile.in: Regenerate.
2024-08-05 16:54:56 -07:00
Ian Lance Taylor
6ce91a2ef7
libbacktrace: avoid -Wpointer-arith errors
...
Based on patch from Kirill Müller.
* configure.ac (ACX_PROG_CC_WARNING_OPTS): Add -Wpointer-arith.
* pecoff.c (coff_add): Cast void pointers.
* xcoff.c (xcoff_add): Likewise.
* configure: Regenerate.
2024-08-05 16:49:57 -07:00
Ian Lance Taylor
0dd27b95f9
libbacktrace: fix syntax of Windows registration functions
...
Adjust the syntax to keep MSVC happy.
Fixes #131
* pecoff.c (LDR_DLL_NOTIFICATION): Put function modifier
inside parentheses.
(LDR_REGISTER_FUNCTION): Likewise.
2024-07-30 09:28:33 -07:00
Ian Lance Taylor
7e2b7da3d6
libbacktrace: use __has_attribute for fallthrough
...
Also convert some FALLTHROUGH comments to ATTRIBUTE_FALLTHROUGH.
* internal.h: Use __has_attribute to check for fallthrough
attribute.
* elf.c (elf_zstd_decompress): Use ATTRIBUTE_FALLTHROUGH rather
than a FALLTHROUGH comment.
2024-07-18 11:37:33 -07:00
Ian Lance Taylor
f37b51de9b
libbacktrace: add cast to avoid warning
...
* print.c (print_syminfo_callback): Add cast to avoid warning.
2024-07-17 18:00:03 -07:00
Ian Lance Taylor
9e10af0e8f
libbacktrace: better backtrace_print when no debug info
...
Fixes #59
* print.c (print_syminfo_callback): New static function.
(print_callback): Call backtrace_syminfo if there is no function
or file name.
2024-07-17 17:40:19 -07:00
Ian Lance Taylor
8e32931a4f
libbacktrace: add notes about dl_iterate_phdr to README
...
* README: Add notes about dl_iterate_phdr.
For #20
2024-07-17 17:06:51 -07:00
Ian Lance Taylor
1dd5c408fe
libbacktrace: support FDPIC
...
Based on patch by Max Filippov.
* internal.h: If FDPIC, #include <link.h> and/or <sys/link.h>.
(libbacktrace_using_fdpic): Define.
(struct libbacktrace_base_address): Define.
(libbacktrace_add_base): Define.
(backtrace_dwarf_add): Change base_address to struct
libbacktrace_base_address.
* dwarf.c (struct dwarf_data): Change base_address to struct
libbacktrace_base_address.
(add_ranges, find_address_ranges, build_ddress_map): Likewise.
(build_dwarf_data, build_dwarf_add): Likewise.
(add_low_high_range): Change base_address to struct
libbacktrace_base_address. Use libbacktrace_add_base.
(add_ranges_from_ranges, add_ranges_from_rnglists): Likewise.
(add_line): Use libbacktrace_add_base.
* elf.c (elf_initialize_syminfo): Change base_address to struct
libbacktrace_base_address. Use libbacktrace_add_base.
(elf_add): Change base_address to struct
libbacktrace_base_address.
(phdr_callback): Likewise. Initialize base_address.m.
(backtrace_initialize): If using FDPIC, don't call elf_add with
main executable; always use dl_iterate_phdr.
* macho.c (macho_add_symtab): Change base_address to struct
libbacktrace_base_address. Use libbacktrace_add_base.
(macho_syminfo): Change base_address to struct
libbacktrace_base_address.
(macho_add_fat, macho_add_dsym, macho_add): Likewise.
(backtrace_initialize): Likewise. Initialize base_address.m.
* pecoff.c (coff_initialize_syminfo): Change base_address to
struct libbacktrace_base_address. Use libbacktrace_add_base.
(coff_add): Change base_address to struct
libbacktrace_base_address. Initialize base_address.m.
2024-07-15 17:29:35 -07:00
Ian Lance Taylor
febbb9bff9
libbacktrace: avoid infinite recursion
...
We could get an infinite recursion in an odd case in which a
.gnu_debugdata section was added to a debug file, and mini_debuginfo
was put into the debug file, and the debug file was put into a
/usr/lib/debug directory to be found by build ID. This combination
doesn't really make sense but we shouldn't get an infinite recursion.
* elf.c (elf_add): Don't use .gnu_debugdata if we are already
reading a debuginfo file.
* Makefile.am (m2test_*): New test targets.
(CHECK_PROGRAMS): Add m2test.
(MAKETESTS): Add m2test_minidebug2.
(%_minidebug2): New pattern.
(CLEANFILES): Remove minidebug2 files.
* Makefile.in: Regenerate.
Fixes #129
2024-07-11 19:36:00 -07:00
Ian Lance Taylor
1023a09511
libbacktrace: improve XCOFF support
...
libbacktrace/ChangeLog:
2021-06-28 Clément Chigot <clement.chigot@atos.net >
* xcoff.c (SSUBTYP_DWRNGES): New define.
(xcoff_add): Use correct XCOFF DWARF section subtype
for DEBUG_RANGES. Remove lineoff workaround.
Adjust base_address.
(xcoff_initialize_syminfo): Adapt to new base_address.
(xcoff_lookup_pc): Likewise.
(xcoff_initialize_fileline): Likewise.
2024-07-11 18:44:19 -07:00
Ian Lance Taylor
dbb5fd82bc
libbacktrace: correct duplicate configury
...
I accidentally duplicated the autoconf config files in the top level
directory and the config directory. Fix that, and regenerate
Makefile.in and configure.
2024-07-11 18:36:00 -07:00
Ian Lance Taylor
e3def4fa6e
libbacktrace: update libtool.m4 to current GCC HEAD
2024-07-11 18:31:47 -07:00
Ian Lance Taylor
8c05bcb94f
libbacktrace: update copyright years
2024-07-11 18:14:01 -07:00
Ian Lance Taylor
0cb5d00374
libbacktrace: don't fail if symbol size is unknown
...
* btest.c (test5): Don't fail if symbol size is 0.
* mtest.c (test5): Likewise.
2024-07-11 18:00:38 -07:00
Ian Lance Taylor
3fda5a8759
libbacktrace: correctly gather Mach-O symbol table
...
For PR libbacktrace/97082.
* macho.c (MACH_O_N_EXT): Don't define.
(MACH_O_N_UNDF): Define.
(macho_defined_symbol): Don't discard N_EXT symbols. Do
discard N_UNDF symbols.
2024-07-11 17:57:40 -07:00
Ian Lance Taylor
d4bdca038e
libbacktrace: fix testsuite for clang
...
* btest.c (test1, test3): Add optnone attribute.
* edtest.c (test1): Likewise.
* mtest.c (test1, test3): Likewise.
* configure.ac: Use -Wno-attributes and -Wno-unknown-attributes.
* configure: Regenerate.
2024-07-11 16:13:11 -07:00
Ian Lance Taylor
e3e64ddd18
libbacktrace: suggest how to fix missing debug info
...
* elf.c (elf_nodebug): Suggest -g.
* macho.c (macho_nodebug): Suggest -g and dsymutil.
* pecoff.c (coff_nodebug): Suggest -g.
Fixes #122
2024-07-11 15:42:10 -07:00
Ian Lance Taylor
f69acdfbd6
libbacktrace: remove trailing whitespace
...
* dwarf.c: Remove trailing whitespace.
* macho.c: Likewise.
Fixes #124
2024-07-11 15:30:09 -07:00
Ian Lance Taylor
4ead348bb4
libbacktrace: it's OK if zstd decompressor sees no backward bits
...
* elf.c (elf_fetch_bits_backward) Don't fail if no bits are
available.
2024-06-26 09:12:25 -07:00
Ian Lance Taylor
11427f31a6
libbacktrace: add DLLS as they are loaded
...
Patch from Björn Schäpers.
* pecoff.c (struct dll_notification_data): Define.
(LDR_DLL_NOTIFICATION): New typedef.
(LDR_REGISTER_FUNCTION): New typedef.
(struct dll_notification_context): Define.
(dll_notification): New static function.
(backtrace_initialize): Register DLL notification.
2024-05-03 15:27:21 -07:00
Ian Lance Taylor
0e933e763f
libbacktrace: load Windows modules
...
Patch from Björn Schäpers <bjoern@hazardy.de >.
* configure.ac: Checked for tlhelp32.h
* pecoff.c: Include <tlhelp32.h> if available.
(backtrace_initialize): Use tlhelp32 api for a snapshot to
detect loaded modules.
(coff_add): New argument for the module handle of the file,
to get the base address.
* configure, config.h.in: Regenerate.
2024-05-01 10:40:39 -07:00
Ian Lance Taylor
ae1e707dba
libbacktrace: test --compress-debug-sections=ARG for each ARG
...
This should fix a testsuite problem with Solaris ld that supports zlib
but not zlib-gabi.
* configure.ac: Test --compress-debug-sections=zlib-gnu and
--compress-debug-sections=zlib-gabi separately, setting new
automake conditionals.
* Makefile.am (ctestg, ctestg_alloc): Only build if
HAVE_COMPRESSED_DEBUG_ZLIB_GNU.
(ctesta, ctesta_alloc): Only build if
HAVE_COMPRESSED_DEBUG_ZLIB_GABI.
(ctestzstd_alloc): New test if HAVE_COMPRESSED_DEBUG_ZSTD.
* configure, Makefile.in: Regenerate.
2024-04-23 10:17:03 -07:00
Ian Lance Taylor
7ead8c1ea2
libbacktrace: don't assume compressed section is aligned
...
Patch originally by GitHub user ubyte at
https://github.com/ianlancetaylor/libbacktrace/pull/120 .
* elf.c (elf_uncompress_chdr): Don't assume compressed section is
aligned.
2024-03-08 13:57:13 -08:00
Ian Lance Taylor
f41cf1fecb
libbacktrace: pass -no-install when linking test programs
...
* Makefile.am (libbacktrace_testing_ldflags): Define.
(*_LDFLAGS): Add $(libbacktrace_testing_ldflags) for test
programs.
* Makefile.in: Regenerate
2024-03-02 13:12:16 -08:00
Ian Lance Taylor
28824f2cc9
libbacktrace: skip all LZMA block header padding bytes
...
* elf.c (elf_uncompress_lzma_block): Skip all header padding bytes
and verify that they are zero.
Fixes #118
2024-03-02 12:18:17 -08:00
Ian Lance Taylor
592e9c8727
libbacktrace: use real .opd for debuginfo on ppc64 v1 ABI
...
PR libbacktrace/114201
* elf.c (elf_add): Add caller_opd parameter. Change all callers.
Release opd data after all recursive calls.
2024-03-02 07:09:12 -08:00
Ian Lance Taylor
36cfdc18ed
libbacktrace: read symbol table of debuginfo file
...
These become another symbol table to search. This is needed if people
use --strip-all rather than --strip-debug when adding a debuglink
section.
Patch is from GitHub user pickard1.
Fixes #113
* elf.c (elf_add): Add the symbol table from a debuginfo file.
* Makefile.am (MAKETESTS): Add buildidfull and gnudebuglinkfull
variants of buildid and gnudebuglink tests.
(%_gnudebuglinkfull, %_buildidfull): New patterns.
* Makefile.in: Regenerate.
2024-02-29 19:48:38 -08:00
Ian Lance Taylor
14818b7783
libbacktrace: support ASLR on Windows
...
Patch from Björn Schäpers.
* pecoff.c: Include <windows.h> if available.
(coff_add): On Windows call GetModuleHandle to get base address.
2023-11-30 11:46:57 -08:00
Ian Lance Taylor
25889d241c
libbacktrace: call GetModuleFileNameA on Windows
...
Patch from Björn Schäpers.
* fileline.c: Include <windows.h> if available.
(windows_get_executable_path): New static function.
(fileline_initialize): Call windows_get_executable_path.
* configure.ac: Checked for windows.h
* configure: Regenerate.
* config.h.in: Regenerate.
2023-11-29 14:09:55 -08:00
Ian Lance Taylor
c1c86fa2f0
libbacktrace: look for _pgmptr on Windows
...
Patch from Andres Freund:
* configure.ac: Check for _pgmptr declaration.
* fileline.c (fileline_initialize): Check for _pgmfptr before
/proc/self/exec.
* configure, config.h.in: Regenerate.
2023-07-31 17:02:14 -07:00
Ian Lance Taylor
cdb64b688d
libbacktrace: minor fixes for zstd decompression
...
* elf.c (elf_zstd_read_fse): Call elf_fetch_bits after reading
bits, not before. Add unlikely for error case.
(elf_zstd_offset_table): Regenerate.
(elf_zstd_read_huff): Clear 13 entries in weight_mark, not 12.
(elf_zstd_read_literals): For a single stream adjust by
total_streams_size, not compressed_size.
2023-03-28 13:10:54 -07:00
Ian Lance Taylor
afe2967c77
libbacktrace: change PC variables from uint64_t to uintptr_t
...
Change variables holding PC values from uint64_t to uintptr_t.
Patch by Björn Schäpers.
* dwarf.c (struct function_addrs): Change low and high fields to
uintptr_t.
(struct unit_addrs): Likewise.
(resolve_addr_index): Change address parameter to uintptr_t*.
(add_unit_addr): Change lowpc and highpc parameters to uintptr_t.
(add_function_range): Likewise.
(struct pcrange): Change lowpc and highpc fields to uintptr_t.
(add_low_high_range): Change add_range lowpc and highpc parameters
to uintptr_t.
(add_ranges_from_ranges): Likewise.
(add_ranges_from_rnglists): Likewise.
(add_low_high_range): Chnage lowpc and highpc variables to
uintpr_t.
(add_ranges_from_rnglists): Change some local variables to
uintptr_t.
(add_ranges_from_ranges): Change base parameter to uintptr_t.
(add_ranges_from_rnglists): Likewise.
(read_function_entry): Likewise.
(resolve_addr_index): Add explicit casts to uintptr_t.
(update_pcrange): Likewise.
(add_ranges_from_ranges): Likewise.
(add_ranges_from_rnglists): Likewise.
(read_function_entry): Likewise.
2023-01-20 14:25:38 -08:00
Ian Lance Taylor
ad106d5fdd
libbacktrace: don't run --build-id tests if it is not supported
...
PR libbacktrace/108297
* configure.ac: Test whether linker supports --build-id.
* Makefile.am: Only run --build-id tests if supported.
* configure, Makefile.in: Regenerate.
2023-01-06 09:46:08 -08:00
Ian Lance Taylor
da7eff2f37
libbacktrace: unpack literals into output buffer
...
* elf.c (elf_fetch_backward_init): New static function.
(ZSTD_TABLE_SIZE): Use huffman scratch space size rather than
literal size.
(ZSTD_TABLE_WORK_LIT_SIZE): Don't define.
(elf_zstd_read_huff): Use elf_fetch_backward_init.
(elf_zstd_read_literals): New static function.
(ZSTD_LIT_RAW, ZSTD_LIT_RLE, ZSTD_LIT_HUFF): Don't define.
(struct elf_zstd_literals): Don't define.
(elf_zstd_literal_output): Remove static function.
(elf_zstd_decompress): Use elf_fetch_backward_init and
elf_zstd_read_literals. Rewrite literal copying.<
2022-12-16 18:53:11 -08:00
Ian Lance Taylor
fd9442f7b5
libbacktrace: rewrite and simplify main zstd loop
...
* elf.c (ZSTD_TABLE_*): Use elf_zstd_fse_baseline_entry.
(ZSTD_ENCODE_BASELINE_BITS): Define.
(ZSTD_DECODE_BASELINE, ZSTD_DECODE_BASEBITS): Define.
(elf_zstd_literal_length_base): New static const array.
(elf_zstd_match_length_base): Likewise.
(struct elf_zstd_fse_baseline_entry): Define.
(elf_zstd_make_literal_baseline_fse): New static function.
(elf_zstd_make_offset_baseline_fse): Likewise.
(elf_zstd_make_match_baseline_fse): Likewise.
(print_table, main): Use elf_zstd_fse_baseline_entry.
(elf_zstd_lit_table, elf_zstd_match_table): Likewise.
(elf_zstd_offset_table): Likewise.
(struct elf_zstd_seq_decode): Likewise. Remove use_rle and rle
fields.
(elf_zstd_unpack_seq_decode): Use elf_zstd_fse_baseline_entry,
taking a conversion function. Convert RLE to FSE.
(elf_zstd_literal_length_baseline): Remove.
(elf_zstd_literal_length_bits): Remove.
(elf_zstd_match_length_baseline): Remove.
(elf_zstd_match_length_bits): Remove.
(elf_zstd_decompress): Use elf_zstd_fse_baseline_entry. Rewrite
and simplify main loop.
2022-12-09 17:47:18 -08:00
Ian Lance Taylor
c992dd8a9b
libbacktrace: support zstd decompression
...
Support decompressing --compress-debug-sections=zstd.
* configure.ac: Check for zstd library and
--compress-debug-sections=zstd linker option.
* Makefile.am (zstdtest_*): New targets.
(zstdtest_alloc_*, ctestzstd_*): New targets.
(BUILDTESTS): Add zstdtest, zstdtest_alloc, ctestzstd as
appropriate.
* elf.c (ELFCOMPRESS_ZSTD): Define.
(elf_fetch_bits): Rename from elf_zlib_fetch. Update uses.
(elf_fetch_bits_backward): New static function.
(ZLIB_HUFFMAN_*): Rename from HUFFMAN_*. Update uses.
(ZLIB_TABLE_*): Rename from ZDEBUG_TABLE_*. Update uses.
(ZSTD_TABLE_*): Define.
(struct elf_zstd_fse_entry): Define.
(elf_zstd_read_fse): New static function.
(elf_zstd_build_fse): Likewise.
(lit): Define if BACKTRACE_GENERATE_ZSTD_FSE_TABLES.
(match, offset, next, print_table, main): Likewise.
(elf_zstd_lit_table): New static const array.
(elf_zstd_match_table, elf_zstd_offset_table): Likewise.
(elf_zstd_read_huff): New static function.
(struct elf_zstd_seq_decode): Define.
(elf_zstd_unpack_seq_decode): New static function.
(ZSTD_LIT_*): Define.
(struct elf_zstd_literals): Define.
(elf_zstd_literal_output): New static function.
(ZSTD_LITERAL_LENGTH_BASELINE_OFFSET): Define.
(elf_zstd_literal_length_baseline): New static const array.
(elf_zstd_literal_length_bits): Likewise.
(ZSTD_MATCH_LENGTH_BASELINE_OFFSET): Define.
(elf_zstd_match_length_baseline): New static const array.
(elf_zstd_match_length_bits): Likewise.
(elf_zstd_decompress): New static function.
(ZDEBUG_TABLE_SIZE): New definition.
(elf_uncompress_chdr): Support ELF_COMPRESS_ZSTD.
(backtrace_uncompress_zstd): New function.
(elf_add): Use ZLIB_TABLE_SIZE for zlib-gnu sections.
* internal.h (backtrace_uncompress_zstd): Declare.
* zstdtest.c: New file.
* configure, config.h.in, Makefile.in: Regenerate.
2022-12-07 16:27:12 -08:00
Ian Lance Taylor
8602fda64e
libbacktrace: check for sys/link.h
...
QNX uses sys/link.h rather than link.h for dl_iterate_phdr
Fixes #86
* configure.ac: Check for sys/link.h. Use either link.h or
sys/link.h when checking for dl_iterate_phdr.
* elf.c: Include sys/link.h if available.
* configure, config.h.in: Regenerate.
2022-07-08 10:35:17 -07:00
Ian Lance Taylor
7409767403
libbacktrace: don't exit Mach-O dyld library loop on one failure
...
* macho.c (backtrace_initialize) [HAVE_MACH_O_DYLD_H]: Don't exit
loop if we can't find debug info for one shared library.
For #85
2022-07-07 16:55:51 -07:00
Ian Lance Taylor
bc78542d20
libbacktrace: don't let "make clean" remove allocfail.sh
...
* Makefile.am (MAKETESTS): New variable split out of TESTS.
(CLEANFILES): Replace TESTS with BUILDTESTS and MAKETESTS.
* Makefile.in: Regenerate.
Fixes #81
2022-07-07 16:18:23 -07:00
Ian Lance Taylor
b6ddb3aa1b
libbacktrace: replace fgrep with grep in configure script
...
Patch by Xi Ruoyao.
* configure.ac: Use grep instead of fgrep.
* configure: Regenerate.
2022-07-07 15:46:41 -07:00
Ian Lance Taylor
4d2dd0b172
libbacktrace: don't skip initial aligned byte in uncompressed block
...
Patch from Rui Ueyama, who says:
libbacktrace occasionally fails to decompress compressed debug info
even though the sections contain valid zlib streams. The cause of the
issue is an off-by-one error.
If a zlib data block is a plain data (uncompressed data), the next two
bytes contain the size of the block. These two bytes value is byte-
aligned, so if we read-ahead more than 8 bits, we need to unread it.
So, the correct condition to determine whether or not we need to
unread a byte is bits >= 8 and not bits > 8. Due to this error,
if the last read bits happened to end at a byte boundary, the next
byte would be skipped. That caused the decompression failure.
This bug was originally reported against the mold linker.
rui314/mold#402
* elf.c (elf_zlib_inflate): Don't skip initial aligned byte in
uncompressed block.
2022-04-05 16:10:04 -07:00
Ian Lance Taylor
2446c66076
libbacktrace: gather address ranges from skeleton units
...
* dwarf.c (find_address_ranges): Handle skeleton units.
(read_function_entry): Likewise.
2022-02-17 08:27:13 -08:00
Ian Lance Taylor
509f74a2fb
libbacktrace: initialize DWARF 5 fields of unit
...
When I added the fields in 2019-12-13 I forgot to initialize them.
* dwarf.c (build_address_map): Initialize DWARF 5 fields of unit.
2022-02-16 11:42:40 -08:00
Ian Lance Taylor
c062afc28c
configury: support --disable-werror
2022-02-16 11:41:40 -08:00
Ian Lance Taylor
332522e199
configury: update to recent versions
...
Copied from GCC tip.
Fixes #84
2022-01-18 20:10:43 -08:00
Ian Lance Taylor
d0f5e95a87
config/override.m4: don't require exactly autoconf 2.69
...
Fixes #71
Fixes #74
2021-05-29 14:17:08 -07:00
Ian Lance Taylor
4f57c99971
libbacktrace: don't special case file 0
...
It's no longer necessary as file 0 is now set up in all cases.
* dwarf.c (read_line_program): Don't special case file 0.
(read_function_entry): Likewise.
Fixes #69
2021-03-02 18:17:36 -08:00
Ian Lance Taylor
59473f7906
libbacktrace: pass -1 to error callback for unrecognized DWARF
...
PR libbacktrace/98818
* dwarf.c (dwarf_buf_error): Add errnum parameter. Change all
callers.
* backtrace.h: Update backtrace_error_callback comment.
2021-03-02 13:49:18 -08:00
Ian Lance Taylor
7854b0bc25
libbacktrace: check for objcopy --add-gnu-debuglink using --help
...
* configure.ac: Check for objcopy --add-gnu-debuglink by using
objcopy --help.
* configure: Regenerate
2021-02-11 18:11:18 -08:00
Ian Lance Taylor
dedbe13fda
libbacktrace: don't fail tests if dwz fails
...
* Makefile.am (%_dwz): If dwz fails, use uncompressed debug info.
* Makefile.in: Regenerate.
2021-01-18 14:58:41 -08:00
Ian Lance Taylor
096650403a
libbacktrace: use correct directory/filename for DWARF 5
...
PR debug/98716
* dwarf.c (read_v2_paths): Allocate zero entry for dirs and
filenames.
(read_line_program): Remove parameter u, change caller. Don't
subtract one from dirs and filenames index.
(read_function_entry): Don't subtract one from filenames index.
2021-01-18 14:57:11 -08:00
Ian Lance Taylor
1da441c1b0
libbacktrace: correct buffer overflow tests
...
* dwarf.c (resolve_string): Use > rather than >= to check whether
string index extends past buffer.
(resolve_addr_index): Similarly for address index.
2020-12-04 11:19:55 -08:00
Ian Lance Taylor
f24e9f401f
libbacktrace: update README
2020-10-26 13:45:23 -07:00
Ian Lance Taylor
73eb1803b1
libbacktrace: use __attribute__((__fallthrough__))
...
Use an attribute rather than a comment when falling through a switch case.
* internal.h (ATTRIBUTE_FALLTHROUGH): Define.
* elf.c (elf_zlib_inflate): Use ATTRIBUTE_FALLTHROUGH.
2020-10-20 11:50:23 -07:00
Ian Lance Taylor
5009c11398
libbacktrace: replace Tom Sawyer with Opticks
...
The main source uses Opticks now.
2020-09-30 20:08:56 -07:00
Ian Lance Taylor
3bd25ab355
libbacktrace/ChangeLog:
...
PR libbacktrace/97082
* Makefile.am (check_DATA): Add mtest.dSYM if USE_DSYMUTIL.
* Makefile.in: Regenerate.
2020-09-28 13:57:18 -07:00
Ian Lance Taylor
1286f69fde
libbacktrace: only run dsymutil with Mach-O
...
libbacktrace/ChangeLog:
PR libbacktrace/97227
* configure.ac (USE_DSYMUTIL): Define instead of HAVE_DSYMUTIL.
* Makefile.am: Change all uses of HAVE_DSYMUTIL to USE_DSYMUTIL.
* configure: Regenerate.
* Makefile.in: Regenerate.
2020-09-28 13:50:34 -07:00
Ian Lance Taylor
95e8e96c86
libbacktrace: handle pc == low correctly
...
* dwarf.c (report_inlined_functions): Handle PC == -1 and PC ==
p->low.
(dwarf_lookup_pc): Likewise.
2020-09-27 17:30:21 -07:00
Ian Lance Taylor
c8a81d4e3a
libbacktrace: use ELF symbol table if no debug info available
...
PR libbacktrace/97080
* fileline.c (backtrace_syminfo_to_full_callback): New function.
(backtrace_syminfo_to_full_error_callback): New function.
* elf.c (elf_nodebug): Call syminfo_fn if possible.
* internal.h (struct backtrace_call_full): Define.
(backtrace_syminfo_to_full_callback): Declare.
(backtrace_syminfo_to_full_error_callback): Declare.
* mtest.c (f3): Only check all[i] if data.index permits.
2020-09-27 17:29:53 -07:00
Ian Lance Taylor
77bcaa99f5
libbacktrace: support MiniDebugInfo
...
libbacktrace/ChangeLog:
PR libbacktrace/93608
Add support for MiniDebugInfo.
* elf.c (struct elf_view): Define. Replace most uses of
backtrace_view with elf_view.
(elf_get_view): New static functions. Replace most calls of
backtrace_get_view with elf_get_view.
(elf_release_view): New static functions. Replace most calls of
backtrace_release_view with elf_release_view.
(elf_uncompress_failed): Rename from elf_zlib_failed. Change all
callers.
(LZMA_STATES, LZMA_POS_STATES, LZMA_DIST_STATES): Define.
(LZMA_DIST_SLOTS, LZMA_DIST_MODEL_START): Define.
(LZMA_DIST_MODEL_END, LZMA_FULL_DISTANCES): Define.
(LZMA_ALIGN_SIZE, LZMA_LEN_LOW_SYMBOLS): Define.
(LZMA_LEN_MID_SYMBOLS, LZMA_LEN_HIGH_SYMBOLS): Define.
(LZMA_LITERAL_CODERS_MAX, LZMA_LITERAL_CODER_SIZE): Define.
(LZMA_PROB_IS_MATCH_LEN, LZMA_PROB_IS_REP_LEN): Define.
(LZMA_PROB_IS_REP0_LEN, LZMA_PROB_IS_REP1_LEN): Define.
(LZMA_PROB_IS_REP2_LEN, LZMA_PROB_IS_REP0_LONG_LEN): Define.
(LZMA_PROB_DIST_SLOT_LEN, LZMA_PROB_DIST_SPECIAL_LEN): Define.
(LZMA_PROB_DIST_ALIGN_LEN): Define.
(LZMA_PROB_MATCH_LEN_CHOICE_LEN): Define.
(LZMA_PROB_MATCH_LEN_CHOICE2_LEN): Define.
(LZMA_PROB_MATCH_LEN_LOW_LEN): Define.
(LZMA_PROB_MATCH_LEN_MID_LEN): Define.
(LZMA_PROB_MATCH_LEN_HIGH_LEN): Define.
(LZMA_PROB_REP_LEN_CHOICE_LEN): Define.
(LZMA_PROB_REP_LEN_CHOICE2_LEN): Define.
(LZMA_PROB_REP_LEN_LOW_LEN): Define.
(LZMA_PROB_REP_LEN_MID_LEN): Define.
(LZMA_PROB_REP_LEN_HIGH_LEN): Define.
(LZMA_PROB_LITERAL_LEN): Define.
(LZMA_PROB_IS_MATCH_OFFSET, LZMA_PROB_IS_REP_OFFSET): Define.
(LZMA_PROB_IS_REP0_OFFSET, LZMA_PROB_IS_REP1_OFFSET): Define.
(LZMA_PROB_IS_REP2_OFFSET): Define.
(LZMA_PROB_IS_REP0_LONG_OFFSET): Define.
(LZMA_PROB_DIST_SLOT_OFFSET): Define.
(LZMA_PROB_DIST_SPECIAL_OFFSET): Define.
(LZMA_PROB_DIST_ALIGN_OFFSET): Define.
(LZMA_PROB_MATCH_LEN_CHOICE_OFFSET): Define.
(LZMA_PROB_MATCH_LEN_CHOICE2_OFFSET): Define.
(LZMA_PROB_MATCH_LEN_LOW_OFFSET): Define.
(LZMA_PROB_MATCH_LEN_MID_OFFSET): Define.
(LZMA_PROB_MATCH_LEN_HIGH_OFFSET): Define.
(LZMA_PROB_REP_LEN_CHOICE_OFFSET): Define.
(LZMA_PROB_REP_LEN_CHOICE2_OFFSET): Define.
(LZMA_PROB_REP_LEN_LOW_OFFSET): Define.
(LZMA_PROB_REP_LEN_MID_OFFSET): Define.
(LZMA_PROB_REP_LEN_HIGH_OFFSET): Define.
(LZMA_PROB_LITERAL_OFFSET): Define.
(LZMA_PROB_TOTAL_COUNT): Define.
(LZMA_IS_MATCH, LZMA_IS_REP, LZMA_IS_REP0): Define.
(LZMA_IS_REP1, LZMA_IS_REP2, LZMA_IS_REP0_LONG): Define.
(LZMA_DIST_SLOT, LZMA_DIST_SPECIAL, LZMA_DIST_ALIGN): Define.
(LZMA_MATCH_LEN_CHOICE, LZMA_MATCH_LEN_CHOICE2): Define.
(LZMA_MATCH_LEN_LOW, LZMA_MATCH_LEN_MID): Define.
(LZMA_MATCH_LEN_HIGH, LZMA_REP_LEN_CHOICE): Define.
(LZMA_REP_LEN_CHOICE2, LZMA_REP_LEN_LOW): Define.
(LZMA_REP_LEN_MID, LZMA_REP_LEN_HIGH, LZMA_LITERAL): Define.
(elf_lzma_varint): New static function.
(elf_lzma_range_normalize): New static function.
(elf_lzma_bit, elf_lzma_integer): New static functions.
(elf_lzma_reverse_integer): New static function.
(elf_lzma_len, elf_uncompress_lzma_block): New static functions.
(elf_uncompress_lzma): New static function.
(backtrace_uncompress_lzma): New function.
(elf_add): Add memory and memory_size parameters. Change all
callers. Look for .gnu_debugdata section, and, if found,
decompress it and use it for symbols and debug info. Permit the
descriptor parameter to be -1.
* internal.h (backtrace_uncompress_lzma): Declare.
* mtest.c: New file.
* xztest.c: New file.
* configure.ac: Check for nm, xz, and comm programs. Check for
liblzma library.
(HAVE_MINIDEBUG): Define.
* Makefile.am (mtest_SOURCES): Define.
(mtest_CFLAGS, mtest_LDADD): Define.
(TESTS): Add mtest_minidebug if HAVE_MINIDEBUG.
(%_minidebug): New pattern rule, if HAVE_MINIDEBUG.
(xztest_SOURCES, xztest_CFLAGS, xztest_LDADD): Define.
(xztest_alloc_SOURCES, xztest_alloc_CFLAGS): Define
(xztest_alloc_LDADD): Define.
(BUILDTESTS): Add mtest, xztest, xztest_alloc.
(CLEANFILES): Add files created by minidebug pattern.
(btest.lo): Correct INCDIR reference.
(mtest.lo, xztest.lo, ztest.lo): New targets.
* configure: Regenerate.
* config.h.in: Regenerate.
* Makefile.in: Regenerate.
Close #38
2020-09-27 17:28:39 -07:00
Ian Lance Taylor
2f5efbfa32
libbacktrace: don't strip leading underscore on 64-bit PE
...
* pecoff.c (coff_initialize_syminfo): Add is_64 parameter.
(coff_add): Determine and pass is_64.
Closes #28
2020-09-27 17:19:28 -07:00
Ian Lance Taylor
4ae8d988a7
libbacktrace: fetch executable path on macOS
...
PR libbacktrace/96973
* fileline.c (macho_get_executable_path): New static function.
(fileline_initialize): Call macho_get_executable_path.
2020-09-27 17:18:38 -07:00
Ian Lance Taylor
430dc8b6fe
libbacktrace: avoid ambiguous binary search
...
Searching for a range match can cause the search order to not match
the sort order, which can cause libbacktrace to miss matching entries.
Allocate an extra entry at the end of function_addrs and unit_addrs vectors,
so that we can safely compare to the next entry when searching.
Adjust the matching code accordingly.
Fixes #44
* dwarf.c (function_addrs_search): Compare against the next entry
low address, not the high address.
(unit_addrs_search): Likewise.
(build_address_map): Add a trailing unit_addrs.
(read_function_entry): Add a trailing function_addrs.
(read_function_info): Likewise.
(report_inlined_functions): Search backward for function_addrs
match.
(dwarf_lookup_pc): Search backward for unit_addrs and
function_addrs matches.
2020-09-27 17:17:59 -07:00
Ian Lance Taylor
5dec0fae31
libbacktrace: fix tipo in comment
...
* simple.c (simple_unwind): Correct comment spelling.
Close #47
2020-09-27 17:17:10 -07:00
Ian Lance Taylor
030bd0a709
libbacktrace: correct memory lengths in Mach-O dsym support
...
* macho.c (macho_add_dsym): Make space for '/' in dsym. Use
correct length when freeing diralc.
Close #40
2020-09-27 17:16:15 -07:00
Ian Lance Taylor
b3b57f9ee0
libbacktrace: correctly swap Mach-O 32-bit file offset
...
libbacktrace/ChangeLog:
PR libbacktrace/96973
* macho.c (macho_add_fat): Correctly swap 32-bit file offset.
2020-09-27 17:15:03 -07:00
Ian Lance Taylor
886aef3783
libbacktrace: only match magic number at start of line
...
libbacktrace/ChangeLog:
PR libbacktrace/96971
* filetype.awk: Only match magic number at start of line.
2020-09-27 17:14:27 -07:00
Ian Lance Taylor
89b2b5066b
libbacktrace: add Mach-O 64-bit FAT support
...
libbacktrace/:
* macho.c (MACH_O_MH_MAGIC_FAT_64): Define.
(MACH_O_MH_CIGAM_FAT_64): Define.
(struct macho_fat_arch_64): Define.
(macho_add_fat): Add and use is_64 parameter.
(macho_add): Recognize 64-bit fat files.
2020-09-27 17:13:21 -07:00
Ian Lance Taylor
aaa51b6dbe
libbacktrace: test linker support for DWARF 5
...
On AIX, the compiler supports DWARF 5 but the linker does not.
2020-07-07 Clement Chigot <clement.chigot@atos.net >
* configure.ac: Test linker support for DWARF5
* configure: Regenerate
2020-09-27 17:12:15 -07:00
Ian Lance Taylor
9b7f216e86
libbacktrace: mark test_large parameter unused in ztest.c
2020-05-13 11:11:13 -07:00
Ian Lance Taylor
d68a7ac6dd
libbacktrace: treat EACCESS like ENOENT
...
For https://gcc.gnu.org/PR95061
2020-05-13 10:29:45 -07:00
Ian Lance Taylor
14465a9574
libbacktrace: declare getpagesize if necessary
...
Fixes https://gcc.gnu.org/PR95012 .
2020-05-11 10:54:46 -07:00
Ian Lance Taylor
7206f5bd06
libbacktrace: don't crash if ELF file has no sections
...
Patch from Roland McGrath.
Fixes #41
2020-05-09 20:36:19 -07:00
Ian Lance Taylor
ca0de0517f
libbacktrace: don't free ELF strtab if error occurs after saving syminfo
...
Fixes #29
2020-02-19 10:32:09 -08:00
Ian Lance Taylor
4e548e735f
libbacktrace: add preliminary Mach-O support
2020-02-18 18:57:14 -08:00
Ian Lance Taylor
929d6205cf
libbacktrace: always pass -g when compiling test code
...
This approach required adding a few casts to ztest.c, as it is now
compiled with -Wall.
Fixes GCC PR libbacktrace/90636
2020-02-18 18:49:42 -08:00
Ian Lance Taylor
bd02146d90
Update copyright years.
2020-02-18 18:46:13 -08:00
Ian Lance Taylor
75cac302a5
libbacktrace: update to current libgo test file
2020-02-15 18:26:32 -08:00
Ian Lance Taylor
4e14a008cd
libbacktrace: support short read
...
Fixes #32
2020-02-15 18:14:20 -08:00
Ian Lance Taylor
aced4e1f2a
libbacktrace: if debug info large or split, read sections individually
...
Fixes #29
2020-02-15 17:58:09 -08:00
Ian Lance Taylor
0f06cda953
libbacktrace: support fetching executable name using sysctl
...
This supports FreeBSD and NetBSD when /proc is not mounted.
2020-02-15 15:33:11 -08:00
Ian Lance Taylor
559ab7cab4
libbacktrace: update to current version from GCC trunk
...
This adds DWARF 5 support as well as an enhanced testsuite.
Patch assembled by Than McIntosh.
2019-12-23 18:55:51 -08:00
Ian Lance Taylor
5a99ff7fed
config.guess, config.sub: update to latest versions
...
Update to config.guess 2018-05-19 and config.sub 2018-05-24 from
git://git.savannah.gnu.org/config.git revision
3a2a927f547ee478147008c3fda2adb8a2b2ebc4.
This brings in musl support.
2018-06-05 08:00:51 -07:00
Ian Lance Taylor
22508c46b3
config.guess, config.sub: update to current GCC versions
...
Copied from GCC revision 256122.
2018-06-05 07:37:14 -07:00