/* For each entry in the .dynamic section in the current module call 'callback'
* returning 'object' in case 'callback' is a method */
-void
-dwflpp::iterate_over_libraries (void (*callback)(void *object, const char *arg), void *q)
+template<> void
+dwflpp::iterate_over_libraries<void>(void (*callback)(void*, const char*),
+ void *data)
{
std::set<std::string> added;
string interpreter;
it++)
{
string modname = *it;
- (callback) (q, modname.c_str());
+ (callback) (data, modname.c_str());
}
}
size_t))callback);
}
+ template<typename T>
+ void iterate_over_libraries (void (*callback)(T*, const char*), T *data)
+ {
+ // See comment block in iterate_over_modules()
+ iterate_over_libraries<void>((void (*)(void*,
+ const char*))callback,
+ (void*)data);
+ }
+
+
void iterate_over_srcfile_lines (char const * srcfile,
int lines[2],
bool need_single_match,
dwarf_query *),
std::stack<Dwarf_Addr>*callers=NULL);
- void iterate_over_libraries (void (*callback)(void *object,
- const char *data), void *data);
-
-
int iterate_over_plt (void *object,
void (*callback)(void *object, const char *name, size_t address));
int,
const char*,
size_t));
+template<> void
+dwflpp::iterate_over_libraries<void>(void (*callback)(void*, const char*),
+ void *data);
#endif // DWFLPP_H
string const & k, long & v);
static bool get_number_param(literal_map_t const & params,
string const & k, Dwarf_Addr & v);
- static void query_library_callback (void *object, const char *data);
+ static void query_library_callback (base_query *me, const char *data);
static void query_plt_callback (void *object, const char *link, size_t addr);
virtual void query_library (const char *data) = 0;
virtual void query_plt (const char *link, size_t addr) = 0;
void
-base_query::query_library_callback (void *q, const char *data)
+base_query::query_library_callback (base_query *me, const char *data)
{
- base_query *me = (base_query*)q;
me->query_library (data);
}
void
-add_unwindsym_iol_callback (void *q, const char *data)
+add_unwindsym_iol_callback (set<string> *added, const char *data)
{
- std::set<std::string> *added = (std::set<std::string>*)q;
added->insert (string (data));
}