• Arnaldo Carvalho de Melo's avatar
    perf beauty: Add a generator for MAP_ mmap's flag constants · 80ee5668
    Arnaldo Carvalho de Melo authored
    It'll use tools/{arch}/*,include copies of mman.h to generate a table to
    be used by tools, initially by the 'mmap' beautifiers in 'perf trace',
    but that could also be used to translate from a string constant to the
    integer value to be used in a eBPF or tracefs tracepoint filter.
    
    Tested for all archs using:
    
    $ for arch in `ls tools/arch/` ; \
    	do echo $arch ; tools/perf/trace/beauty/mmap_flags.sh $arch ; \
       done | less
    
    Example for alpha, an oddball, doesn't include any header, defines all
    its stuff:
    
      $ tools/perf/trace/beauty/mmap_flags.sh alpha
      static const char *mmap_flags[] = {
    	[ilog2(0x10) + 1] = "ANONYMOUS",
    	[ilog2(0x02000) + 1] = "DENYWRITE",
    	[ilog2(0x04000) + 1] = "EXECUTABLE",
    	[ilog2(0x100) + 1] = "FIXED",
    	[ilog2(0x01000) + 1] = "GROWSDOWN",
    	[ilog2(0x100000) + 1] = "HUGETLB",
    	[ilog2(0x08000) + 1] = "LOCKED",
    	[ilog2(0x40000) + 1] = "NONBLOCK",
    	[ilog2(0x10000) + 1] = "NORESERVE",
    	[ilog2(0x20000) + 1] = "POPULATE",
    	[ilog2(0x02) + 1] = "PRIVATE",
    	[ilog2(0x01) + 1] = "SHARED",
    	[ilog2(0x80000) + 1] = "STACK",
      };
      $
    
    Common case, my workstation, defines one entry (MAP_32BIT), then
    includes mman.h, which gets it to include mman-common.h too:
    
      $ tools/perf/trace/beauty/mmap_flags.sh
      static const char *mmap_flags[] = {
    	[ilog2(0x40) + 1] = "32BIT",
    	[ilog2(0x01) + 1] = "SHARED",
    	[ilog2(0x02) + 1] = "PRIVATE",
    	[ilog2(0x10) + 1] = "FIXED",
    	[ilog2(0x20) + 1] = "ANONYMOUS",
    	[ilog2(0x100000) + 1] = "FIXED_NOREPLACE",
    	[ilog2(0x0100) + 1] = "GROWSDOWN",
    	[ilog2(0x0800) + 1] = "DENYWRITE",
    	[ilog2(0x1000) + 1] = "EXECUTABLE",
    	[ilog2(0x2000) + 1] = "LOCKED",
    	[ilog2(0x4000) + 1] = "NORESERVE",
    	[ilog2(0x8000) + 1] = "POPULATE",
    	[ilog2(0x10000) + 1] = "NONBLOCK",
    	[ilog2(0x20000) + 1] = "STACK",
    	[ilog2(0x40000) + 1] = "HUGETLB",
    	[ilog2(0x80000) + 1] = "SYNC",
      };
      $ uname -m
      x86_64
      $
    
    Sparc, that defines a bunch then includes just mman-common.h:
    
      $ tools/perf/trace/beauty/mmap_flags.sh sparc
      static const char *mmap_flags[] = {
    	[ilog2(0x0800) + 1] = "DENYWRITE",
    	[ilog2(0x1000) + 1] = "EXECUTABLE",
    	[ilog2(0x0200) + 1] = "GROWSDOWN",
    	[ilog2(0x40000) + 1] = "HUGETLB",
    	[ilog2(0x100) + 1] = "LOCKED",
    	[ilog2(0x10000) + 1] = "NONBLOCK",
    	[ilog2(0x40) + 1] = "NORESERVE",
    	[ilog2(0x8000) + 1] = "POPULATE",
    	[ilog2(0x20000) + 1] = "STACK",
    	[ilog2(0x01) + 1] = "SHARED",
    	[ilog2(0x02) + 1] = "PRIVATE",
    	[ilog2(0x10) + 1] = "FIXED",
    	[ilog2(0x20) + 1] = "ANONYMOUS",
    	[ilog2(0x100000) + 1] = "FIXED_NOREPLACE",
      };
      [acme@jouet perf]$
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: https://lkml.kernel.org/n/tip-xydeh491z8fkgglcmqnl5thj@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    80ee5668
mmap_flags.sh 1.16 KB