Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-24 Thread Nadav Amit
at 4:14 AM, Ingo Molnar  wrote:

> 
> * Masahiro Yamada  wrote:
> 
>> 2018-06-23 2:22 GMT+09:00 Nadav Amit :
>>> Using macros for inline assembly improves both readability and
>>> compilation decisions that are distorted by big assembly blocks that use
>>> alternative sections. Compile macros.S and use it to assemble all C
>>> files. Currently, only x86 will use it.
>>> 
>>> Cc: Sam Ravnborg 
>>> Cc: Masahiro Yamada 
>>> Cc: Michal Marek 
>>> Cc: Thomas Gleixner 
>>> Cc: Ingo Molnar 
>>> Cc: "H. Peter Anvin" 
>>> Cc: x...@kernel.org
>>> Cc: linux-kbu...@vger.kernel.org
>>> Acked-by: Peter Zijlstra (Intel) 
>>> Signed-off-by: Nadav Amit 
>>> ---
>> 
>> 
>> 
>> Acked-by: Masahiro Yamada 
>> 
>> 
>> 
>> 
>>> Makefile |  9 +++--
>>> arch/x86/Makefile| 11 +--
>>> arch/x86/kernel/macros.S |  7 +++
>>> scripts/Kbuild.include   |  4 +++-
>>> scripts/mod/Makefile |  2 ++
>>> 5 files changed, 28 insertions(+), 5 deletions(-)
>>> create mode 100644 arch/x86/kernel/macros.S
> 
> So this patch appears to break the xtensa cross-build on my system, with an 
> older 
> version of crosstools:
> 
>  MODPOST vmlinux.o
> /home/mingo/crosstool-korg/bin//gcc-4.9.0-nolibc/xtensa-linux/bin/xtensa-linux-ld:./arch/xtensa/kernel/vmlinux.lds:430:
>  
> syntax error
> /home/mingo/tip/Makefile:1010: recipe for target 'vmlinux' failed
> make[1]: *** [vmlinux] Error 1
> make[1]: Leaving directory '/dev/shm/tip/build'
> Makefile:146: recipe for target 'sub-make’ failed

This one is due to a missing -DLINKER_SCRIPT in the Makefile of xtensa. I’ll
send the patch to fix it after I deal with the boot failure (for which I
wait for your config file).

Thanks,
Nadav

Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-24 Thread Nadav Amit
at 4:14 AM, Ingo Molnar  wrote:

> 
> * Masahiro Yamada  wrote:
> 
>> 2018-06-23 2:22 GMT+09:00 Nadav Amit :
>>> Using macros for inline assembly improves both readability and
>>> compilation decisions that are distorted by big assembly blocks that use
>>> alternative sections. Compile macros.S and use it to assemble all C
>>> files. Currently, only x86 will use it.
>>> 
>>> Cc: Sam Ravnborg 
>>> Cc: Masahiro Yamada 
>>> Cc: Michal Marek 
>>> Cc: Thomas Gleixner 
>>> Cc: Ingo Molnar 
>>> Cc: "H. Peter Anvin" 
>>> Cc: x...@kernel.org
>>> Cc: linux-kbu...@vger.kernel.org
>>> Acked-by: Peter Zijlstra (Intel) 
>>> Signed-off-by: Nadav Amit 
>>> ---
>> 
>> 
>> 
>> Acked-by: Masahiro Yamada 
>> 
>> 
>> 
>> 
>>> Makefile |  9 +++--
>>> arch/x86/Makefile| 11 +--
>>> arch/x86/kernel/macros.S |  7 +++
>>> scripts/Kbuild.include   |  4 +++-
>>> scripts/mod/Makefile |  2 ++
>>> 5 files changed, 28 insertions(+), 5 deletions(-)
>>> create mode 100644 arch/x86/kernel/macros.S
> 
> So this patch appears to break the xtensa cross-build on my system, with an 
> older 
> version of crosstools:
> 
>  MODPOST vmlinux.o
> /home/mingo/crosstool-korg/bin//gcc-4.9.0-nolibc/xtensa-linux/bin/xtensa-linux-ld:./arch/xtensa/kernel/vmlinux.lds:430:
>  
> syntax error
> /home/mingo/tip/Makefile:1010: recipe for target 'vmlinux' failed
> make[1]: *** [vmlinux] Error 1
> make[1]: Leaving directory '/dev/shm/tip/build'
> Makefile:146: recipe for target 'sub-make’ failed

