linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fs: proc: move linux_proc_banner to where it is used
@ 2018-10-26 21:20 Rasmus Villemoes
  2018-10-27 19:47 ` Alexey Dobriyan
  0 siblings, 1 reply; 4+ messages in thread
From: Rasmus Villemoes @ 2018-10-26 21:20 UTC (permalink / raw)
  To: Alexey Dobriyan, Andrew Morton; +Cc: Kees Cook, linux-kernel, Rasmus Villemoes

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 <linux@rasmusvillemoes.dk>
---
 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 <generated/compile.h>
 #include <linux/fs.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
@@ -6,6 +7,11 @@
 #include <linux/seq_file.h>
 #include <linux/utsname.h>
 
+#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 <linux/cache.h>
 
 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
  2018-10-26 21:20 [PATCH] fs: proc: move linux_proc_banner to where it is used Rasmus Villemoes
@ 2018-10-27 19:47 ` Alexey Dobriyan
  2018-10-30  8:17   ` Rasmus Villemoes
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Dobriyan @ 2018-10-27 19:47 UTC (permalink / raw)
  To: Rasmus Villemoes; +Cc: Andrew Morton, Kees Cook, linux-kernel

On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote:
> +#include <generated/compile.h>

> +#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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
  2018-10-27 19:47 ` Alexey Dobriyan
@ 2018-10-30  8:17   ` Rasmus Villemoes
  2018-11-05 17:28     ` Masahiro Yamada
  0 siblings, 1 reply; 4+ messages in thread
From: Rasmus Villemoes @ 2018-10-30  8:17 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Andrew Morton, Kees Cook, linux-kernel, Masahiro Yamada, linux-kbuild

On 2018-10-27 21:47, Alexey Dobriyan wrote:
> On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote:
>> +#include <generated/compile.h>
> 
>> +#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
  CALL    scripts/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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] fs: proc: move linux_proc_banner to where it is used
  2018-10-30  8:17   ` Rasmus Villemoes
@ 2018-11-05 17:28     ` Masahiro Yamada
  0 siblings, 0 replies; 4+ messages in thread
From: Masahiro Yamada @ 2018-11-05 17:28 UTC (permalink / raw)
  To: Rasmus Villemoes
  Cc: Alexey Dobriyan, Andrew Morton, Kees Cook,
	Linux Kernel Mailing List, Linux Kbuild mailing list

On Tue, Oct 30, 2018 at 5:18 PM Rasmus Villemoes
<linux@rasmusvillemoes.dk> wrote:
>
> On 2018-10-27 21:47, Alexey Dobriyan wrote:
> > On Fri, Oct 26, 2018 at 11:20:34PM +0200, Rasmus Villemoes wrote:
> >> +#include <generated/compile.h>
> >
> >> +#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
>   CALL    scripts/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 <generated/compile.h> first,
you never know whether the .version should be incremented or not.



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-11-05 17:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-26 21:20 [PATCH] fs: proc: move linux_proc_banner to where it is used Rasmus Villemoes
2018-10-27 19:47 ` Alexey Dobriyan
2018-10-30  8:17   ` Rasmus Villemoes
2018-11-05 17:28     ` Masahiro Yamada

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).