From c162ed3e66aa985fa2e79d0e7ccd2da80a532c1e Mon Sep 17 00:00:00 2001 From: Hannes Domani Date: Sat, 21 Dec 2019 17:08:14 +0100 Subject: Cache the text section offset of shared libraries Each time a dll is loaded, update_solib_list is called. This in turn calls deep down xfer_partial -> windows_xfer_shared_libraries, which calls windows_xfer_shared_library for each loaded dll, and pe_text_section_offset reads the dll for the text section offset. Also if the data provided by xfer_partial is bigger than 4K, then all of this is done for each 4K chunk (see target_read_alloc_1). Caching of the text section offset improves the startup time of an application with >300 dynamically loaded plugins from 2m10s to 10s. And the shutdown time improves from 2m to 2s. gdb/ChangeLog: 2020-01-23 Hannes Domani * i386-cygwin-tdep.c (core_process_module_section): Update. * windows-nat.c (struct lm_info_windows): Add text_offset. (windows_xfer_shared_libraries): Update. * windows-tdep.c (windows_xfer_shared_library): Add text_offset_cached argument. * windows-tdep.h (windows_xfer_shared_library): Update. --- gdb/windows-tdep.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'gdb/windows-tdep.c') diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index 1fc2748..6c9632d 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -483,19 +483,27 @@ display_tib (const char * args, int from_tty) void windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, + CORE_ADDR *text_offset_cached, struct gdbarch *gdbarch, struct obstack *obstack) { - CORE_ADDR text_offset; + CORE_ADDR text_offset = text_offset_cached ? *text_offset_cached : 0; obstack_grow_str (obstack, ""); } -- cgit v1.1