• Masahiro Yamada's avatar
    kbuild: provide reasonable defaults for tool coverage · 9c2d1328
    Masahiro Yamada authored
    The objtool, sanitizers (KASAN, UBSAN, etc.), and profilers (GCOV, etc.)
    are intended only for kernel space objects.
    
    For instance, the following are not kernel objects, and therefore should
    opt out of coverage:
    
      - vDSO
      - purgatory
      - bootloader (arch/*/boot/)
    
    However, to exclude these from coverage, you need to explicitly set
    OBJECT_FILES_NON_STNDARD=y, KASAN_SANITIZE=n, etc.
    
    Kbuild can achieve this without relying on such variables because
    objects not directly linked to vmlinux or modules are considered
    "non-standard objects".
    
    Detecting standard objects is straightforward:
    
      - objects added to obj-y or lib-y are linked to vmlinux
      - objects added to obj-m are linked to modules
    
    There are some exceptional Makefiles (e.g., arch/s390/boot/Makefile,
    arch/xtensa/boot/lib/Makefile) that use obj-y or lib-y for non-kernel
    space objects, but they can be fixed later if necessary.
    
    Going forward, objects that are not listed in obj-y, lib-y, or obj-m
    will opt out of objtool, sanitizers, and profilers by default.
    
    You can still override the Kbuild decision by explicitly specifying
    OBJECT_FILES_NON_STANDARD, KASAN_SANITIZE, etc. but most of such Make
    variables can be removed.
    
    The next commit will clean up redundant variables.
    
    Note:
    
    This commit changes the coverage for some objects:
    
      - exclude .vmlinux.export.o from UBSAN, KCOV
      - exclude arch/csky/kernel/vdso/vgettimeofday.o from UBSAN
      - exclude arch/parisc/kernel/vdso32/vdso32.so from UBSAN
      - exclude arch/parisc/kernel/vdso64/vdso64.so from UBSAN
      - exclude arch/x86/um/vdso/um_vdso.o from UBSAN
      - exclude drivers/misc/lkdtm/rodata.o from UBSAN, KCOV
      - exclude init/version-timestamp.o from UBSAN, KCOV
      - exclude lib/test_fortify/*.o from all santizers and profilers
    
    I believe these are positive effects.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Tested-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
    9c2d1328
Makefile.build 17.4 KB