Em Sun, Sep 04, 2016 at 05:04:38AM +0000, Wang Nan escreveu: > Hugetlbfs mapping should be recognized as anon mapping so user has > a chance to create /tmp/perf-<pid>.map file for symbol resolving. This > patch utilizes MAP_HUGETLB to identify hugetlb mapping. > > After this patch, if perf is started before the program starts using > huge pages (so perf gets MMAP2 events from kernel), perf is able to > recognize hugetlb mapping as anon mapping.
Fixing build on older distros (Centos5, Ubuntu 12.04.5, etc) CC /tmp/build/perf/arch/x86/util/perf_regs.o util/event.c: In function 'perf_event__synthesize_mmap_events': util/event.c:350: error: 'MAP_HUGETLB' undeclared (first use in this function) util/event.c:350: error: (Each undeclared identifier is reported only once util/event.c:350: error: for each function it appears in.) > Signed-off-by: Wang Nan <wangn...@huawei.com> > Signed-off-by: Hou Pengyang <houpengy...@huawei.com> > Cc: He Kuang <heku...@huawei.com> > Cc: Arnaldo Carvalho de Melo <a...@redhat.com> > Cc: Nilay Vaish <nilayva...@gmail.com> > --- > tools/perf/util/map.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > index 728129a..a42010d 100644 > --- a/tools/perf/util/map.c > +++ b/tools/perf/util/map.c > @@ -6,6 +6,7 @@ > #include <string.h> > #include <stdio.h> > #include <unistd.h> > +#include <sys/mman.h> > #include "map.h" > #include "thread.h" > #include "strlist.h" > @@ -24,9 +25,10 @@ const char *map_type__name[MAP__NR_TYPES] = { > [MAP__VARIABLE] = "Variables", > }; > > -static inline int is_anon_memory(const char *filename) > +static inline int is_anon_memory(const char *filename, u32 flags) > { > - return !strcmp(filename, "//anon") || > + return flags & MAP_HUGETLB || > + !strcmp(filename, "//anon") || > !strncmp(filename, "/dev/zero", sizeof("/dev/zero") - 1) || > !strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage") - > 1); > } > @@ -155,7 +157,7 @@ struct map *map__new(struct machine *machine, u64 start, > u64 len, > int anon, no_dso, vdso, android; > > android = is_android_lib(filename); > - anon = is_anon_memory(filename); > + anon = is_anon_memory(filename, flags); > vdso = is_vdso_map(filename); > no_dso = is_no_dso_memory(filename); > > -- > 1.8.3.4