This one is due to a missing -DLINKER_SCRIPT in the Makefile of xtensa. I’ll
send the patch to fix it after I deal with the boot failure (for which I
wait for your config file).

Thanks,
Nadav

Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-24 Thread Ingo Molnar


* Masahiro Yamada  wrote:

> 2018-06-23 2:22 GMT+09:00 Nadav Amit :
> > Using macros for inline assembly improves both readability and
> > compilation decisions that are distorted by big assembly blocks that use
> > alternative sections. Compile macros.S and use it to assemble all C
> > files. Currently, only x86 will use it.
> >
> > Cc: Sam Ravnborg 
> > Cc: Masahiro Yamada 
> > Cc: Michal Marek 
> > Cc: Thomas Gleixner 
> > Cc: Ingo Molnar 
> > Cc: "H. Peter Anvin" 
> > Cc: x...@kernel.org
> > Cc: linux-kbu...@vger.kernel.org
> > Acked-by: Peter Zijlstra (Intel) 
> > Signed-off-by: Nadav Amit 
> > ---
> 
> 
> 
> Acked-by: Masahiro Yamada 
> 
> 
> 
> 
> >  Makefile |  9 +++--
> >  arch/x86/Makefile| 11 +--
> >  arch/x86/kernel/macros.S |  7 +++
> >  scripts/Kbuild.include   |  4 +++-
> >  scripts/mod/Makefile |  2 ++
> >  5 files changed, 28 insertions(+), 5 deletions(-)
> >  create mode 100644 arch/x86/kernel/macros.S

So this patch appears to break the xtensa cross-build on my system, with an 
older 
version of crosstools:

  MODPOST vmlinux.o
/home/mingo/crosstool-korg/bin//gcc-4.9.0-nolibc/xtensa-linux/bin/xtensa-linux-ld:./arch/xtensa/kernel/vmlinux.lds:430:
 
syntax error
/home/mingo/tip/Makefile:1010: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/dev/shm/tip/build'
Makefile:146: recipe for target 'sub-make' failed

Thanks,

Ingo


Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-24 Thread Ingo Molnar


* Masahiro Yamada  wrote:

> 2018-06-23 2:22 GMT+09:00 Nadav Amit :
> > Using macros for inline assembly improves both readability and
> > compilation decisions that are distorted by big assembly blocks that use
> > alternative sections. Compile macros.S and use it to assemble all C
> > files. Currently, only x86 will use it.
> >
> > Cc: Sam Ravnborg 
> > Cc: Masahiro Yamada 
> > Cc: Michal Marek 
> > Cc: Thomas Gleixner 
> > Cc: Ingo Molnar 
> > Cc: "H. Peter Anvin" 
> > Cc: x...@kernel.org
> > Cc: linux-kbu...@vger.kernel.org
> > Acked-by: Peter Zijlstra (Intel) 
> > Signed-off-by: Nadav Amit 
> > ---
> 
> 
> 
> Acked-by: Masahiro Yamada 
> 
> 
> 
> 
> >  Makefile |  9 +++--
> >  arch/x86/Makefile| 11 +--
> >  arch/x86/kernel/macros.S |  7 +++
> >  scripts/Kbuild.include   |  4 +++-
> >  scripts/mod/Makefile |  2 ++
> >  5 files changed, 28 insertions(+), 5 deletions(-)
> >  create mode 100644 arch/x86/kernel/macros.S

So this patch appears to break the xtensa cross-build on my system, with an 
older 
version of crosstools:

  MODPOST vmlinux.o
/home/mingo/crosstool-korg/bin//gcc-4.9.0-nolibc/xtensa-linux/bin/xtensa-linux-ld:./arch/xtensa/kernel/vmlinux.lds:430:
 
