Skip to content
  • Masahiro Yamada's avatar
    kcov: test compiler capability in Kconfig and correct dependency · 5aadfdeb
    Masahiro Yamada authored
    
    
    As Documentation/kbuild/kconfig-language.txt notes, 'select' should be
    be used with care - it forces a lower limit of another symbol, ignoring
    the dependency.  Currently, KCOV can select GCC_PLUGINS even if arch
    does not select HAVE_GCC_PLUGINS.  This could cause the unmet direct
    dependency.
    
    Now that Kconfig can test compiler capability, let's handle this in a
    more sophisticated way.
    
    There are two ways to enable KCOV; use the compiler that natively
    supports -fsanitize-coverage=trace-pc, or build the SANCOV plugin if
    the compiler has ability to build GCC plugins.  Hence, the correct
    dependency for KCOV is:
    
      depends on CC_HAS_SANCOV_TRACE_PC || GCC_PLUGINS
    
    You do not need to build the SANCOV plugin if the compiler already
    supports -fsanitize-coverage=trace-pc.  Hence, the select should be:
    
      select GCC_PLUGIN_SANCOV if !CC_HAS_SANCOV_TRACE_PC
    
    With this, GCC_PLUGIN_SANCOV is selected only when necessary, so
    scripts/Makefile.gcc-plugins can be cleaner.
    
    I also cleaned up Kconfig and scripts/Makefile.kcov as well.
    
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    5aadfdeb