diff options
-rw-r--r-- | library.c | 4 | ||||
-rw-r--r-- | library.h | 8 | ||||
-rw-r--r-- | output.c | 13 | ||||
-rw-r--r-- | proc.c | 9 |
4 files changed, 26 insertions, 8 deletions
@@ -294,6 +294,10 @@ private_library_init(struct library *lib, enum library_type type) lib->symbols = NULL; lib->exported_names = NULL; lib->type = type; + +#if defined(HAVE_LIBDW) + lib->dwfl = NULL; +#endif } int @@ -24,6 +24,10 @@ #include <stdint.h> +#if defined(HAVE_LIBDW) +# include <elfutils/libdwfl.h> +#endif + #include "callback.h" #include "forward.h" #include "sysdep.h" @@ -170,6 +174,10 @@ struct library { struct arch_library_data arch; struct os_library_data os; + +#if defined(HAVE_LIBDW) + Dwfl *dwfl; +#endif }; /* Init LIB. */ @@ -49,6 +49,11 @@ #include "type.h" #include "value.h" #include "value_dict.h" +#include "filter.h" + +#if defined(HAVE_LIBDW) +#include "dwarf_prototypes.h" +#endif static struct process *current_proc = NULL; static size_t current_depth = 0; @@ -207,6 +212,14 @@ library_get_prototype(struct library *lib, const char *name) && lib->type == LT_LIBTYPE_DSO && snip_period(buf)); +#if defined(HAVE_LIBDW) + if (lib->protolib == NULL && lib->dwfl != NULL && + (filter_matches_library(options.plt_filter, lib ) || + filter_matches_library(options.static_filter, lib ) || + filter_matches_library(options.export_filter, lib ))) + import_DWARF_prototypes(lib->protolib, lib, lib->dwfl); +#endif + if (lib->protolib == NULL) lib->protolib = protolib_cache_default(&g_protocache, buf, 0); @@ -37,7 +37,6 @@ #include "proc.h" #include "value_dict.h" #include "dwarf_prototypes.h" -#include "filter.h" #ifndef OS_HAVE_PROCESS_DATA int @@ -947,13 +946,7 @@ proc_add_library(struct process *proc, struct library *lib) } } - if( dwfl != NULL && - ( filter_matches_library(options.plt_filter, lib ) || - filter_matches_library(options.static_filter, lib ) || - filter_matches_library(options.export_filter, lib ) ) ) - { - import_DWARF_prototypes( lib->protolib, lib, dwfl ); - } + lib->dwfl = dwfl; #endif /* defined(HAVE_LIBDW) */ |