linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] x86: stack alignment for boot code and clang
@ 2017-06-13 23:08 Matthias Kaehlcke
  2017-06-13 23:08 ` [PATCH v2 1/4] kbuild: Add cc-option-raw macro Matthias Kaehlcke
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-13 23:08 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek
  Cc: x86, linux-kbuild, linux-kernel, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard.Rosenkranzer, Peter Foley, Behan Webster,
	Douglas Anderson, Matthias Kaehlcke

This series fixes an issue with the stack of the x86 boot code not
being aligned as intended. Further it adapts the Makefile to account
for the fact that clang uses a different option to configure the
stack alignment than gcc (-mstack-alignment=N vs
-mpreferred-stack-boundary=N)

Collaterally the series adds the new kbuild macros cc-option-raw and
hostcc-option, it also reworks cc-option to make use of cc-option-raw.

Matthias Kaehlcke (4):
  kbuild: Add cc-option-raw macro
  kbuild: Add hostcc-option macro
  x86/build: Use cc-option-raw for boot code compiler options
  x86/build: Specify stack alignment for clang

 Makefile               |  2 +-
 arch/x86/Makefile      | 33 +++++++++++++++++++++++++--------
 scripts/Kbuild.include | 13 +++++++++++--
 3 files changed, 37 insertions(+), 11 deletions(-)

-- 
2.13.1.518.g3df882009-goog

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

* [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
@ 2017-06-13 23:08 ` Matthias Kaehlcke
  2017-06-14  1:27   ` Masahiro Yamada
  2017-06-13 23:08 ` [PATCH v2 2/4] kbuild: Add hostcc-option macro Matthias Kaehlcke
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-13 23:08 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek
  Cc: x86, linux-kbuild, linux-kernel, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard.Rosenkranzer, Peter Foley, Behan Webster,
	Douglas Anderson, Matthias Kaehlcke

cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
whether an option is supported or not. This is fine for options used to
build the kernel itself, however some components like the x86 boot code
use a different set of flags.

Add the new macro cc-option-raw which serves the same purpose as
cc-option but has additional parameters. One parameter is the compiler
with which the check should be performed, the other the compiler options
to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
macros like hostcc-option to be implemented on top of cc-option-raw.

Also rework cc-option to make use of cc-option-raw.

Suggested-by: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
Changes in v2:
- Changed macro name from Add cc-option-no-kbuild to cc-option-raw
- Added compiler as parameter to the macro
- Reworked cc-option to make use of cc-option-raw
- Updated commit message

 scripts/Kbuild.include | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 61f87a99bf0a..6dd0d1a921d6 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -108,6 +108,11 @@ as-option = $(call try-run,\
 as-instr = $(call try-run,\
 	printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
 
+# cc-option-raw
+# Usage: MY_CFLAGS += $(call cc-option-raw,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
+cc-option-raw = $(call try-run,\
+	$(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4))
+
 # Do not attempt to build with gcc plugins during cc-option tests.
 # (And this uses delayed resolution so the flags will be up to date.)
 CC_OPTION_CFLAGS = $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS))
@@ -115,8 +120,8 @@ CC_OPTION_CFLAGS = $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS))
 # cc-option
 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
 
