]> git.ipfire.org Git - thirdparty/elfutils.git/commit
DRAFT libdwfl: Elf* caching via dwfl_process_tracker
authorSerhei Makarov <serhei@serhei.io>
Tue, 28 Jan 2025 17:20:36 +0000 (12:20 -0500)
committerSerhei Makarov <serhei@serhei.io>
Tue, 28 Jan 2025 17:30:50 +0000 (12:30 -0500)
commite38ce78135d152a9b21c886b452dce9522b665b2
treeefdd74d1b5f7523306ce3fe8b0d77a442d17d837
parentd1a9b5d17c2b0148e07970ed9485aeb91802cdb0
DRAFT libdwfl: Elf* caching via dwfl_process_tracker

(Work in progress, based on my testing it's still missing a couple of
pieces in open_elf. Also need to look into using
lib/dynamicsizehash_concurrent.c rather than the boilerplate imitation
here.)

* libdwfl/libdwfl.h (dwfl_process_tracker_find_elf): New function,
  serves as a cached version of the dwfl_linux_proc_find_elf callback.
* libdwfl/libdwflP.h (DWFFL_ELFTAB_ENT_USED): New macro.
  (dwfltracker_elftab_ent): New struct typedef.
  (struct Dwfl_Process_Tracker): Add fields for table of Elf*.
  (__libdwfl_process_tracker_elftab_find): New function.
  (__libdwfl_process_tracker_elftab_mark_used): New function.
* libdwfl/dwfl_process_tracker.c (dwfl_process_tracker_begin): Init elftab.
  (dwfl_process_tracker_end): Free elftab.
  (__libdwfl_process_tracker_elftab_resize): New function.
  (djb2_hash): New function.
  (__libdwfl_process_tracker_elftab_find): New function.
  (__libdwfl_process_tracker_elftab_mark_used): New function.
* libdwfl/dwfl_process_tracker_find_elf.c: New file.
* libdwfl/Makefile.am (libdwfl_a_SOURCES): Add dwfl_process_tracker_find_elf.c.
* libdw/libdw.map: Add dwfl_process_tracker_find_elf.
libdw/libdw.map
libdwfl/Makefile.am
libdwfl/dwfl_process_tracker.c
libdwfl/dwfl_process_tracker_find_elf.c [new file with mode: 0644]
libdwfl/libdwfl.h
libdwfl/libdwflP.h