syntax error
/home/mingo/tip/Makefile:1010: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/dev/shm/tip/build'
Makefile:146: recipe for target 'sub-make' failed

Thanks,

Ingo


Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-17 Thread Masahiro Yamada
2018-06-23 2:22 GMT+09:00 Nadav Amit :
> Using macros for inline assembly improves both readability and
> compilation decisions that are distorted by big assembly blocks that use
> alternative sections. Compile macros.S and use it to assemble all C
> files. Currently, only x86 will use it.
>
> Cc: Sam Ravnborg 
> Cc: Masahiro Yamada 
> Cc: Michal Marek 
> Cc: Thomas Gleixner 
> Cc: Ingo Molnar 
> Cc: "H. Peter Anvin" 
> Cc: x...@kernel.org
> Cc: linux-kbu...@vger.kernel.org
> Acked-by: Peter Zijlstra (Intel) 
> Signed-off-by: Nadav Amit 
> ---



Acked-by: Masahiro Yamada 




>  Makefile |  9 +++--
>  arch/x86/Makefile| 11 +--
>  arch/x86/kernel/macros.S |  7 +++
>  scripts/Kbuild.include   |  4 +++-
>  scripts/mod/Makefile |  2 ++
>  5 files changed, 28 insertions(+), 5 deletions(-)
>  create mode 100644 arch/x86/kernel/macros.S
>
> diff --git a/Makefile b/Makefile
> index ca2af1ab91eb..66c1da72c156 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1056,7 +1056,7 @@ scripts: scripts_basic include/config/auto.conf 
> include/config/tristate.conf \
>  # version.h and scripts_basic is processed / created.
>
>  # Listed in dependency order
> -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
> +PHONY += prepare archprepare macroprepare prepare0 prepare1 prepare2 prepare3
>
>  # prepare3 is used to check if we are building in a separate output 
> directory,
>  # and if so do:
> @@ -1080,7 +1080,9 @@ prepare1: prepare2 $(version_h) $(autoksyms_h) 
> include/generated/utsrelease.h \
> include/config/auto.conf
> $(cmd_crmodverdir)
>
> -archprepare: archheaders archscripts prepare1 scripts_basic
> +macroprepare: prepare1 archmacros
> +
> +archprepare: archheaders archscripts macroprepare scripts_basic
>
>  prepare0: archprepare gcc-plugins
> $(Q)$(MAKE) $(build)=.
> @@ -1148,6 +1150,9 @@ archheaders:
>  PHONY += archscripts
>  archscripts:
>
> +PHONY += archmacros
> +archmacros:
> +
>  PHONY += __headers
>  __headers: $(version_h) scripts_basic uapi-asm-generic archheaders 
> archscripts
> $(Q)$(MAKE) $(build)=scripts build_unifdef
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index f0a6ea22429d..363c3d8ed964 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -235,8 +235,8 @@ ifdef CONFIG_X86_64
>  LDFLAGS += $(call ld-option, -z max-page-size=0x20)
>  endif
>
> -# Speed up the build
> -KBUILD_CFLAGS += -pipe
> +# We cannot use -pipe flag since we give an additional .s file to the 
> compiler
> +#KBUILD_CFLAGS += -pipe
>  # Workaround for a gcc prelease that unfortunately was shipped in a suse 
> release
>  KBUILD_CFLAGS += -Wno-sign-compare
>  #
> @@ -258,11 +258,18 @@ archscripts: scripts_basic
>  archheaders:
> $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
>
> +archmacros:
> +   $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
> +
>  archprepare:
>  ifeq ($(CONFIG_KEXEC_FILE),y)
> $(Q)$(MAKE) $(build)=arch/x86/purgatory 
> arch/x86/purgatory/kexec-purgatory.c
>  endif
>
> +ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
> +export ASM_MACRO_FLAGS
> +KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
> +
>  ###
>  # Kernel objects
>
> diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
> new file mode 100644
> index ..cfc1c7d1a6eb
> --- /dev/null
> +++ b/arch/x86/kernel/macros.S
> @@ -0,0 +1,7 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +
> +/*
> + * This file includes headers whose assembly part includes macros which are
> + * commonly used. The macros are precompiled into assmebly file which is 
> later
> + * assembled together with each compiled file.
> + */
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index c8156d61678c..8eeb5636a2a7 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -115,7 +115,9 @@ __cc-option = $(call try-run,\
>
>  # 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))
> +# In addition, do not include the asm macros which are built later.
> +CC_OPTION_FILTERED = $(GCC_PLUGINS_CFLAGS) $(ASM_MACRO_FLAGS)
> +CC_OPTION_CFLAGS = $(filter-out $(CC_OPTION_FILTERED),$(KBUILD_CFLAGS))
>
>  # cc-option
>  # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
> diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
> index 42c5d50f2bcc..a5b4af47987a 100644
> --- a/scripts/mod/Makefile
> +++ b/scripts/mod/Makefile
> @@ -4,6 +4,8 @@ OBJECT_FILES_NON_STANDARD := y
>  hostprogs-y:= modpost mk_elfconfig
>  always := $(hostprogs-y) empty.o
>
> +CFLAGS_REMOVE_empty.o := $(ASM_MACRO_FLAGS)
> +
>  modpost-objs   := modpost.o file2alias.o sumversion.o
>
>  devicetable-offsets-file := devicetable-offsets.h
> --
> 2.17.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the 

Re: [PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-07-17 Thread Masahiro Yamada
2018-06-23 2:22 GMT+09:00 Nadav Amit :
> Using macros for inline assembly improves both readability and
> compilation decisions that are distorted by big assembly blocks that use
> alternative sections. Compile macros.S and use it to assemble all C
> files. Currently, only x86 will use it.
>
> Cc: Sam Ravnborg 
> Cc: Masahiro Yamada 
> Cc: Michal Marek 
> Cc: Thomas Gleixner 
> Cc: Ingo Molnar 
> Cc: "H. Peter Anvin" 
> Cc: x...@kernel.org
> Cc: linux-kbu...@vger.kernel.org
> Acked-by: Peter Zijlstra (Intel) 
> Signed-off-by: Nadav Amit 
> ---



Acked-by: Masahiro Yamada 




>  Makefile |  9 +++--
>  arch/x86/Makefile| 11 +--
>  arch/x86/kernel/macros.S |  7 +++
>  scripts/Kbuild.include   |  4 +++-
>  scripts/mod/Makefile |  2 ++
>  5 files changed, 28 insertions(+), 5 deletions(-)
>  create mode 100644 arch/x86/kernel/macros.S
>
> diff --git a/Makefile b/Makefile
> index ca2af1ab91eb..66c1da72c156 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1056,7 +1056,7 @@ scripts: scripts_basic include/config/auto.conf 
> include/config/tristate.conf \
>  # version.h and scripts_basic is processed / created.
>
>  # Listed in dependency order
> -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
> +PHONY += prepare archprepare macroprepare prepare0 prepare1 prepare2 prepare3
>
>  # prepare3 is used to check if we are building in a separate output 
> directory,
>  # and if so do:
> @@ -1080,7 +1080,9 @@ prepare1: prepare2 $(version_h) $(autoksyms_h) 
> include/generated/utsrelease.h \
> include/config/auto.conf
> $(cmd_crmodverdir)
>
> -archprepare: archheaders archscripts prepare1 scripts_basic
> +macroprepare: prepare1 archmacros
> +
> +archprepare: archheaders archscripts macroprepare scripts_basic
>
>  prepare0: archprepare gcc-plugins
> $(Q)$(MAKE) $(build)=.
> @@ -1148,6 +1150,9 @@ archheaders:
>  PHONY += archscripts
>  archscripts:
>
> +PHONY += archmacros
> +archmacros:
> +
>  PHONY += __headers
>  __headers: $(version_h) scripts_basic uapi-asm-generic archheaders 
> archscripts
> $(Q)$(MAKE) $(build)=scripts build_unifdef
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index f0a6ea22429d..363c3d8ed964 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -235,8 +235,8 @@ ifdef CONFIG_X86_64
>  LDFLAGS += $(call ld-option, -z max-page-size=0x20)
>  endif
>
> -# Speed up the build
> -KBUILD_CFLAGS += -pipe
> +# We cannot use -pipe flag since we give an additional .s file to the 
> compiler
> +#KBUILD_CFLAGS += -pipe
>  # Workaround for a gcc prelease that unfortunately was shipped in a suse 
> release
>  KBUILD_CFLAGS += -Wno-sign-compare
>  #
> @@ -258,11 +258,18 @@ archscripts: scripts_basic
>  archheaders:
> $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
>
> +archmacros:
> +   $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
> +
>  archprepare:
>  ifeq ($(CONFIG_KEXEC_FILE),y)
> $(Q)$(MAKE) $(build)=arch/x86/purgatory 
> arch/x86/purgatory/kexec-purgatory.c
>  endif
>
> +ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
> +export ASM_MACRO_FLAGS
> +KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
> +
>  ###
>  # Kernel objects
>
> diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
> new file mode 100644
> index ..cfc1c7d1a6eb
> --- /dev/null
> +++ b/arch/x86/kernel/macros.S
> @@ -0,0 +1,7 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +
> +/*
> + * This file includes headers whose assembly part includes macros which are
> + * commonly used. The macros are precompiled into assmebly file which is 
> later
> + * assembled together with each compiled file.
> + */
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index c8156d61678c..8eeb5636a2a7 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -115,7 +115,9 @@ __cc-option = $(call try-run,\
>
>  # 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))
> +# In addition, do not include the asm macros which are built later.
> +CC_OPTION_FILTERED = $(GCC_PLUGINS_CFLAGS) $(ASM_MACRO_FLAGS)
> +CC_OPTION_CFLAGS = $(filter-out $(CC_OPTION_FILTERED),$(KBUILD_CFLAGS))
>
>  # cc-option
>  # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
> diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
> index 42c5d50f2bcc..a5b4af47987a 100644
> --- a/scripts/mod/Makefile
> +++ b/scripts/mod/Makefile
> @@ -4,6 +4,8 @@ OBJECT_FILES_NON_STANDARD := y
>  hostprogs-y:= modpost mk_elfconfig
>  always := $(hostprogs-y) empty.o
>
> +CFLAGS_REMOVE_empty.o := $(ASM_MACRO_FLAGS)
> +
>  modpost-objs   := modpost.o file2alias.o sumversion.o
>
>  devicetable-offsets-file := devicetable-offsets.h
> --
> 2.17.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the 

[PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-06-22 Thread Nadav Amit
Using macros for inline assembly improves both readability and
compilation decisions that are distorted by big assembly blocks that use
alternative sections. Compile macros.S and use it to assemble all C
files. Currently, only x86 will use it.

Cc: Sam Ravnborg 
Cc: Masahiro Yamada 
Cc: Michal Marek 
Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: "H. Peter Anvin" 
Cc: x...@kernel.org
Cc: linux-kbu...@vger.kernel.org
Acked-by: Peter Zijlstra (Intel) 
Signed-off-by: Nadav Amit 
---
 Makefile |  9 +++--
 arch/x86/Makefile| 11 +--
 arch/x86/kernel/macros.S |  7 +++
 scripts/Kbuild.include   |  4 +++-
 scripts/mod/Makefile |  2 ++
 5 files changed, 28 insertions(+), 5 deletions(-)
 create mode 100644 arch/x86/kernel/macros.S

diff --git a/Makefile b/Makefile
index ca2af1ab91eb..66c1da72c156 100644
--- a/Makefile
+++ b/Makefile
@@ -1056,7 +1056,7 @@ scripts: scripts_basic include/config/auto.conf 
include/config/tristate.conf \
 # version.h and scripts_basic is processed / created.
 
 # Listed in dependency order
-PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
+PHONY += prepare archprepare macroprepare prepare0 prepare1 prepare2 prepare3
 
 # prepare3 is used to check if we are building in a separate output directory,
 # and if so do:
@@ -1080,7 +1080,9 @@ prepare1: prepare2 $(version_h) $(autoksyms_h) 
include/generated/utsrelease.h \
include/config/auto.conf
$(cmd_crmodverdir)
 
-archprepare: archheaders archscripts prepare1 scripts_basic
+macroprepare: prepare1 archmacros
+
+archprepare: archheaders archscripts macroprepare scripts_basic
 
 prepare0: archprepare gcc-plugins
$(Q)$(MAKE) $(build)=.
@@ -1148,6 +1150,9 @@ archheaders:
 PHONY += archscripts
 archscripts:
 
+PHONY += archmacros
+archmacros:
+
 PHONY += __headers
 __headers: $(version_h) scripts_basic uapi-asm-generic archheaders archscripts
$(Q)$(MAKE) $(build)=scripts build_unifdef
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index f0a6ea22429d..363c3d8ed964 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -235,8 +235,8 @@ ifdef CONFIG_X86_64
 LDFLAGS += $(call ld-option, -z max-page-size=0x20)
 endif
 
-# Speed up the build
-KBUILD_CFLAGS += -pipe
+# We cannot use -pipe flag since we give an additional .s file to the compiler
+#KBUILD_CFLAGS += -pipe
 # Workaround for a gcc prelease that unfortunately was shipped in a suse 
release
 KBUILD_CFLAGS += -Wno-sign-compare
 #
@@ -258,11 +258,18 @@ archscripts: scripts_basic
 archheaders:
$(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
 
+archmacros:
+   $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
+
 archprepare:
 ifeq ($(CONFIG_KEXEC_FILE),y)
$(Q)$(MAKE) $(build)=arch/x86/purgatory 
arch/x86/purgatory/kexec-purgatory.c
 endif
 
+ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
+export ASM_MACRO_FLAGS
+KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
+
 ###
 # Kernel objects
 
diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
new file mode 100644
index ..cfc1c7d1a6eb
--- /dev/null
+++ b/arch/x86/kernel/macros.S
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/*
+ * This file includes headers whose assembly part includes macros which are
+ * commonly used. The macros are precompiled into assmebly file which is later
+ * assembled together with each compiled file.
+ */
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index c8156d61678c..8eeb5636a2a7 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -115,7 +115,9 @@ __cc-option = $(call try-run,\
 
 # 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))
+# In addition, do not include the asm macros which are built later.
+CC_OPTION_FILTERED = $(GCC_PLUGINS_CFLAGS) $(ASM_MACRO_FLAGS)
+CC_OPTION_CFLAGS = $(filter-out $(CC_OPTION_FILTERED),$(KBUILD_CFLAGS))
 
 # cc-option
 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index 42c5d50f2bcc..a5b4af47987a 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -4,6 +4,8 @@ OBJECT_FILES_NON_STANDARD := y
 hostprogs-y:= modpost mk_elfconfig
 always := $(hostprogs-y) empty.o
 
+CFLAGS_REMOVE_empty.o := $(ASM_MACRO_FLAGS)
+
 modpost-objs   := modpost.o file2alias.o sumversion.o
 
 devicetable-offsets-file := devicetable-offsets.h
-- 
2.17.1



[PATCH v6 1/9] Makefile: Prepare for using macros for inline asm

2018-06-22 Thread Nadav Amit
Using macros for inline assembly improves both readability and
compilation decisions that are distorted by big assembly blocks that use
alternative sections. Compile macros.S and use it to assemble all C
files. Currently, only x86 will use it.

Cc: Sam Ravnborg 
Cc: Masahiro Yamada 
Cc: Michal Marek 
Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: "H. Peter Anvin" 
Cc: x...@kernel.org
Cc: linux-kbu...@vger.kernel.org
Acked-by: Peter Zijlstra (Intel) 
Signed-off-by: Nadav Amit 
---
 Makefile |  9 +++--
 arch/x86/Makefile| 11 +--
 arch/x86/kernel/macros.S |  7 +++
 scripts/Kbuild.include   |  4 +++-
 scripts/mod/Makefile |  2 ++
 5 files changed, 28 insertions(+), 5 deletions(-)
 create mode 100644 arch/x86/kernel/macros.S

diff --git a/Makefile b/Makefile
index ca2af1ab91eb..66c1da72c156 100644
--- a/Makefile
+++ b/Makefile
@@ -1056,7 +1056,7 @@ scripts: scripts_basic include/config/auto.conf 
include/config/tristate.conf \
 # version.h and scripts_basic is processed / created.
 
 # Listed in dependency order
-PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
+PHONY += prepare archprepare macroprepare prepare0 prepare1 prepare2 prepare3
 
 # prepare3 is used to check if we are building in a separate output directory,
 # and if so do:
@@ -1080,7 +1080,9 @@ prepare1: prepare2 $(version_h) $(autoksyms_h) 
include/generated/utsrelease.h \
include/config/auto.conf
$(cmd_crmodverdir)
 
-archprepare: archheaders archscripts prepare1 scripts_basic
+macroprepare: prepare1 archmacros
+
+archprepare: archheaders archscripts macroprepare scripts_basic
 
 prepare0: archprepare gcc-plugins
$(Q)$(MAKE) $(build)=.
@@ -1148,6 +1150,9 @@ archheaders:
 PHONY += archscripts
 archscripts:
 
+PHONY += archmacros
+archmacros:
+
 PHONY += __headers
 __headers: $(version_h) scripts_basic uapi-asm-generic archheaders archscripts
$(Q)$(MAKE) $(build)=scripts build_unifdef
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index f0a6ea22429d..363c3d8ed964 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -235,8 +235,8 @@ ifdef CONFIG_X86_64
 LDFLAGS += $(call ld-option, -z max-page-size=0x20)
 endif
 
-# Speed up the build
-KBUILD_CFLAGS += -pipe
+# We cannot use -pipe flag since we give an additional .s file to the compiler
+#KBUILD_CFLAGS += -pipe
 # Workaround for a gcc prelease that unfortunately was shipped in a suse 
release
 KBUILD_CFLAGS += -Wno-sign-compare
 #
@@ -258,11 +258,18 @@ archscripts: scripts_basic
 archheaders:
$(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
 
+archmacros:
+   $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
+
 archprepare:
 ifeq ($(CONFIG_KEXEC_FILE),y)
$(Q)$(MAKE) $(build)=arch/x86/purgatory 
arch/x86/purgatory/kexec-purgatory.c
 endif
 
+ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
+export ASM_MACRO_FLAGS
+KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
+
 ###
 # Kernel objects
 
diff --git a/arch/x86/kernel/macros.S b/arch/x86/kernel/macros.S
new file mode 100644
index ..cfc1c7d1a6eb
--- /dev/null
+++ b/arch/x86/kernel/macros.S
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/*
+ * This file includes headers whose assembly part includes macros which are
+ * commonly used. The macros are precompiled into assmebly file which is later
+ * assembled together with each compiled file.
+ */
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index c8156d61678c..8eeb5636a2a7 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -115,7 +115,9 @@ __cc-option = $(call try-run,\
 
 # 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))
+# In addition, do not include the asm macros which are built later.
+CC_OPTION_FILTERED = $(GCC_PLUGINS_CFLAGS) $(ASM_MACRO_FLAGS)
+CC_OPTION_CFLAGS = $(filter-out $(CC_OPTION_FILTERED),$(KBUILD_CFLAGS))
 
 # cc-option
 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index 42c5d50f2bcc..a5b4af47987a 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -4,6 +4,8 @@ OBJECT_FILES_NON_STANDARD := y
 hostprogs-y:= modpost mk_elfconfig
 always := $(hostprogs-y) empty.o
 
+CFLAGS_REMOVE_empty.o := $(ASM_MACRO_FLAGS)
+
 modpost-objs   := modpost.o file2alias.o sumversion.o
 
 devicetable-offsets-file := devicetable-offsets.h
-- 
2.17.1