-cc-option = $(call try-run,\
-	$(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
+cc-option = $(call cc-option-raw, $(CC), $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS),\
+	$(1), $(2))
 
 # cc-option-yn
 # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
-- 
2.13.1.518.g3df882009-goog

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

* [PATCH v2 2/4] kbuild: Add hostcc-option macro
  2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
  2017-06-13 23:08 ` [PATCH v2 1/4] kbuild: Add cc-option-raw macro Matthias Kaehlcke
@ 2017-06-13 23:08 ` Matthias Kaehlcke
  2017-06-14  1:28   ` Masahiro Yamada
  2017-06-14  7:26   ` Arnd Bergmann
  2017-06-13 23:08 ` [PATCH v2 3/4] x86/build: Use cc-option-raw for boot code compiler options Matthias Kaehlcke
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-13 23:08 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek
  Cc: x86, linux-kbuild, linux-kernel, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard.Rosenkranzer, Peter Foley, Behan Webster,
	Douglas Anderson, Matthias Kaehlcke

hostcc-option is equivalent to cc-option, but uses the host compiler
and HOSTCFLAGS. Change HOSTCFLAGS to a simple expanded variable to
allow for HOSTCFLAGS += $(call hostcc-option, ...).

Suggested-by: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
Changes in v2:
- Patch added in v2

 Makefile               | 2 +-
 scripts/Kbuild.include | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 83f6d9972cab..b234bba6d652 100644
--- a/Makefile
+++ b/Makefile
@@ -303,7 +303,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
 
 HOSTCC       = gcc
 HOSTCXX      = g++
-HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
+HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
 HOSTCXXFLAGS = -O2
 
 ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 6dd0d1a921d6..4965ed92fc1e 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -123,6 +123,10 @@ CC_OPTION_CFLAGS = $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS))
 cc-option = $(call cc-option-raw, $(CC), $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS),\
 	$(1), $(2))
 
+# hostcc-option
+# Usage: HOSTCFLAGS += $(call hostcc-option, -fno-delete-null-pointer-checks,)
+hostcc-option = $(call cc-option-raw, $(HOSTCC), $(HOSTCFLAGS), $(1), $(2))
+
 # cc-option-yn
 # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
 cc-option-yn = $(call try-run,\
-- 
2.13.1.518.g3df882009-goog

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

* [PATCH v2 3/4] x86/build: Use cc-option-raw for boot code compiler options
  2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
  2017-06-13 23:08 ` [PATCH v2 1/4] kbuild: Add cc-option-raw macro Matthias Kaehlcke
  2017-06-13 23:08 ` [PATCH v2 2/4] kbuild: Add hostcc-option macro Matthias Kaehlcke
@ 2017-06-13 23:08 ` Matthias Kaehlcke
  2017-06-13 23:08 ` [PATCH v2 4/4] x86/build: Specify stack alignment for clang Matthias Kaehlcke
  2017-06-14  1:30 ` [PATCH v2 0/4] x86: stack alignment for boot code and clang Masahiro Yamada
  4 siblings, 0 replies; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-13 23:08 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek
  Cc: x86, linux-kbuild, linux-kernel, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard.Rosenkranzer, Peter Foley, Behan Webster,
	Douglas Anderson, Matthias Kaehlcke

cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when checking if a
compiler option is available. These flags aren't used to build the boot
code, in consequence cc-option can yield wrong results. For example
-mpreferred-stack-boundary=2 is never set with a 64 bit compiler,
since the setting is only valid for 16 and 32 bit binaries. This
is also the case for 32 bit kernel builds, because the option -m32 is
added to KBUILD_CFLAGS after the assignment of REALMODE_CFLAGS.

Use cc-option-raw instead of cc-option for the boot mode options.
The macro receives the compiler options as parameter instead of using
KBUILD_C*FLAGS. For the boot code we pass REALMODE_CFLAGS.

Also use separate statements for the cc-option-raw checks instead
of performing them in the initial assignment of REALMODE_CFLAGS since
the variable is an input of the macro.

Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
Changes in v2:
- Adapted to use kbuild macro cc-option-raw instead of cc-option-no-kbuild

 arch/x86/Makefile | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index bf240b920473..6d3ae4b20a5b 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -24,10 +24,11 @@ REALMODE_CFLAGS	:= $(M16_CFLAGS) -g -Os -D__KERNEL__ \
 		   -DDISABLE_BRANCH_PROFILING \
 		   -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
 		   -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
-		   -mno-mmx -mno-sse \
-		   $(call cc-option, -ffreestanding) \
-		   $(call cc-option, -fno-stack-protector) \
-		   $(call cc-option, -mpreferred-stack-boundary=2)
+		   -mno-mmx -mno-sse
+
+REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -ffreestanding)
+REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector)
+REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -mpreferred-stack-boundary=2)
 export REALMODE_CFLAGS
 
 # BITS is used as extension for files which are available in a 32 bit
-- 
2.13.1.518.g3df882009-goog

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

* [PATCH v2 4/4] x86/build: Specify stack alignment for clang
  2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
                   ` (2 preceding siblings ...)
  2017-06-13 23:08 ` [PATCH v2 3/4] x86/build: Use cc-option-raw for boot code compiler options Matthias Kaehlcke
