Messages in this thread | | | Date | Wed, 22 Aug 2012 13:22:17 -0600 | From | David Ahern <> | Subject | Re: [PATCH] perf: do not flush maps on COMM for perf report |
| |
On 8/21/12 3:52 PM, Luigi Semenzato wrote: > This fixes a long-standing bug caused by the lack of separate > COMM and EXEC record types, which makes "perf report" lose > track of symbols when a process renames itself. > > With this fix (suggested by Stephane Eranian), a COMM (rename) > no longer flushes the maps, which is the correct behavior. > An EXEC also no longer flushes the maps, but this doesn't > matter because as new mappings are created (for the executable > and the libraries) the old mappings are automatically removed. > This is not by accident: the functionality is necessary because > DLLs can be explicitly loaded at any time with dlopen(), > possibly on top of existing text, so "perf report" handles > correctly the clobbering of new mappings on top of old ones. > > An alternative patch (which I proposed earlier) would be to > introduce a separate PERF_RECORD_EXEC type, but it is a much > larger change (about 300 lines) and is not necessary. > > Signed-off-by: Luigi Semenzato <semenzato@chromium.org> > --- > tools/perf/util/thread.c | 1 - > 1 files changed, 0 insertions(+), 1 deletions(-) > > diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c > index fb4b7ea..8b3e593 100644 > --- a/tools/perf/util/thread.c > +++ b/tools/perf/util/thread.c > @@ -39,7 +39,6 @@ int thread__set_comm(struct thread *self, const char *comm) > err = self->comm == NULL ? -ENOMEM : 0; > if (!err) { > self->comm_set = true; > - map_groups__flush(&self->mg); > } > return err; > } >
Acked-by: David Ahern <dsahern@gmail.com>
| |