perf thread: Make thread__find_map() return the map
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 71a84b5aedf5023f4009c3bbf28ecba256201f87 Gitweb: https://git.kernel.org/tip/71a84b5aedf5023f4009c3bbf28ecba256201f87 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 24 Apr 2018 11:58:56 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 26 Apr 2018 13:47:08 -0300
perf thread: Make thread__find_map() return the map
It was returning the searched map just on the addr_location passed, with the function itself returning void.
Make it return the map so that we can make the code more compact.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-inject.c | 4 +--- tools/perf/builtin-script.c | 14 ++++++-------- tools/perf/tests/code-reading.c | 3 +-- tools/perf/util/build-id.c | 4 +--- tools/perf/util/cs-etm.c | 4 +--- tools/perf/util/event.c | 16 ++++++++-------- tools/perf/util/intel-bts.c | 3 +-- tools/perf/util/intel-pt.c | 6 ++---- tools/perf/util/thread.h | 10 +++++----- tools/perf/util/unwind-libdw.c | 3 +-- tools/perf/util/unwind-libunwind-local.c | 3 +-- 11 files changed, 28 insertions(+), 42 deletions(-)
tools/perf/builtin-inject.c +1 -3
@@ -440,9 +440,7 @@ static int perf_event__inject_buildid(struct perf_tool *tool, 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 ) {
tools/perf/builtin-script.c +6 -8
@@ -809,12 +809,12 @@ static int perf_sample__fprintf_brstackoff(struct perf_sample *sample, 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);
@@ -877,8 +877,7 @@ static int grab_bb(u8 *buffer, u64 start, u64 end,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 ; }
@@ -928,8 +927,7 @@ static int ip__fprintf_sym(uint64_t addr, struct thread *thread,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 ;
tools/perf/tests/code-reading.c +1 -2
@@ -236,8 +236,7 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,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 ;
tools/perf/util/build-id.c +1 -3
@@ -47,9 +47,7 @@ int build_id__mark_dso_hit(struct perf_tool *tool __maybe_unused,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);
tools/perf/util/cs-etm.c +1 -3
@@ -269,9 +269,7 @@ static u32 cs_etm__mem_access(struct cs_etm_queue *etmq, u64 address, 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 &&
tools/perf/util/event.c +8 -8
@@ -1489,8 +1489,8 @@ int perf_event__process(struct perf_tool *tool __maybe_unused,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;
@@ -1504,7 +1504,7 @@ void __thread__find_map(struct thread *thread, u8 cpumode, enum map_type type,if (machine ==NULL ) { al->map =NULL ; -return ; +return NULL ; }if (cpumode ==PERF_RECORD_MISC_KERNEL && perf_host) {
@@ -1532,7 +1532,7 @@ void __thread__find_map(struct thread *thread, u8 cpumode, enum map_type type, !perf_host) al->filtered |= (1 <<HIST_FILTER__HOST ); -return ; +return NULL ; } try_again: al->map =map_groups__find (mg, type, al->addr);
@@ -1562,14 +1562,15 @@ try_again: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 ;
@@ -1668,8 +1669,7 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr)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); }
tools/perf/util/intel-bts.c +1 -2
@@ -335,8 +335,7 @@ static int intel_bts_get_next_insn(struct intel_bts_queue *btsq, u64 ip)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,
tools/perf/util/intel-pt.c +2 -4
@@ -442,8 +442,7 @@ static int intel_pt_walk_next_insn(struct intel_pt_insn *intel_pt_insn, }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 &&
@@ -596,8 +595,7 @@ static int __intel_pt_pgd_ip(uint64_t ip, void *data)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);
tools/perf/util/thread.h +5 -5
@@ -92,13 +92,13 @@ size_t thread__fprintf(struct thread *thread, FILE *fp);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,
tools/perf/util/unwind-libdw.c +1 -2
@@ -104,8 +104,7 @@ static int access_dso_mem(struct unwind_info *ui, Dwarf_Addr addr,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
tools/perf/util/unwind-libunwind-local.c +1 -2
@@ -367,8 +367,7 @@ static struct map *find_map(unw_word_t ip, struct unwind_info *ui) {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