@ 2017-06-13 23:08 ` Matthias Kaehlcke
  2017-06-14  1:30 ` [PATCH v2 0/4] x86: stack alignment for boot code and clang Masahiro Yamada
  4 siblings, 0 replies; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-13 23:08 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek
  Cc: x86, linux-kbuild, linux-kernel, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard.Rosenkranzer, Peter Foley, Behan Webster,
	Douglas Anderson, Matthias Kaehlcke

For gcc stack alignment is configured with -mpreferred-stack-boundary=N,
clang has the option -mstack-alignment=N for that purpose. Use the same
alignment as with gcc.

If the alignment is not specified clang assumes an alignment of
16 bytes, as required by the standard ABI. However as mentioned in
d9b0cde91c60 ("x86-64, gcc: Use -mpreferred-stack-boundary=3 if
supported") the standard kernel entry on x86-64 leaves the stack
on an 8-byte boundary, as a consequence clang will keep the stack
misaligned.

Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
Changes in v2:
- Changed option name to cc_stack_align_opt
- Updated comments about stack alignment

 arch/x86/Makefile | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 6d3ae4b20a5b..9c3d13999dd3 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -11,6 +11,14 @@ else
         KBUILD_DEFCONFIG := $(ARCH)_defconfig
 endif
 
+# Handle different option names for specifying stack alignment with gcc and
+# clang.
+ifeq ($(cc-name),clang)
+	cc_stack_align_opt := -mstack-alignment
+else
+	cc_stack_align_opt := -mpreferred-stack-boundary
+endif
+
 # How to compile the 16-bit code.  Note we always compile for -march=i386;
 # that way we can complain to the user if the CPU is insufficient.
 #
@@ -28,7 +36,7 @@ REALMODE_CFLAGS	:= $(M16_CFLAGS) -g -Os -D__KERNEL__ \
 
 REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -ffreestanding)
 REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector)
-REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), -mpreferred-stack-boundary=2)
+REALMODE_CFLAGS += $(call cc-option-raw, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align_opt)=2)
 export REALMODE_CFLAGS
 
 # BITS is used as extension for files which are available in a 32 bit
@@ -65,8 +73,10 @@ ifeq ($(CONFIG_X86_32),y)
         # with nonstandard options
         KBUILD_CFLAGS += -fno-pic
 
-        # prevent gcc from keeping the stack 16 byte aligned
-        KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2)
+        # Align the stack to the register width instead of using the default
+        # alignment of 16 bytes. This reduces stack usage and the number of
+        # alignment instructions.
+        KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align_opt)=2)
 
         # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
         # a lot more stack due to the lack of sharing of stacklots:
@@ -98,8 +108,14 @@ else
         KBUILD_CFLAGS += $(call cc-option,-mno-80387)
         KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)
 
-	# Use -mpreferred-stack-boundary=3 if supported.
-	KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
+        # By default gcc and clang use a stack alignment of 16 bytes for x86.
+        # However the standard kernel entry on x86-64 leaves the stack on an
+        # 8-byte boundary. If the compiler isn't informed about the actual
+        # alignment it will generate extra alignment instructions for the
+        # default alignment which keep the stack *mis*aligned.
+        # Furthermore an alignment to the register width reduces stack usage
+        # and the number of alignment instructions.
+        KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align_opt)=3)
 
 	# Use -mskip-rax-setup if supported.
 	KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
-- 
2.13.1.518.g3df882009-goog

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

