• Andrii Nakryiko's avatar
    selftests/bpf: Add SAN_CFLAGS param to selftests build to allow sanitizers · 02995dd4
    Andrii Nakryiko authored
    Add ability to specify extra compiler flags with SAN_CFLAGS for compilation of
    all user-space C files.  This allows to build all of selftest programs with,
    e.g., custom sanitizer flags, without requiring support for such sanitizers
    from anyone compiling selftest/bpf.
    
    As an example, to compile everything with AddressSanitizer, one would do:
    
      $ make clean && make SAN_CFLAGS="-fsanitize=address"
    
    For AddressSanitizer to work, one needs appropriate libasan shared library
    installed in the system, with version of libasan matching what GCC links
    against. E.g., GCC8 needs libasan5, while GCC7 uses libasan4.
    
    For CentOS 7, to build everything successfully one would need to:
      $ sudo yum install devtoolset-8-gcc devtoolset-libasan-devel
      $ scl enable devtoolset-8 bash # set up environment
    
    For Arch Linux to run selftests, one would need to install gcc-libs package to
    get libasan.so.5:
      $ sudo pacman -S gcc-libs
    
    N.B. EXTRA_CFLAGS name wasn't used, because it's also used by libbpf's
    Makefile and this causes few issues:
    1. default "-g -Wall" flags are overriden;
    2. compiling shared library with AddressSanitizer generates a bunch of symbols
       like: "_GLOBAL__sub_D_00099_0_btf_dump.c", "_GLOBAL__sub_D_00099_0_bpf.c",
       etc, which screws up versioned symbols check.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Cc: Julia Kartseva <hex@fb.com>
    Link: https://lore.kernel.org/bpf/20200429012111.277390-3-andriin@fb.com
    02995dd4
Makefile 14.2 KB