diff options
-rw-r--r-- | dwflpp.cxx | 7 | ||||
-rw-r--r-- | dwflpp.h | 3 | ||||
-rw-r--r-- | tapsets.cxx | 8 |
3 files changed, 10 insertions, 8 deletions
@@ -181,8 +181,8 @@ dwflpp::focus_on_function(Dwarf_Die * f) } -void -dwflpp::query_cu_containing_address(Dwarf_Addr a, void *arg) +Dwarf_Die * +dwflpp::query_cu_containing_address(Dwarf_Addr a) { Dwarf_Addr bias; assert(dwfl); @@ -194,9 +194,8 @@ dwflpp::query_cu_containing_address(Dwarf_Addr a, void *arg) a += module_start; Dwarf_Die* cudie = dwfl_module_addrdie(module, a, &bias); - if (cudie) // address could be wildly out of range - query_cu (cudie, arg); assert(bias == module_bias); + return cudie; } @@ -62,7 +62,6 @@ typedef std::vector<inline_instance_info> inline_instance_map_t; /* XXX FIXME functions that dwflpp needs from tapsets.cxx */ -int query_cu (Dwarf_Die * cudie, void * arg); func_info_map_t *get_filtered_functions(dwarf_query *q); inline_instance_map_t *get_filtered_inlines(dwarf_query *q); void add_label_name(dwarf_query *q, const char *name); @@ -195,7 +194,7 @@ struct dwflpp void focus_on_cu(Dwarf_Die * c); void focus_on_function(Dwarf_Die * f); - void query_cu_containing_address(Dwarf_Addr a, void *arg); + Dwarf_Die *query_cu_containing_address(Dwarf_Addr a); bool module_name_matches(std::string pattern); bool name_has_wildcard(std::string pattern); diff --git a/tapsets.cxx b/tapsets.cxx index 25b729d8..eeccb90b 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -260,6 +260,8 @@ static string TOK_MARK("mark"); static string TOK_TRACE("trace"); static string TOK_LABEL("label"); +static int query_cu (Dwarf_Die * cudie, void * arg); + // Can we handle this query with just symbol-table info? enum dbinfo_reqt { @@ -751,7 +753,9 @@ dwarf_query::query_module_dwarf() // NB: we don't need to add the module base address or bias // value here (for reasons that may be coincidental). - dw.query_cu_containing_address(addr, this); + Dwarf_Die* cudie = dw.query_cu_containing_address(addr); + if (cudie) // address could be wildly out of range + query_cu(cudie, this); } else { @@ -1638,7 +1642,7 @@ query_dwarf_func (Dwarf_Die * func, base_query * bq) } } -int +static int query_cu (Dwarf_Die * cudie, void * arg) { dwarf_query * q = static_cast<dwarf_query *>(arg); |