summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDima Kogan <dima@secretsauce.net>2014-04-23 03:01:20 -0700
committerChanho Park <chanho61.park@samsung.com>2014-08-22 20:38:25 +0900
commit572c4648c0d567bd4868ff442149cd7b5603e370 (patch)
treea0d25b79acf883becdb1fbef60d2371ba6fd2b01
parent45492e9eb4681609f218f11e71523b6751303af6 (diff)
downloadltrace-572c4648c0d567bd4868ff442149cd7b5603e370.tar.gz
ltrace-572c4648c0d567bd4868ff442149cd7b5603e370.tar.bz2
ltrace-572c4648c0d567bd4868ff442149cd7b5603e370.zip
moved DWARF prototype reading to library_get_prototype()
-rw-r--r--library.c4
-rw-r--r--library.h8
-rw-r--r--output.c13
-rw-r--r--proc.c9
4 files changed, 26 insertions, 8 deletions
diff --git a/library.c b/library.c
index 1f425e0..13d8d45 100644
--- a/library.c
+++ b/library.c
@@ -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
diff --git a/library.h b/library.h
index 9b687b1..82dc048 100644
--- a/library.h
+++ b/library.h
@@ -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. */
diff --git a/output.c b/output.c
index 671a5d7..5dcc475 100644
--- a/output.c
+++ b/output.c
@@ -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);
diff --git a/proc.c b/proc.c
index 49c0b93..f08f947 100644
--- a/proc.c
+++ b/proc.c
@@ -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) */