• Tiezhu Yang's avatar
    perf build: Fix error message when asking for -fsanitize=address without required libraries · 6a1515c9
    Tiezhu Yang authored
    When build perf with ASan or UBSan, if libasan or libubsan can not find,
    the feature-glibc is 0 and there exists the following error log which is
    wrong, because we can find gnu/libc-version.h in /usr/include,
    glibc-devel is also installed.
    
      [yangtiezhu@linux perf]$ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address'
        BUILD:   Doing 'make -j4' parallel build
        HOSTCC   fixdep.o
        HOSTLD   fixdep-in.o
        LINK     fixdep
      <stdin>:1:0: warning: -fsanitize=address and -fsanitize=kernel-address are not supported for this target
      <stdin>:1:0: warning: -fsanitize=address not supported for this target
    
      Auto-detecting system features:
      ...                         dwarf: [ OFF ]
      ...            dwarf_getlocations: [ OFF ]
      ...                         glibc: [ OFF ]
      ...                          gtk2: [ OFF ]
      ...                      libaudit: [ OFF ]
      ...                        libbfd: [ OFF ]
      ...                        libcap: [ OFF ]
      ...                        libelf: [ OFF ]
      ...                       libnuma: [ OFF ]
      ...        numa_num_possible_cpus: [ OFF ]
      ...                       libperl: [ OFF ]
      ...                     libpython: [ OFF ]
      ...                     libcrypto: [ OFF ]
      ...                     libunwind: [ OFF ]
      ...            libdw-dwarf-unwind: [ OFF ]
      ...                          zlib: [ OFF ]
      ...                          lzma: [ OFF ]
      ...                     get_cpuid: [ OFF ]
      ...                           bpf: [ OFF ]
      ...                        libaio: [ OFF ]
      ...                       libzstd: [ OFF ]
      ...        disassembler-four-args: [ OFF ]
    
      Makefile.config:393: *** No gnu/libc-version.h found, please install glibc-dev[el].  Stop.
      Makefile.perf:224: recipe for target 'sub-make' failed
      make[1]: *** [sub-make] Error 2
      Makefile:69: recipe for target 'all' failed
      make: *** [all] Error 2
      [yangtiezhu@linux perf]$ ls /usr/include/gnu/libc-version.h
      /usr/include/gnu/libc-version.h
    
    After install libasan and libubsan, the feature-glibc is 1 and the build
    process is success, so the cause is related with libasan or libubsan, we
    should check them and print an error log to reflect the reality.
    
    Committer testing:
    
      $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf
      $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address' O=/tmp/build/perf -C tools/perf/ install-bin
      make: Entering directory '/home/acme/git/perf/tools/perf'
        BUILD:   Doing 'make -j12' parallel build
        HOSTCC   /tmp/build/perf/fixdep.o
        HOSTLD   /tmp/build/perf/fixdep-in.o
        LINK     /tmp/build/perf/fixdep
    
      Auto-detecting system features:
      ...                         dwarf: [ OFF ]
      ...            dwarf_getlocations: [ OFF ]
      ...                         glibc: [ OFF ]
      ...                          gtk2: [ OFF ]
      ...                        libbfd: [ OFF ]
      ...                        libcap: [ OFF ]
      ...                        libelf: [ OFF ]
      ...                       libnuma: [ OFF ]
      ...        numa_num_possible_cpus: [ OFF ]
      ...                       libperl: [ OFF ]
      ...                     libpython: [ OFF ]
      ...                     libcrypto: [ OFF ]
      ...                     libunwind: [ OFF ]
      ...            libdw-dwarf-unwind: [ OFF ]
      ...                          zlib: [ OFF ]
      ...                          lzma: [ OFF ]
      ...                     get_cpuid: [ OFF ]
      ...                           bpf: [ OFF ]
      ...                        libaio: [ OFF ]
      ...                       libzstd: [ OFF ]
      ...        disassembler-four-args: [ OFF ]
    
      Makefile.config:401: *** No libasan found, please install libasan.  Stop.
      make[1]: *** [Makefile.perf:231: sub-make] Error 2
      make: *** [Makefile:70: all] Error 2
      make: Leaving directory '/home/acme/git/perf/tools/perf'
      $
      $
      $ sudo dnf install libasan
      <SNIP>
      Installed:
        libasan-9.3.1-2.fc31.x86_64
      $
      $
      $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address' O=/tmp/build/perf -C tools/perf/ install-bin
      make: Entering directory '/home/acme/git/perf/tools/perf'
        BUILD:   Doing 'make -j12' parallel build
    
      Auto-detecting system features:
      ...                         dwarf: [ on  ]
      ...            dwarf_getlocations: [ on  ]
      ...                         glibc: [ on  ]
      ...                          gtk2: [ on  ]
      ...                        libbfd: [ on  ]
      ...                        libcap: [ on  ]
      ...                        libelf: [ on  ]
      ...                       libnuma: [ on  ]
      ...        numa_num_possible_cpus: [ on  ]
      ...                       libperl: [ on  ]
      ...                     libpython: [ on  ]
      ...                     libcrypto: [ on  ]
      ...                     libunwind: [ on  ]
      ...            libdw-dwarf-unwind: [ on  ]
      ...                          zlib: [ on  ]
      ...                          lzma: [ on  ]
      ...                     get_cpuid: [ on  ]
      ...                           bpf: [ on  ]
      ...                        libaio: [ on  ]
      ...                       libzstd: [ on  ]
      ...        disassembler-four-args: [ on  ]
       <SNIP>
        CC       /tmp/build/perf/util/pmu-flex.o
        FLEX     /tmp/build/perf/util/expr-flex.c
        CC       /tmp/build/perf/util/expr-bison.o
        CC       /tmp/build/perf/util/expr.o
        CC       /tmp/build/perf/util/expr-flex.o
        CC       /tmp/build/perf/util/parse-events-flex.o
        CC       /tmp/build/perf/util/parse-events.o
        LD       /tmp/build/perf/util/intel-pt-decoder/perf-in.o
        LD       /tmp/build/perf/util/perf-in.o
        LD       /tmp/build/perf/perf-in.o
        LINK     /tmp/build/perf/perf
      <SNIP>
        INSTALL  python-scripts
        INSTALL  perf_completion-script
        INSTALL  perf-tip
      make: Leaving directory '/home/acme/git/perf/tools/perf'
      $ ldd ~/bin/perf | grep asan
      	libasan.so.5 => /lib64/libasan.so.5 (0x00007f0904164000)
      $
    
    And if we rebuild without -fsanitize-address:
    
      $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf
      $ make O=/tmp/build/perf -C tools/perf/ install-bin
      make: Entering directory '/home/acme/git/perf/tools/perf'
        BUILD:   Doing 'make -j12' parallel build
        HOSTCC   /tmp/build/perf/fixdep.o
        HOSTLD   /tmp/build/perf/fixdep-in.o
        LINK     /tmp/build/perf/fixdep
    
      Auto-detecting system features:
      ...                         dwarf: [ on  ]
      ...            dwarf_getlocations: [ on  ]
      ...                         glibc: [ on  ]
      ...                          gtk2: [ on  ]
      ...                        libbfd: [ on  ]
      ...                        libcap: [ on  ]
      ...                        libelf: [ on  ]
      ...                       libnuma: [ on  ]
      ...        numa_num_possible_cpus: [ on  ]
      ...                       libperl: [ on  ]
      ...                     libpython: [ on  ]
      ...                     libcrypto: [ on  ]
      ...                     libunwind: [ on  ]
      ...            libdw-dwarf-unwind: [ on  ]
      ...                          zlib: [ on  ]
      ...                          lzma: [ on  ]
      ...                     get_cpuid: [ on  ]
      ...                           bpf: [ on  ]
      ...                        libaio: [ on  ]
      ...                       libzstd: [ on  ]
      ...        disassembler-four-args: [ on  ]
    
        GEN      /tmp/build/perf/common-cmds.h
        CC       /tmp/build/perf/exec-cmd.o
      <SNIP>
        INSTALL  perf_completion-script
        INSTALL  perf-tip
      make: Leaving directory '/home/acme/git/perf/tools/perf'
      $ ldd ~/bin/perf | grep asan
      $
    Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: tiezhu yang <yangtiezhu@loongson.cn>
    Cc: xuefeng li <lixuefeng@loongson.cn>
    Link: http://lore.kernel.org/lkml/1592445961-28044-1-git-send-email-yangtiezhu@loongson.cnSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6a1515c9
Makefile.config 34.1 KB