]> git.ipfire.org Git - thirdparty/elfutils.git/commit
libdwfl: Make dwfl_report_offline_memory work with ELF_C_READ_MMAP
authorAleksei Vetrov <vvvvvv@google.com>
Thu, 11 Jul 2024 20:35:21 +0000 (20:35 +0000)
committerMark Wielaard <mark@klomp.org>
Fri, 12 Jul 2024 14:11:55 +0000 (16:11 +0200)
commit87a60d22299c4ba7b94cbce04a32c2abf015f98a
tree31f558e67a059d938cd55d0fae9c814def11fd5a
parent78c9dce1c77098c01c076c1bf6d15ab773d3b195
libdwfl: Make dwfl_report_offline_memory work with ELF_C_READ_MMAP

elf_memory open mode recently changed from ELF_C_READ to
ELF_C_READ_MMAP. This broken dwfl_report_offline_memory that changes
mode to ELF_C_READ_MMAP_PRIVATE to be compatible with subsequent
elf_begin on embedded ELF files.

The proper implementation of dwfl_report_offline_memory doesn't change
open mode and subsequent elf_begin invocations simply use cmd from the
reference Elf*.

Add tests to exercise Elf* to trigger the bug caused by incorrect cmd
set to Elf*.

  * libdwfl/offline.c (process_archive): Use archive->cmd
  instead of hardcoded ELF_C_READ_MMAP_PRIVATE.
  * libdwfl/open.c (libdw_open_elf): Use elf->cmd instead of
  hardcoded ELF_C_READ_MMAP_PRIVATE.
  (__libdw_open_elf_memory): Don't override (*elfp)->cmd.
  * tests/Makefile.am (dwfl_report_offline_memory): Add libelf
  as dependency.
  * tests/dwfl-report-offline-memory.c: Add count_sections to
  exercise Elf* from dwfl_report_offline_memory.
  * tests/run-dwfl-report-offline-memory.sh: Add expected number
  of sections to test invocations.

Signed-off-by: Aleksei Vetrov <vvvvvv@google.com>
libdwfl/offline.c
libdwfl/open.c
tests/Makefile.am
tests/dwfl-report-offline-memory.c
tests/run-dwfl-report-offline-memory.sh