From: Peter Oberparleiter <oberpar@linux.ibm.com>
To: Arnd Bergmann <arnd@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] gcov: add prototypes for internal functions
Date: Wed, 21 Jun 2023 14:28:18 +0200 [thread overview]
Message-ID: <0820010f-e9dc-779d-7924-49c7df446bce@linux.ibm.com> (raw)
In-Reply-To: <20230517125011.930274-1-arnd@kernel.org>
On 17.05.2023 14:50, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> gcov uses global functions that are called from generated code,
> but these have no prototype in a header, which causes a W=1
> build warning:
Sorry for the late reply. I can confirm that the problem exists, both
with GCC and Clang compiles. I see some issues with your fix though:
1. It contains extraneous prototypes that are duplicates of existing
prototypes in gcov.h (everything that doesn't start with __gcov or llvm)
2. Adding the list of prototypes, though not actually needed by kernel
source code, will require updating gcov.h if new calls from generated
code are introduced - this is extra work I'd like to avoid if possible
Because this situation is special, I would rather prefer to silence
these warnings by removing the associated compiler flags
(-Wmissing-prototypes and I think also -Wmissing-declarations) for
gcc_base.c and clang.c using CFLAGS_REMOVE.
If you agree, do you want to provide a v2 along these lines?
[...]
> --- a/kernel/gcov/gcov.h
> +++ b/kernel/gcov/gcov.h
> @@ -82,4 +82,34 @@ extern const struct gcov_link gcov_link[];
> extern int gcov_events_enabled;
> extern struct mutex gcov_lock;
>
FYI - these are defined in gcc_base.c and called only by GCC generated code:
> +void __gcov_init(struct gcov_info *info);
> +void __gcov_flush(void);
> +void __gcov_merge_add(gcov_type *counters, unsigned int n_counters);
> +void __gcov_merge_single(gcov_type *counters, unsigned int n_counters);
> +void __gcov_merge_delta(gcov_type *counters, unsigned int n_counters);
> +void __gcov_merge_ior(gcov_type *counters, unsigned int n_counters);
> +void __gcov_merge_time_profile(gcov_type *counters, unsigned int n_counters);
> +void __gcov_merge_icall_topn(gcov_type *counters, unsigned int n_counters);
> +void __gcov_exit(void);
These are defined in both gcc_4_7.c and clang.c and used by other code
in kernel/gcov/*:
> +size_t convert_to_gcda(char *buffer, struct gcov_info *info);
> +void gcov_info_add(struct gcov_info *dst, struct gcov_info *src);
> +struct gcov_info *gcov_info_dup(struct gcov_info *info);
> +const char *gcov_info_filename(struct gcov_info *info);
> +void gcov_info_free(struct gcov_info *info);
> +int gcov_info_is_compatible(struct gcov_info *info1, struct gcov_info *info2);
> +void gcov_info_link(struct gcov_info *info);
> +struct gcov_info *gcov_info_next(struct gcov_info *info);
> +void gcov_info_reset(struct gcov_info *info);
> +void gcov_info_unlink(struct gcov_info *prev, struct gcov_info *info);
> +unsigned int gcov_info_version(struct gcov_info *info);
> +bool gcov_info_within_module(struct gcov_info *info, struct module *mod);
And these are defined in clang.c and called only by Clang generated code:
> +void llvm_gcda_emit_arcs(u32 num_counters, u64 *counters);
> +void llvm_gcda_emit_function(u32 ident, u32 func_checksum, u32 cfg_checksum);
> +void llvm_gcda_end_file(void);
> +void llvm_gcda_start_file(const char *orig_filename, u32 version, u32 checksum);
> +void llvm_gcda_summary_info(void);
> +typedef void (*llvm_gcov_callback)(void);
> +void llvm_gcov_init(llvm_gcov_callback writeout, llvm_gcov_callback flush);
--
Peter Oberparleiter
Linux on IBM Z Development - IBM Germany R&D
prev parent reply other threads:[~2023-06-21 12:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-17 12:50 [PATCH] gcov: add prototypes for internal functions Arnd Bergmann
2023-06-21 12:28 ` Peter Oberparleiter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0820010f-e9dc-779d-7924-49c7df446bce@linux.ibm.com \
--to=oberpar@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.