]> sourceware.org Git - valgrind.git/commit
Support lazy reading and downloading of DWARF debuginfo
authorAaron Merey <amerey@redhat.com>
Fri, 30 Jun 2023 22:31:42 +0000 (18:31 -0400)
committerMark Wielaard <mark@klomp.org>
Wed, 16 Aug 2023 12:15:14 +0000 (14:15 +0200)
commit60f7e89ba32b54d73b9e36d49e28d0f559ade0b9
tree0b66d9346159e544a5b98b7586b2945f4d0a84a0
parent6ce0979884a8f246c80a098333ceef1a7b7f694d
Support lazy reading and downloading of DWARF debuginfo

Currently valgrind attempts to read DWARF .debug_* sections as well
as separate debuginfo files for ELF binaries as soon as a shared library
is loaded.  This might also result in the downloading of separate debuginfo
files via debuginfod.

This is inefficient when some of this debuginfo never ends up being used
by valgrind while running the client process.

This patch adds support for lazy reading and downloading of DWARF
debuginfo.  When an ELF shared library is loaded, the reading of .debug_*
sections as well as separate or alternate debuginfo is deferred until
valgrind handles an instruction pointer corresponding to a text segment
of the shared library.  At this point the deferred sections and separate
debug files are loaded.

This feature is only supported on ELF platforms.

https://bugs.kde.org/show_bug.cgi?id=471807

ChangeLog
* debuginfo.c (di_notify_ACHIEVE_ACCEPT_STATE): Replace
read_elf_debug_info with read_elf_object.
(addr_load_di): New function.  Attempts to load deferred debuginfo
associated with a given address.
(load_di): New function.  Attempts to load a given deferred
debuginfo associated with a given address.
(describe_IP): Add calls to load_di and addr_load_di.
(find_DiCfSI): Add call to load_di.

* priv_readelf.h (read_elf_object): New declaration.
(read_elf_debug): Ditto.

* priv_storage.h (struct _DebugInfo): New field 'bool deferred'.

* readelf.c (read_elf_debug_info): Split into read_elf_object and
read_elf_debug.
(read_elf_object): Read non .debug_* section from an ELF binary.
(read_elf_debug): Read .debug_* sections from an ELF binary as
as well any separate/alternate debuginfo files.

* storage.c (canonicaliseSymtab): Remove assert in order to support
canonicalization of deferred _DebugInfo.
(finish_CFSI_arrays): Add early return if _DebugInfo is
deferred in order to avoid freeing memory that will be needed
when reading debuginfo at a later time.
(canonicaliseTables): Ditto.

* pub_core_debuginfo.h (addr_load_di): New declaration.
(load_di): New declaration.
NEWS
coregrind/m_debuginfo/debuginfo.c
coregrind/m_debuginfo/priv_readelf.h
coregrind/m_debuginfo/priv_storage.h
coregrind/m_debuginfo/readelf.c
coregrind/m_debuginfo/storage.c
coregrind/pub_core_debuginfo.h
This page took 0.030597 seconds and 5 git commands to generate.