* Re: [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-13 23:08 ` [PATCH v2 1/4] kbuild: Add cc-option-raw macro Matthias Kaehlcke
@ 2017-06-14  1:27   ` Masahiro Yamada
  2017-06-14  7:31     ` Arnd Bergmann
  0 siblings, 1 reply; 14+ messages in thread
From: Masahiro Yamada @ 2017-06-14  1:27 UTC (permalink / raw)
  To: Matthias Kaehlcke
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Michal Marek, X86 ML, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
> whether an option is supported or not. This is fine for options used to
> build the kernel itself, however some components like the x86 boot code
> use a different set of flags.
>
> Add the new macro cc-option-raw which serves the same purpose as
> cc-option but has additional parameters. One parameter is the compiler
> with which the check should be performed, the other the compiler options
> to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
> macros like hostcc-option to be implemented on top of cc-option-raw.
>
> Also rework cc-option to make use of cc-option-raw.
>
> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
> Changes in v2:
> - Changed macro name from Add cc-option-no-kbuild to cc-option-raw
> - Added compiler as parameter to the macro
> - Reworked cc-option to make use of cc-option-raw
> - Updated commit message
>
>  scripts/Kbuild.include | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>

Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
(if nothing better pops up)

-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v2 2/4] kbuild: Add hostcc-option macro
  2017-06-13 23:08 ` [PATCH v2 2/4] kbuild: Add hostcc-option macro Matthias Kaehlcke
@ 2017-06-14  1:28   ` Masahiro Yamada
  2017-06-14  7:26   ` Arnd Bergmann
  1 sibling, 0 replies; 14+ messages in thread
From: Masahiro Yamada @ 2017-06-14  1:28 UTC (permalink / raw)
  To: Matthias Kaehlcke
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Michal Marek, X86 ML, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> hostcc-option is equivalent to cc-option, but uses the host compiler
> and HOSTCFLAGS. Change HOSTCFLAGS to a simple expanded variable to
> allow for HOSTCFLAGS += $(call hostcc-option, ...).
>
> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---

Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>

-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v2 0/4] x86: stack alignment for boot code and clang
  2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
                   ` (3 preceding siblings ...)
  2017-06-13 23:08 ` [PATCH v2 4/4] x86/build: Specify stack alignment for clang Matthias Kaehlcke
@ 2017-06-14  1:30 ` Masahiro Yamada
  4 siblings, 0 replies; 14+ messages in thread
From: Masahiro Yamada @ 2017-06-14  1:30 UTC (permalink / raw)
  To: Matthias Kaehlcke
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Michal Marek, X86 ML, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook, Arnd Bergmann,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> This series fixes an issue with the stack of the x86 boot code not
> being aligned as intended. Further it adapts the Makefile to account
> for the fact that clang uses a different option to configure the
> stack alignment than gcc (-mstack-alignment=N vs
> -mpreferred-stack-boundary=N)
>
> Collaterally the series adds the new kbuild macros cc-option-raw and
> hostcc-option, it also reworks cc-option to make use of cc-option-raw.
>
> Matthias Kaehlcke (4):
>   kbuild: Add cc-option-raw macro
>   kbuild: Add hostcc-option macro
>   x86/build: Use cc-option-raw for boot code compiler options
>   x86/build: Specify stack alignment for clang
>
>  Makefile               |  2 +-
>  arch/x86/Makefile      | 33 +++++++++++++++++++++++++--------
>  scripts/Kbuild.include | 13 +++++++++++--
>  3 files changed, 37 insertions(+), 11 deletions(-)


I gave Acked-by to 1/4 and 2/4
so that the whole series can go to x86 tree.

Thanks!

-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v2 2/4] kbuild: Add hostcc-option macro
  2017-06-13 23:08 ` [PATCH v2 2/4] kbuild: Add hostcc-option macro Matthias Kaehlcke
  2017-06-14  1:28   ` Masahiro Yamada
@ 2017-06-14  7:26   ` Arnd Bergmann
  2017-06-14  7:40     ` Masahiro Yamada
  1 sibling, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2017-06-14  7:26 UTC (permalink / raw)
  To: Matthias Kaehlcke
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, H . J . Lu,
	David Woodhouse, Masahiro Yamada, Michal Marek,
	the arch/x86 maintainers, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

On Wed, Jun 14, 2017 at 1:08 AM, Matthias Kaehlcke <mka@chromium.org> wrote:
> hostcc-option is equivalent to cc-option, but uses the host compiler
> and HOSTCFLAGS. Change HOSTCFLAGS to a simple expanded variable to
> allow for HOSTCFLAGS += $(call hostcc-option, ...).
>
> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>

Actually, we already have a hostcc-option macro. What I meant with my suggestion
was that we could redefine the existing one using cc-option-raw.

I checked again now and found that while this was added in 2016 by
Emese Revfy, we apparently don't have any users of the helper in the
kernel.

      Arnd

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

* Re: [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-14  1:27   ` Masahiro Yamada
@ 2017-06-14  7:31     ` Arnd Bergmann
  2017-06-14  7:44       ` Masahiro Yamada
  2017-06-14  8:32       ` Michal Marek
  0 siblings, 2 replies; 14+ messages in thread
From: Arnd Bergmann @ 2017-06-14  7:31 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Matthias Kaehlcke, Thomas Gleixner, Ingo Molnar, H . Peter Anvin,
	H . J . Lu, David Woodhouse, Michal Marek, X86 ML,
	Linux Kbuild mailing list, Linux Kernel Mailing List,
	Michael Davidson, Greg Hackmann, Nick Desaulniers, Stephen Hines,
	Kees Cook, Bernhard Rosenkränzer, Peter Foley,
	Behan Webster, Douglas Anderson

On Wed, Jun 14, 2017 at 3:27 AM, Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
> 2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
>> cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
>> whether an option is supported or not. This is fine for options used to
>> build the kernel itself, however some components like the x86 boot code
>> use a different set of flags.
>>
>> Add the new macro cc-option-raw which serves the same purpose as
>> cc-option but has additional parameters. One parameter is the compiler
>> with which the check should be performed, the other the compiler options
>> to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
>> macros like hostcc-option to be implemented on top of cc-option-raw.
>>
>> Also rework cc-option to make use of cc-option-raw.
>>
>> Suggested-by: Arnd Bergmann <arnd@arndb.de>
>> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
>> ---
>> Changes in v2:
>> - Changed macro name from Add cc-option-no-kbuild to cc-option-raw
>> - Added compiler as parameter to the macro
>> - Reworked cc-option to make use of cc-option-raw
>> - Updated commit message
>>
>>  scripts/Kbuild.include | 9 +++++++--
>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>
>
> Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> (if nothing better pops up)

Acked-by: Arnd Bergmann <arnd@arndb.de>

Regarding the naming, __cc-option might be better than cc-option-raw,
but the current version is fine too.

          Arnd

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

* Re: [PATCH v2 2/4] kbuild: Add hostcc-option macro
  2017-06-14  7:26   ` Arnd Bergmann
