static int access_dso_mem(struct unwind_info *ui, Dwarf_Addr addr, Dwarf_Word *data) { struct addr_location al; ssize_t size; thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER, 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) { pr_debug("unwind: no map for %lx\n", (unsigned long)addr); return -1; } if (!al.map->dso) return -1; size = dso__data_read_addr(al.map->dso, al.map, ui->machine, addr, (u8 *) data, sizeof(*data)); return !(size == sizeof(*data)); }
static int access_dso_mem(struct unwind_info *ui, Dwarf_Addr addr, Dwarf_Word *data) { struct addr_location al; ssize_t size; if (!thread__find_map(ui->thread, PERF_RECORD_MISC_USER, addr, &al)) { pr_debug("unwind: no map for %lx\n", (unsigned long)addr); return -1; } if (!al.map->dso) return -1; size = dso__data_read_addr(al.map->dso, al.map, ui->machine, addr, (u8 *) data, sizeof(*data)); return !(size == sizeof(*data)); }