cache->refresh();
}
+struct mod_st {
+ const char *name;
+ uint64_t start;
+};
+
+static int _find_module(const char *modname, uint64_t start, uint64_t end,
+ void *p) {
+ struct mod_st *mod = (struct mod_st *)p;
+ if (!strcmp(modname, mod->name)) {
+ mod->start = start;
+ return -1;
+ }
+ return 0;
+}
+
+int bcc_resolve_global_addr(int pid, const char *module, const uint64_t address,
+ uint64_t *global) {
+ struct mod_st mod = {module, 0x0};
+ if (bcc_procutils_each_module(pid, _find_module, &mod) < 0 ||
+ mod.start == 0x0)
+ return -1;
+
+ *global = mod.start + address;
+ return 0;
+}
+
static int _find_sym(const char *symname, uint64_t addr, uint64_t end,
int flags, void *payload) {
struct bcc_symbol *sym = (struct bcc_symbol *)payload;
int bcc_symcache_resolve_name(void *resolver, const char *name, uint64_t *addr);
void bcc_symcache_refresh(void *resolver);
+int bcc_resolve_global_addr(int pid, const char *module, const uint64_t address,
+ uint64_t *global);
int bcc_find_symbol_addr(struct bcc_symbol *sym);
int bcc_resolve_symname(const char *module, const char *symname,
const uint64_t addr, struct bcc_symbol *sym);