@ 2017-06-14  7:40     ` Masahiro Yamada
  0 siblings, 0 replies; 14+ messages in thread
From: Masahiro Yamada @ 2017-06-14  7:40 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Matthias Kaehlcke, Thomas Gleixner, Ingo Molnar, H . Peter Anvin,
	H . J . Lu, David Woodhouse, Michal Marek,
	the arch/x86 maintainers, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

Hi Arnd,


2017-06-14 16:26 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
> On Wed, Jun 14, 2017 at 1:08 AM, Matthias Kaehlcke <mka@chromium.org> wrote:
>> hostcc-option is equivalent to cc-option, but uses the host compiler
>> and HOSTCFLAGS. Change HOSTCFLAGS to a simple expanded variable to
>> allow for HOSTCFLAGS += $(call hostcc-option, ...).
>>
>> Suggested-by: Arnd Bergmann <arnd@arndb.de>
>> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
>
> Actually, we already have a hostcc-option macro. What I meant with my suggestion
> was that we could redefine the existing one using cc-option-raw.
>
> I checked again now and found that while this was added in 2016 by
> Emese Revfy, we apparently don't have any users of the helper in the
> kernel.


Oops, I missed it because
it is defined in scripts/Makefile.host instead of scripts/Kbuild.include


$(call cc-option, ...) is generally used in the top Makefile (or
arch/*/Makefile).


However, scripts/Makefile.host is not included from the top Makefile,
so $(call hostcc-option, ...) is available only under sub-directories.
I guess that is why we had no user of it.

I think the right thing to do
is to remove the former implementation from Makefile.host

Thanks!



-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-14  7:31     ` Arnd Bergmann
@ 2017-06-14  7:44       ` Masahiro Yamada
  2017-06-14  8:32       ` Michal Marek
  1 sibling, 0 replies; 14+ messages in thread
