[PATCH 0/4] Use _dl_find_eh_frame to locate DWARF EH data in the unwinder
Florian Weimer
fweimer@redhat.com
Wed Nov 3 16:28:26 GMT 2021
This is the GCC side of the patch series.
To simplify testing, a weak reference to _dl_find_eh_frame is used to
enable this feature when running on newer glibc even if built for older
glibc.
The first three patches are cleanups/refactorings to simplify the actual
change in the last patch.
Benchmarking-wise, the new unwinder is slightly faster even in the
optimal case for the old implementation (single-threaded, 100% cache hit
rate). The old implementation performs really poorly once the cache hit
rate drops and the number of shared objects participating in unwinding
increases, so that's not a fair comparison. Old performance with
multiple threads is also poor due to the global loader lock implied by
dl_iterate_phdr (which is necessary to serialize access to the libgcc
unwinder cache), and I haven't bother to benchmark that.
Thanks,
Florian
Florian Weimer (4):
libgcc: Remove tbase member from struct unw_eh_callback_data
libgcc: Remove dbase member from struct unw_eh_callback_data if NULL
libgcc: Split FDE search code from PT_GNU_EH_FRAME lookup
libgcc: Use _dl_find_eh_frame in _Unwind_Find_FDE
libgcc/unwind-dw2-fde-dip.c | 185 +++++++++++++++++++++++++++---------
1 file changed, 139 insertions(+), 46 deletions(-)
base-commit: 6b8b25575570ffde37cc8997af096514b929779d
--
2.31.1
More information about the Libc-alpha
mailing list