|
@@ -2272,6 +2272,7 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
|
|
|
{
|
|
|
struct callchain_cursor *cursor = arg;
|
|
|
const char *srcline = NULL;
|
|
|
+ u64 addr;
|
|
|
|
|
|
if (symbol_conf.hide_unresolved && entry->sym == NULL)
|
|
|
return 0;
|
|
@@ -2279,7 +2280,13 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
|
|
|
if (append_inlines(cursor, entry->map, entry->sym, entry->ip) == 0)
|
|
|
return 0;
|
|
|
|
|
|
- srcline = callchain_srcline(entry->map, entry->sym, entry->ip);
|
|
|
+ /*
|
|
|
+ * Convert entry->ip from a virtual address to an offset in
|
|
|
+ * its corresponding binary.
|
|
|
+ */
|
|
|
+ addr = map__map_ip(entry->map, entry->ip);
|
|
|
+
|
|
|
+ srcline = callchain_srcline(entry->map, entry->sym, addr);
|
|
|
return callchain_cursor_append(cursor, entry->ip,
|
|
|
entry->map, entry->sym,
|
|
|
false, NULL, 0, 0, 0, srcline);
|