From: Masahiro Yamada @ 2017-06-14  7:44 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Matthias Kaehlcke, Thomas Gleixner, Ingo Molnar, H . Peter Anvin,
	H . J . Lu, David Woodhouse, Michal Marek, X86 ML,
	Linux Kbuild mailing list, Linux Kernel Mailing List,
	Michael Davidson, Greg Hackmann, Nick Desaulniers, Stephen Hines,
	Kees Cook, Bernhard Rosenkränzer, Peter Foley,
	Behan Webster, Douglas Anderson

Hi Arnd,


2017-06-14 16:31 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
> On Wed, Jun 14, 2017 at 3:27 AM, Masahiro Yamada
> <yamada.masahiro@socionext.com> wrote:
>> 2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
>>> cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
>>> whether an option is supported or not. This is fine for options used to
>>> build the kernel itself, however some components like the x86 boot code
>>> use a different set of flags.
>>>
>>> Add the new macro cc-option-raw which serves the same purpose as
>>> cc-option but has additional parameters. One parameter is the compiler
>>> with which the check should be performed, the other the compiler options
>>> to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
>>> macros like hostcc-option to be implemented on top of cc-option-raw.
>>>
>>> Also rework cc-option to make use of cc-option-raw.
>>>
>>> Suggested-by: Arnd Bergmann <arnd@arndb.de>
>>> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>>> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
>>> ---
>>> Changes in v2:
>>> - Changed macro name from Add cc-option-no-kbuild to cc-option-raw
>>> - Added compiler as parameter to the macro
>>> - Reworked cc-option to make use of cc-option-raw
>>> - Updated commit message
>>>
>>>  scripts/Kbuild.include | 9 +++++++--
>>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>
>> Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> (if nothing better pops up)
>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
>
> Regarding the naming, __cc-option might be better than cc-option-raw,
> but the current version is fine too.


Thank you for your suggestion.

Yes, double-underscore prefix is often used in the kernel coding,
so I like your idea.

I will leave it up to Matthias, though.
Either will be fine for me.

Thanks!

-- 
Best Regards
Masahiro Yamada

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

* Re: [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-14  7:31     ` Arnd Bergmann
  2017-06-14  7:44       ` Masahiro Yamada
@ 2017-06-14  8:32       ` Michal Marek
  2017-06-14 16:38         ` Matthias Kaehlcke
  1 sibling, 1 reply; 14+ messages in thread
From: Michal Marek @ 2017-06-14  8:32 UTC (permalink / raw)
  To: Arnd Bergmann, Masahiro Yamada
  Cc: Matthias Kaehlcke, Thomas Gleixner, Ingo Molnar, H . Peter Anvin,
	H . J . Lu, David Woodhouse, X86 ML, Linux Kbuild mailing list,
	Linux Kernel Mailing List, Michael Davidson, Greg Hackmann,
	Nick Desaulniers, Stephen Hines, Kees Cook,
	Bernhard Rosenkränzer, Peter Foley, Behan Webster,
	Douglas Anderson

Dne 14.6.2017 v 09:31 Arnd Bergmann napsal(a):
> On Wed, Jun 14, 2017 at 3:27 AM, Masahiro Yamada
> <yamada.masahiro@socionext.com> wrote:
>> 2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
>>> cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
>>> whether an option is supported or not. This is fine for options used to
>>> build the kernel itself, however some components like the x86 boot code
>>> use a different set of flags.
>>>
>>> Add the new macro cc-option-raw which serves the same purpose as
>>> cc-option but has additional parameters. One parameter is the compiler
>>> with which the check should be performed, the other the compiler options
>>> to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
>>> macros like hostcc-option to be implemented on top of cc-option-raw.
>>>
>>> Also rework cc-option to make use of cc-option-raw.
>>>
>>> Suggested-by: Arnd Bergmann <arnd@arndb.de>
>>> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>>> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
>>> ---
>>> Changes in v2:
>>> - Changed macro name from Add cc-option-no-kbuild to cc-option-raw
>>> - Added compiler as parameter to the macro
>>> - Reworked cc-option to make use of cc-option-raw
>>> - Updated commit message
>>>
>>>  scripts/Kbuild.include | 9 +++++++--
>>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>
>> Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> (if nothing better pops up)
> 
> Acked-by: Arnd Bergmann <arnd@arndb.de>

Acked-by: Michal Marek <mmarek@suse.com>


> Regarding the naming, __cc-option might be better than cc-option-raw,
> but the current version is fine too.

I have no strong opinion either way :).

