• Arnd Bergmann's avatar
    kcov: add prototypes for helper functions · e0ddec73
    Arnd Bergmann authored
    A number of internal functions in kcov are only called from generated code
    and don't technically need a declaration, but 'make W=1' warns about
    global symbols without a prototype:
    
    kernel/kcov.c:199:14: error: no previous prototype for '__sanitizer_cov_trace_pc' [-Werror=missing-prototypes]
    kernel/kcov.c:264:14: error: no previous prototype for '__sanitizer_cov_trace_cmp1' [-Werror=missing-prototypes]
    kernel/kcov.c:270:14: error: no previous prototype for '__sanitizer_cov_trace_cmp2' [-Werror=missing-prototypes]
    kernel/kcov.c:276:14: error: no previous prototype for '__sanitizer_cov_trace_cmp4' [-Werror=missing-prototypes]
    kernel/kcov.c:282:14: error: no previous prototype for '__sanitizer_cov_trace_cmp8' [-Werror=missing-prototypes]
    kernel/kcov.c:288:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp1' [-Werror=missing-prototypes]
    kernel/kcov.c:295:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp2' [-Werror=missing-prototypes]
    kernel/kcov.c:302:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp4' [-Werror=missing-prototypes]
    kernel/kcov.c:309:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp8' [-Werror=missing-prototypes]
    kernel/kcov.c:316:14: error: no previous prototype for '__sanitizer_cov_trace_switch' [-Werror=missing-prototypes]
    
    Adding prototypes for these in a header solves that problem, but now there
    is a mismatch between the built-in type and the prototype on 64-bit
    architectures because they expect some functions to take a 64-bit
    'unsigned long' argument rather than an 'unsigned long long' u64 type:
    
    include/linux/kcov.h:84:6: error: conflicting types for built-in function '__sanitizer_cov_trace_switch'; expected 'void(long long unsigned int,  void *)' [-Werror=builtin-declaration-mismatch]
       84 | void __sanitizer_cov_trace_switch(u64 val, u64 *cases);
          |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Avoid this as well with a custom type definition.
    
    Link: https://lkml.kernel.org/r/20230517124944.929997-1-arnd@kernel.orgSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Rong Tao <rongtao@cestc.cn>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    e0ddec73
kcov.c 29.2 KB