On Wed, Jan 9, 2013 at 5:55 PM, Jiri Olsa <jo...@redhat.com> wrote: > On Mon, Jan 07, 2013 at 07:27:50PM +0100, Stephane Eranian wrote: > > SNIP > >> >> +static void ip__resolve_data(struct machine *self, struct thread *thread, >> + u8 m, >> + struct addr_map_symbol *ams, >> + u64 addr) >> +{ >> + struct addr_location al; >> + >> + memset(&al, 0, sizeof(al)); >> + >> + thread__find_addr_location(thread, self, m, MAP__VARIABLE, addr, &al, >> + NULL); >> + ams->addr = addr; >> + ams->al_addr = al.addr; >> + ams->sym = al.sym; >> + ams->map = al.map; >> +} >> + >> +struct mem_info *machine__resolve_mem(struct machine *self, >> + struct thread *thr, >> + struct perf_sample *sample, >> + u8 cpumode) >> +{ >> + struct mem_info *mi; >> + >> + mi = calloc(1, sizeof(struct mem_info)); >> + if (!mi) >> + return NULL; >> + >> + ip__resolve_ams(self, thr, &mi->iaddr, sample->ip); >> + ip__resolve_data(self, thr, cpumode, &mi->daddr, sample->addr); >> + mi->cost = sample->weight; >> + mi->dsrc.val = sample->dsrc; >> + >> + return mi; >> +} >> + > > The crash I report is due to the some maps could be removed > via map_groups__fixup_overlappings. > > Attached patch makes the code working for me, but we might > want to have some global unified fix for that, since this > is not the only place suffering for that. > > Like globaly set map->referenced in add_hist_entry or > hist_entry__new functions.. > > Would something like that work for you (untested)?
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 7034500..fc05b9f 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -274,6 +274,12 @@ static struct hist_entry *hist_entry__new(struct hist_entry *template) if (he->ms.map) he->ms.map->referenced = true; + if (he->mem_info) { + if (he->mem_info->iaddr.map) + he->mem_info->iaddr.map->referenced = true; + if (he->mem_info->daddr.map) + he->mem_info->daddr.map->referenced = true; + } if (symbol_conf.use_callchain) callchain_init(he->callchain); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/