|
@@ -95,6 +95,16 @@ static int access_dso_mem(struct unwind_info *ui, Dwarf_Addr addr,
|
|
|
|
|
|
thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER,
|
|
thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER,
|
|
MAP__FUNCTION, addr, &al);
|
|
MAP__FUNCTION, addr, &al);
|
|
|
|
+ if (!al.map) {
|
|
|
|
+ /*
|
|
|
|
+ * We've seen cases (softice) where DWARF unwinder went
|
|
|
|
+ * through non executable mmaps, which we need to lookup
|
|
|
|
+ * in MAP__VARIABLE tree.
|
|
|
|
+ */
|
|
|
|
+ thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER,
|
|
|
|
+ MAP__VARIABLE, addr, &al);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (!al.map) {
|
|
if (!al.map) {
|
|
pr_debug("unwind: no map for %lx\n", (unsigned long)addr);
|
|
pr_debug("unwind: no map for %lx\n", (unsigned long)addr);
|
|
return -1;
|
|
return -1;
|