On 07/01/2024 19:21, Andrew Morton wrote:
On Sun, 7 Jan 2024 17:16:41 +0800 Baoquan He <b...@redhat.com> wrote:
with GCC 13.2.1 and W=1, there's compiling warning like this:
kernel/panic.c: In function ?__warn?:
kernel/panic.c:676:17: warning: function ?__warn? might be a candidate for
?gnu_printf? format attribute [-Wsuggest-attribute=format]
676 | vprintk(args->fmt, args->args);
| ^~~~~~~
The normal __printf(x,y) adding can't fix it. So add workaround which
disables -Wsuggest-attribute=format to mute it.
...
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -666,8 +666,13 @@ void __warn(const char *file, int line, void *caller,
unsigned taint,
pr_warn("WARNING: CPU: %d PID: %d at %pS\n",
raw_smp_processor_id(), current->pid, caller);
+#pragma GCC diagnostic push
+#ifndef __clang__
+#pragma GCC diagnostic ignored "-Wsuggest-attribute=format"
+#endif
if (args)
vprintk(args->fmt, args->args);
+#pragma GCC diagnostic pop
print_modules();
__warn() clearly isn't such a candidate. I'm suspecting that gcc's
implementation of this warning is pretty crude. Is it a new thing in
gcc-13.2?
I suspect the warning is about vprintk(), which does seem a printf-like
function but something (early inlining?) may be messing up the context and GCC
warns about __warn(). This may be bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=28492
If vprintk() already has the format attribute, then the messed up function name
may be confusing GCC into warning again about it.
Best wishes,
Manuel.