Messages in this thread | | | Date | Wed, 10 Oct 2018 09:14:58 +0200 | From | Jiri Olsa <> | Subject | Re: perf report segfault |
| |
On Wed, Oct 10, 2018 at 11:13:47AM +0530, Sandipan Das wrote: > 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.
yea.. I knew I saw that code just recently ;-)
thanks, jirka
> > 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); > > >
| |