goto repipe;
}
- thread__find_map(thread, sample->cpumode, sample->ip, &al);
-
- if (al.map != NULL) {
+ if (thread__find_map(thread, sample->cpumode, sample->ip, &al)) {
if (!al.map->dso->hit) {
al.map->dso->hit = 1;
if (map__load(al.map) >= 0) {
from = br->entries[i].from;
to = br->entries[i].to;
- thread__find_map(thread, sample->cpumode, from, &alf);
- if (alf.map && !alf.map->dso->adjust_symbols)
+ if (thread__find_map(thread, sample->cpumode, from, &alf) &&
+ !alf.map->dso->adjust_symbols)
from = map__map_ip(alf.map, from);
- thread__find_map(thread, sample->cpumode, to, &alt);
- if (alt.map && !alt.map->dso->adjust_symbols)
+ if (thread__find_map(thread, sample->cpumode, to, &alt) &&
+ !alt.map->dso->adjust_symbols)
to = map__map_ip(alt.map, to);
printed += fprintf(fp, " 0x%"PRIx64, from);
return 0;
}
- thread__find_map(thread, *cpumode, start, &al);
- if (!al.map || !al.map->dso) {
+ if (!thread__find_map(thread, *cpumode, start, &al) || !al.map->dso) {
pr_debug("\tcannot resolve %" PRIx64 "-%" PRIx64 "\n", start, end);
return 0;
}
memset(&al, 0, sizeof(al));
- thread__find_map(thread, cpumode, addr, &al);
- if (!al.map)
+ if (!thread__find_map(thread, cpumode, addr, &al))
__thread__find_map(thread, cpumode, MAP__VARIABLE, addr, &al);
if ((*lastsym) && al.addr >= (*lastsym)->start && al.addr < (*lastsym)->end)
return 0;
pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
- thread__find_map(thread, cpumode, addr, &al);
- if (!al.map || !al.map->dso) {
+ if (!thread__find_map(thread, cpumode, addr, &al) || !al.map->dso) {
if (cpumode == PERF_RECORD_MISC_HYPERVISOR) {
pr_debug("Hypervisor address can not be resolved - skipping\n");
return 0;
return -1;
}
- thread__find_map(thread, sample->cpumode, sample->ip, &al);
-
- if (al.map != NULL)
+ if (thread__find_map(thread, sample->cpumode, sample->ip, &al))
al.map->dso->hit = 1;
thread__put(thread);
thread = etmq->etm->unknown_thread;
}
- thread__find_map(thread, cpumode, address, &al);
-
- if (!al.map || !al.map->dso)
+ if (!thread__find_map(thread, cpumode, address, &al) || !al.map->dso)
return 0;
if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR &&
return machine__process_event(machine, event, sample);
}
-void __thread__find_map(struct thread *thread, u8 cpumode, enum map_type type,
- u64 addr, struct addr_location *al)
+struct map *__thread__find_map(struct thread *thread, u8 cpumode, enum map_type type,
+ u64 addr, struct addr_location *al)
{
struct map_groups *mg = thread->mg;
struct machine *machine = mg->machine;
if (machine == NULL) {
al->map = NULL;
- return;
+ return NULL;
}
if (cpumode == PERF_RECORD_MISC_KERNEL && perf_host) {
!perf_host)
al->filtered |= (1 << HIST_FILTER__HOST);
- return;
+ return NULL;
}
try_again:
al->map = map_groups__find(mg, type, al->addr);
map__load(al->map);
al->addr = al->map->map_ip(al->map, al->addr);
}
+
+ return al->map;
}
void __thread__find_symbol(struct thread *thread, u8 cpumode,
enum map_type type, u64 addr,
struct addr_location *al)
{
- __thread__find_map(thread, cpumode, type, addr, al);
- if (al->map != NULL)
+ if (__thread__find_map(thread, cpumode, type, addr, al))
al->sym = map__find_symbol(al->map, al->addr);
else
al->sym = NULL;
void thread__resolve(struct thread *thread, struct addr_location *al,
struct perf_sample *sample)
{
- thread__find_map(thread, sample->cpumode, sample->addr, al);
- if (!al->map) {
+ if (!thread__find_map(thread, sample->cpumode, sample->addr, al)) {
__thread__find_map(thread, sample->cpumode, MAP__VARIABLE,
sample->addr, al);
}
if (!thread)
return -1;
- thread__find_map(thread, cpumode, ip, &al);
- if (!al.map || !al.map->dso)
+ if (!thread__find_map(thread, cpumode, ip, &al) || !al.map->dso)
goto out_put;
len = dso__data_read_addr(al.map->dso, al.map, machine, ip, buf,
}
while (1) {
- thread__find_map(thread, cpumode, *ip, &al);
- if (!al.map || !al.map->dso)
+ if (!thread__find_map(thread, cpumode, *ip, &al) || !al.map->dso)
return -EINVAL;
if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR &&
if (!thread)
return -EINVAL;
- thread__find_map(thread, cpumode, ip, &al);
- if (!al.map || !al.map->dso)
+ if (!thread__find_map(thread, cpumode, ip, &al) || !al.map->dso)
return -EINVAL;
offset = al.map->map_ip(al.map, ip);
struct thread *thread__main_thread(struct machine *machine, struct thread *thread);
-void __thread__find_map(struct thread *thread, u8 cpumode, enum map_type type,
- u64 addr, struct addr_location *al);
+struct map *__thread__find_map(struct thread *thread, u8 cpumode, enum map_type type,
+ u64 addr, struct addr_location *al);
-static inline void thread__find_map(struct thread *thread, u8 cpumode,
- u64 addr, struct addr_location *al)
+static inline struct map *thread__find_map(struct thread *thread, u8 cpumode,
+ u64 addr, struct addr_location *al)
{
- __thread__find_map(thread, cpumode, MAP__FUNCTION, addr, al);
+ return __thread__find_map(thread, cpumode, MAP__FUNCTION, addr, al);
}
void __thread__find_symbol(struct thread *thread, u8 cpumode, enum map_type type,
struct addr_location al;
ssize_t size;
- thread__find_map(ui->thread, PERF_RECORD_MISC_USER, addr, &al);
- if (!al.map) {
+ if (!thread__find_map(ui->thread, PERF_RECORD_MISC_USER, addr, &al)) {
/*
* We've seen cases (softice) where DWARF unwinder went
* through non executable mmaps, which we need to lookup
{
struct addr_location al;
- thread__find_map(ui->thread, PERF_RECORD_MISC_USER, ip, &al);
- if (!al.map) {
+ if (!thread__find_map(ui->thread, PERF_RECORD_MISC_USER, ip, &al)) {
/*
* We've seen cases (softice) where DWARF unwinder went
* through non executable mmaps, which we need to lookup