Michal

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

* Re: [PATCH v2 1/4] kbuild: Add cc-option-raw macro
  2017-06-14  8:32       ` Michal Marek
@ 2017-06-14 16:38         ` Matthias Kaehlcke
  0 siblings, 0 replies; 14+ messages in thread
From: Matthias Kaehlcke @ 2017-06-14 16:38 UTC (permalink / raw)
  To: Michal Marek
  Cc: Arnd Bergmann, Masahiro Yamada, Thomas Gleixner, Ingo Molnar,
	H . Peter Anvin, H . J . Lu, David Woodhouse, X86 ML,
	Linux Kbuild mailing list, Linux Kernel Mailing List,
	Michael Davidson, Greg Hackmann, Nick Desaulniers, Stephen Hines,
	Kees Cook, Bernhard Rosenkränzer, Peter Foley,
	Behan Webster, Douglas Anderson

El Wed, Jun 14, 2017 at 10:32:20AM +0200 Michal Marek ha dit:

> Dne 14.6.2017 v 09:31 Arnd Bergmann napsal(a):
> > On Wed, Jun 14, 2017 at 3:27 AM, Masahiro Yamada
> > <yamada.masahiro@socionext.com> wrote:
> >> 2017-06-14 8:08 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> >>> cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
> >>> whether an option is supported or not. This is fine for options used to
> >>> build the kernel itself, however some components like the x86 boot code
> >>> use a different set of flags.
> >>>
> >>> Add the new macro cc-option-raw which serves the same purpose as
> >>> cc-option but has additional parameters. One parameter is the compiler
> >>> with which the check should be performed, the other the compiler options
> >>> to be used instead KBUILD_C*FLAGS. The compiler parameter allows other
> >>> macros like hostcc-option to be implemented on top of cc-option-raw.
> >>>
> >>> Also rework cc-option to make use of cc-option-raw.
> >>>
> >>> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> >>> Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> >>> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> >>> ---
> >>> Changes in v2:
> >>> - Changed macro name from Add cc-option-no-kbuild to cc-option-raw
> >>> - Added compiler as parameter to the macro
> >>> - Reworked cc-option to make use of cc-option-raw
> >>> - Updated commit message
> >>>
> >>>  scripts/Kbuild.include | 9 +++++++--
> >>>  1 file changed, 7 insertions(+), 2 deletions(-)
> >>>
> >>
> >> Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> >> (if nothing better pops up)
> > 
> > Acked-by: Arnd Bergmann <arnd@arndb.de>
> 
> Acked-by: Michal Marek <mmarek@suse.com>
> 
> 
> > Regarding the naming, __cc-option might be better than cc-option-raw,
> > but the current version is fine too.
> 
> I have no strong opinion either way :).

I'm going to change it to __cc-option since there is a slight
preference for it and I have to respin the series anyway. I'll wait
a bit for feedback from the x86 folks before sending the new version.

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

end of thread, other threads:[~2017-06-14 16:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-13 23:08 [PATCH v2 0/4] x86: stack alignment for boot code and clang Matthias Kaehlcke
2017-06-13 23:08 ` [PATCH v2 1/4] kbuild: Add cc-option-raw macro Matthias Kaehlcke
2017-06-14  1:27   ` Masahiro Yamada
2017-06-14  7:31     ` Arnd Bergmann
2017-06-14  7:44       ` Masahiro Yamada
2017-06-14  8:32       ` Michal Marek
2017-06-14 16:38         ` Matthias Kaehlcke
2017-06-13 23:08 ` [PATCH v2 2/4] kbuild: Add hostcc-option macro Matthias Kaehlcke
2017-06-14  1:28   ` Masahiro Yamada
2017-06-14  7:26   ` Arnd Bergmann
2017-06-14  7:40     ` Masahiro Yamada
2017-06-13 23:08 ` [PATCH v2 3/4] x86/build: Use cc-option-raw for boot code compiler options Matthias Kaehlcke
2017-06-13 23:08 ` [PATCH v2 4/4] x86/build: Specify stack alignment for clang Matthias Kaehlcke
2017-06-14  1:30 ` [PATCH v2 0/4] x86: stack alignment for boot code and clang 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).