• A
    tools include: Do not use poison with C++ · 6ae8eefc
    Arnaldo Carvalho de Melo 提交于
    LIST_POISON[12] are used to initialize list_head and hlist_node
    pointers, and do void pointer arithmetic, which C++ doesn't like, so, to
    avoid drifting from the kernel by introducing some HLIST_POISON to do
    away with void pointer math, just make those poisoned pointers be NULL
    when building it with a C++ compiler.
    
    Noticed with:
    
      $ make LLVM_CONFIG=/usr/bin/llvm-config-3.9 LIBCLANGLLVM=1
        CXX      util/c++/clang.o
        CXX	   util/c++/clang-test.o
      In file included from /home/lizj/linux/tools/include/linux/list.h:5:0,
                       from /home/lizj/linux/tools/perf/util/namespaces.h:13,
                       from /home/lizj/linux/tools/perf/util/util.h:15,
                       from /home/lizj/linux/tools/perf/util/util-cxx.h:20,
                       from util/c++/clang-c.h:5,
                       from util/c++/clang-test.cpp:2:
      /home/lizj/linux/tools/include/linux/list.h: In function ‘void list_del(list_head*)’:
      /home/lizj/linux/tools/include/linux/poison.h:14:31: error: pointer of type ‘void *’ used in arithmetic [-Werror=pointer-arith]
       # define POISON_POINTER_DELTA 0
                                     ^
      /home/lizj/linux/tools/include/linux/poison.h:22:41: note: in expansion of macro ‘POISON_POINTER_DELTA’
       #define LIST_POISON1  ((void *) 0x100 + POISON_POINTER_DELTA)
                                               ^
      /home/lizj/linux/tools/include/linux/list.h:107:16: note: in expansion of macro ‘LIST_POISON1’
        entry->next = LIST_POISON1;
                      ^
      In file included from /home/lizj/linux/tools/perf/util/namespaces.h:13:0,
                       from /home/lizj/linux/tools/perf/util/util.h:15,
                       from /home/lizj/linux/tools/perf/util/util-cxx.h:20,
                       from util/c++/clang-c.h:5,
                       from util/c++/clang-test.cpp:2:
      /home/lizj/linux/tools/include/linux/list.h:107:14: error: invalid conversion from ‘void*’ to ‘list_head*’ [-fpermissive]
    Reported-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Philip Li <philip.li@intel.com>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/n/tip-m5ei2o0mjshucbr28baf5lqz@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    6ae8eefc
poison.h 2.6 KB