• Wang Nan's avatar
    tools include: Add mman macros needed by perf for all arch · f82b7746
    Wang Nan authored
    Some macros required by tools/perf/trace/beauty/mmap.c is not support
    for all architectures. For example, MAP_32BIT is defined on x86 only,
    alpha doesn't define MADV_HWPOISON and MADV_SOFT_OFFLINE.
    
    This patch regenerates mman.h for each arch, defines these missing
    macros for perf. For missing MADV_*, fall back to asm-generic/mman-common
    because they are in a 'case ...' statement. For flags, define it to 0.
    
    Following is the script to generate this patch:
    
     macros=`cat $0 | awk 'V==1 {print}; /^# start macro list/ {V=1}'`
     rm `find ./tools/arch/ -name mman.h`
     for arch in `ls tools/arch`
     do
       [ -d tools/arch/$arch/include/uapi/asm ] || mkdir -p tools/arch/$arch/include/uapi/asm
       src=arch/$arch/include/uapi/asm/mman.h
       target=tools/arch/$arch/include/uapi/asm/mman.h.tmp
       real_target=tools/arch/$arch/include/uapi/asm/mman.h
       guard="TOOLS_ARCH_"`echo $arch | awk '{print toupper($0)}'`_UAPI_ASM_MMAN_FIX_H
       rm -f $target
    
       [ -f $src ] &&
       for m in $macros
       do
         if grep '#define[ \t]*'$m $src > /dev/null 2>&1
         then
           grep -h '#define[ \t]*'$m $src | sed 's/[ \t]*\/\*.*$//g' >> $target
         fi
       done
    
       if [ -f $src ]
       then
          grep '#include <asm-generic' $src >> $target
       else
          echo "#include <asm-generic/mman.h>" >> $target
       fi
    
       touch $real_target
       for m in $macros
       do
         if cat << EOF | gcc -Itools/arch/$arch/include -Itools/arch/$arch/include/uapi -Iinclude/ -Iinclude/uapi -E - | grep $m > /dev/null 2>&1
     #include <uapi/asm/mman.h.tmp>
     #include <uapi/linux/mman.h>
     $m
     EOF
       then
         echo "Fixing $m for $arch"
         echo "/* $m is undefined on $arch, fix it for perf */" >> $target
         if echo $m | grep '^MADV_' > /dev/null 2>&1
         then
           grep -h '#define[ \t]*'$m include/uapi/asm-generic/mman-common.h | sed 's/[ \t]*\/\*.*$//g' >> $target
         else
           echo "#define $m	0" >> $target
         fi
       fi
       done
    
       real_target=tools/arch/$arch/include/uapi/asm/mman.h
       echo '#ifndef '$guard > $real_target
       echo '#define '$guard >> $real_target
       cat $target | sed 's|asm-generic|uapi/asm-generic|g' >> $real_target
       echo '#endif' >> $real_target
       rm $target
       echo "$real_target"
     done
    
     exit 0
     # Following macros are extracted from:
     # tools/perf/trace/beauty/mmap.c
     #
     # start macro list
     MADV_DODUMP
     MADV_DOFORK
     MADV_DONTDUMP
     MADV_DONTFORK
     MADV_DONTNEED
     MADV_FREE
     MADV_HUGEPAGE
     MADV_HWPOISON
     MADV_MERGEABLE
     MADV_NOHUGEPAGE
     MADV_NORMAL
     MADV_RANDOM
     MADV_REMOVE
     MADV_SEQUENTIAL
     MADV_SOFT_OFFLINE
     MADV_UNMERGEABLE
     MADV_WILLNEED
     MAP_32BIT
     MAP_ANONYMOUS
     MAP_DENYWRITE
     MAP_EXECUTABLE
     MAP_FILE
     MAP_FIXED
     MAP_GROWSDOWN
     MAP_HUGETLB
     MAP_LOCKED
     MAP_NONBLOCK
     MAP_NORESERVE
     MAP_POPULATE
     MAP_PRIVATE
     MAP_SHARED
     MAP_STACK
     MAP_UNINITIALIZED
     MREMAP_FIXED
     MREMAP_MAYMOVE
     PROT_EXEC
     PROT_GROWSDOWN
     PROT_GROWSUP
     PROT_NONE
     PROT_READ
     PROT_SEM
     PROT_WRITE
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Tested-by: default avatarKim Phillips <kim.phillips@arm.com>
    Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Fixes: 277cf08f ("perf trace beauty mmap: Fix defines for non !x86_64")
    Link: http://lkml.kernel.org/r/1473850649-83389-3-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    f82b7746
mman.h 1.33 KB