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);
> 

Reply via email to