[PATCH] fs: proc: move linux_proc_banner to where it is used
With -Wformat-literal, gcc complains fs/proc/version.c:11:16: warning: format not a string literal, argument types not checked [-Wformat-nonliteral] seq_printf(m, linux_proc_banner, linux_proc_banner is only used in this one place, so move the definition here, to allow the compiler to complain in the unlikely case one of the LINUX_* strings ended up containing a %. This also avoids compiling it in for !CONFIG_PROC_FS. Signed-off-by: Rasmus Villemoes --- fs/proc/version.c | 6 ++ include/linux/printk.h | 1 - init/version.c | 5 - 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/proc/version.c b/fs/proc/version.c index b449f186577f..40a33e1434d7 100644 --- a/fs/proc/version.c +++ b/fs/proc/version.c @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-2.0 +#include #include #include #include @@ -6,6 +7,11 @@ #include #include +#define linux_proc_banner \ + "%s version %s" \ + " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" \ + " (" LINUX_COMPILER ") %s\n" + static int version_proc_show(struct seq_file *m, void *v) { seq_printf(m, linux_proc_banner, diff --git a/include/linux/printk.h b/include/linux/printk.h index cf3eccfe1543..c7edf4398e4d 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -9,7 +9,6 @@ #include extern const char linux_banner[]; -extern const char linux_proc_banner[]; #define PRINTK_MAX_SINGLE_HEADER_LEN 2 diff --git a/init/version.c b/init/version.c index ef4012ec4375..ead5e21fa3a3 100644 --- a/init/version.c +++ b/init/version.c @@ -46,9 +46,4 @@ const char linux_banner[] = "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; -const char linux_proc_banner[] = - "%s version %s" - " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" - " (" LINUX_COMPILER ") %s\n"; - BUILD_SALT; -- 2.19.1.6.gbde171bbf5
Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote: > +#include > +#define linux_proc_banner \ > + "%s version %s" \ > + " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" \ > + " (" LINUX_COMPILER ") %s\n" Include doesn't work if compiling from scratch: rm -rf ../obj mkdir ../obj make O=../obj defconfig make O=../obj fs/proc/version.o CC fs/proc/version.o fs/proc/version.c:2:10: fatal error: generated/compile.h: No such file or directory
Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
On 2018-10-27 21:47, Alexey Dobriyan wrote: > On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote: >> +#include > >> +#define linux_proc_banner \ >> +"%s version %s" \ >> +" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" \ >> +" (" LINUX_COMPILER ") %s\n" > > Include doesn't work if compiling from scratch: Urgh, thanks. I assumed that all the include/generated/ stuff was always generated by the prepare steps in the top Makefile. But the logic for making compile.h is in init/Makefile. > rm -rf ../obj > mkdir ../obj > make O=../obj defconfig > make O=../obj fs/proc/version.o > > CC fs/proc/version.o > fs/proc/version.c:2:10: fatal error: generated/compile.h: No such file or > directory The same happens in current mainline for arch/x86/boot/version.o: $ make arch/x86/boot/version.o CALLscripts/checksyscalls.sh DESCEND objtool CC arch/x86/boot/version.o arch/x86/boot/version.c:17:31: fatal error: generated/compile.h: No such file or directory Cc kbuild: Wouldn't it be a little nicer creating generated/compile.h along with the other files in generated/, so that everybody can rely on them being there instead of having the logic for compile.h hidden away in init/Makefile and listing it as an explicit dependency? Or is there some reason compile.h is special? Rasmus
Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
On Tue, Oct 30, 2018 at 5:18 PM Rasmus Villemoes wrote: > > On 2018-10-27 21:47, Alexey Dobriyan wrote: > > On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote: > >> +#include > > > >> +#define linux_proc_banner \ > >> +"%s version %s" \ > >> +" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" \ > >> +" (" LINUX_COMPILER ") %s\n" > > > > Include doesn't work if compiling from scratch: > > Urgh, thanks. I assumed that all the include/generated/ stuff was always > generated by the prepare steps in the top Makefile. But the logic for > making compile.h is in init/Makefile. > > > rm -rf ../obj > > mkdir ../obj > > make O=../obj defconfig > > make O=../obj fs/proc/version.o > > > > CC fs/proc/version.o > > fs/proc/version.c:2:10: fatal error: generated/compile.h: No such file or > > directory > > The same happens in current mainline for arch/x86/boot/version.o: > > $ make arch/x86/boot/version.o > CALLscripts/checksyscalls.sh > DESCEND objtool > CC arch/x86/boot/version.o > arch/x86/boot/version.c:17:31: fatal error: generated/compile.h: No such > file or directory > > Cc kbuild: Wouldn't it be a little nicer creating generated/compile.h > along with the other files in generated/, so that everybody can rely on > them being there instead of having the logic for compile.h hidden away > in init/Makefile and listing it as an explicit dependency? Or is there > some reason compile.h is special? > > Rasmus > I think the basic idea is, the build version should not be incremented if you do incremental build without touching any source file. If you create/update first, you never know whether the .version should be incremented or not. -- Best Regards Masahiro Yamada