Messages in this thread | | | Subject | Re: perf report segfault | From | Sandipan Das <> | Date | Wed, 10 Oct 2018 11:13:47 +0530 |
| |
Hi Jiri,
Yes, this happens when entry->map is NULL. While your fix seems correct, the following commit from Milian Wolff had already addressed this. I think this was pulled in with one of Arnaldo's recent perf/urgent updates.
ff4ce2885af8 ("perf report: Don't try to map ip to invalid map")
Adding Milian to the loop as well.
With Regards, Sandipan
On 10/10/18 3:50 AM, Jiri Olsa wrote: > On Tue, Oct 09, 2018 at 04:47:31PM -0500, Anthony LaTorre wrote: >> I can try building perf from the latest sources. I've attached the >> perf.data and perf.data.tar.bz2 from the test program I sent earlier. > > cool, reproduced.. it seems to get introduced by: > 2a9d5050dc84 perf script: Show correct offsets for DWARF-based unwinding > > reverting that patch fixes the issue for me, but looks like > we could just make th attached check and prevent the crash > > adding Sandipan Das to the loop, the author of that commit, any idea? > > thanks, > jirka > > > --- > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index c4acd2001db0..ea68c805c7ac 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -2312,7 +2312,6 @@ 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; > @@ -2320,13 +2319,15 @@ static int unwind_entry(struct unwind_entry *entry, void *arg) > if (append_inlines(cursor, entry->map, entry->sym, entry->ip) == 0) > return 0; > > - /* > - * Convert entry->ip from a virtual address to an offset in > - * its corresponding binary. > - */ > - addr = map__map_ip(entry->map, entry->ip); > + if (entry->map) { > + /* > + * Convert entry->ip from a virtual address to an offset in > + * its corresponding binary. > + */ > + u64 addr = map__map_ip(entry->map, entry->ip); > + srcline = callchain_srcline(entry->map, entry->sym, addr); > + } > > - 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); >
| |