LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Nadav Amit <namit@vmware.com> To: <linux-kernel@vger.kernel.org>, <x86@kernel.org> Cc: Nadav Amit <namit@vmware.com>, Masahiro Yamada <yamada.masahiro@socionext.com>, Michal Marek <michal.lkml@markovi.net>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>, <linux-kbuild@vger.kernel.org> Subject: [PATCH v4 1/9] Makefile: Prepare for using macros for inline asm Date: Tue, 12 Jun 2018 04:50:42 -0700 [thread overview] Message-ID: <20180612115050.185112-2-namit@vmware.com> (raw) In-Reply-To: <20180612115050.185112-1-namit@vmware.com> 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: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Michal Marek <michal.lkml@markovi.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Cc: linux-kbuild@vger.kernel.org Signed-off-by: Nadav Amit <namit@vmware.com> --- Makefile | 9 +++++++-- arch/x86/Makefile | 11 +++++++++-- arch/x86/kernel/Makefile | 6 ++++++ arch/x86/kernel/macros.S | 7 +++++++ scripts/Kbuild.include | 4 +++- 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 arch/x86/kernel/macros.S diff --git a/Makefile b/Makefile index 554dcaddbce4..026586db2f26 100644 --- a/Makefile +++ b/Makefile @@ -1085,7 +1085,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: @@ -1109,7 +1109,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)=. @@ -1214,6 +1216,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 60135cbd905c..6b82314776fd 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 macros + 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/Makefile b/arch/x86/kernel/Makefile index 02d6f5cf4e70..fdb6c5b2a922 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -9,6 +9,12 @@ extra-y += ebda.o extra-y += platform-quirks.o extra-y += vmlinux.lds +$(obj)/macros.s: $(obj)/macros.S FORCE + $(call if_changed_dep,cpp_s_S) + +macros: $(obj)/macros.s + @: + CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE) ifdef CONFIG_FUNCTION_TRACER 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 50cee534fd64..ad2c02062aa4 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -189,7 +189,9 @@ __cc-option = $(call try-run-cached,\ # 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) -- 2.17.0
next prev parent reply other threads:[~2018-06-12 19:08 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-06-12 11:50 [PATCH v4 0/9] x86: macrofying inline asm for better compilation Nadav Amit 2018-06-12 11:50 ` Nadav Amit [this message] 2018-06-13 17:43 ` [PATCH v4 1/9] Makefile: Prepare for using macros for inline asm Masahiro Yamada 2018-06-13 20:36 ` Sam Ravnborg 2018-06-17 0:47 ` Masahiro Yamada 2018-06-13 22:19 ` Nadav Amit 2018-06-17 0:40 ` Masahiro Yamada 2018-06-19 7:12 ` Nadav Amit 2018-06-12 11:50 ` [PATCH v4 2/9] x86: objtool: use asm macro for better compiler decisions Nadav Amit 2018-06-12 11:50 ` [PATCH v4 3/9] x86: refcount: prevent gcc distortions Nadav Amit 2018-06-12 11:50 ` [PATCH v4 4/9] x86: alternatives: macrofy locks for better inlining Nadav Amit 2018-06-12 11:50 ` [PATCH v4 5/9] x86: bug: prevent gcc distortions Nadav Amit 2018-06-12 11:50 ` [PATCH v4 6/9] x86: prevent inline distortion by paravirt ops Nadav Amit 2018-06-19 15:09 ` Juergen Gross 2018-06-12 11:50 ` [PATCH v4 7/9] x86: extable: use macros instead of inline assembly Nadav Amit 2018-06-12 11:50 ` [PATCH v4 8/9] x86: cpufeature: " Nadav Amit 2018-06-12 11:50 ` [PATCH v4 9/9] x86: jump-labels: " Nadav Amit
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180612115050.185112-2-namit@vmware.com \ --to=namit@vmware.com \ --cc=hpa@zytor.com \ --cc=linux-kbuild@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=michal.lkml@markovi.net \ --cc=mingo@redhat.com \ --cc=tglx@linutronix.de \ --cc=x86@kernel.org \ --cc=yamada.masahiro@socionext.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).