2018-06-23 2:22 GMT+09:00 Nadav Amit <namit@xxxxxxxxxx>: > 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 <sam@xxxxxxxxxxxx> > Cc: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> > Cc: Michal Marek <michal.lkml@xxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> > Cc: x86@xxxxxxxxxx > Cc: linux-kbuild@xxxxxxxxxxxxxxx > Acked-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > Signed-off-by: Nadav Amit <namit@xxxxxxxxxx> > --- Acked-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> > 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=0x200000) > 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 000000000000..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 body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Best Regards Masahiro Yamada -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html