| From foo@baz Wed Nov 21 18:50:25 CET 2018 |
| From: Matthias Kaehlcke <mka@chromium.org> |
| Date: Wed, 21 Jun 2017 16:28:04 -0700 |
| Subject: x86/build: Use __cc-option for boot code compiler options |
| |
| From: Matthias Kaehlcke <mka@chromium.org> |
| |
| commit 032a2c4f65a2f81c93e161a11197ba19bc14a909 upstream. |
| |
| cc-option is used to enable compiler options for the boot code if they |
| are available. The macro uses KBUILD_CFLAGS and KBUILD_CPPFLAGS for the |
| check, however 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 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 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> |
| Acked-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/Makefile | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/arch/x86/Makefile |
| +++ b/arch/x86/Makefile |
| @@ -24,10 +24,11 @@ REALMODE_CFLAGS := $(M16_CFLAGS) -g -Os |
| -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, $(CC), $(REALMODE_CFLAGS), -ffreestanding) |
| +REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector) |
| +REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -mpreferred-stack-boundary=2) |
| export REALMODE_CFLAGS |
| |
| # BITS is used as extension for files which are available in a 32 bit |