X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fso-info.c;h=eca53cfbd79694898becae3bff00f953205eb33e;hp=88106f39daccb8d3285e3698a9d82ccc69a8faf1;hb=d3c33bc6a2eacaf1d0379d546df22befafa12770;hpb=7fd3113e7081a50aab48adb346005d56a16fadbb diff --git a/lib/so-info.c b/lib/so-info.c index 88106f39..eca53cfb 100644 --- a/lib/so-info.c +++ b/lib/so-info.c @@ -745,7 +745,10 @@ int so_info_lookup_cu_function_name(struct bt_dwarf_cu *cu, uint64_t addr, char **func_name) { int ret = 0, found = 0; + uint64_t low_addr = 0; + char *die_name = NULL; char *_func_name = NULL; + char offset_str[ADDR_STR_LEN]; struct bt_dwarf_die *die = NULL; if (!cu || !func_name) { @@ -778,11 +781,26 @@ int so_info_lookup_cu_function_name(struct bt_dwarf_cu *cu, uint64_t addr, } if (found) { - ret = bt_dwarf_die_get_name(die, &_func_name); + ret = bt_dwarf_die_get_name(die, &die_name); + if (ret) { + goto error; + } + + ret = dwarf_lowpc(die->dwarf_die, &low_addr); if (ret) { goto error; } + snprintf(offset_str, ADDR_STR_LEN, "+%#0" PRIx64, + addr - low_addr); + _func_name = malloc(strlen(die_name) + ADDR_STR_LEN); + if (!_func_name) { + goto error; + } + + strcpy(_func_name, die_name); + strcat(_func_name, offset_str); + *func_name = _func_name; }