Skip to content

Commit

Permalink
cc: Implement bcc_resolve_global_addr helper
Browse files Browse the repository at this point in the history
  • Loading branch information
vmg committed May 6, 2016
1 parent 7575c64 commit a597f7c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/cc/bcc_syms.cc
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,32 @@ void bcc_symcache_refresh(void *resolver) {
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;
Expand Down
2 changes: 2 additions & 0 deletions src/cc/bcc_syms.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ int bcc_symcache_resolve(void *symcache, uint64_t addr, struct bcc_symbol *sym);
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);
Expand Down

0 comments on commit a597f7c

Please sign in to comment.