All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nadav Amit <namit@vmware.com>
To: Logan Gunthorpe <logang@deltatee.com>,
	"hpa@zytor.com" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>
Cc: LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>,
	Sam Ravnborg <sam@ravnborg.org>,
	Michal Marek <michal.lkml@markovi.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	Stephen Bates <sbates@raithlin.com>,
	Masami Hiramatsu <mhiramat@kernel.org>
Subject: Re: [PATCH v9 02/10] Makefile: Prepare for using macros for inline asm
Date: Sat, 10 Nov 2018 22:04:37 +0000	[thread overview]
Message-ID: <88901B62-7D98-45A2-8881-352A31802933@vmware.com> (raw)
In-Reply-To: <C0187502-9FC0-4FE2-BCD3-81B8B992F3A2@vmware.com>

From: Nadav Amit
Sent: November 8, 2018 at 8:18:23 PM GMT
> To: Logan Gunthorpe <logang@deltatee.com>, hpa@zytor.com <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>
> Cc: LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>, Sam Ravnborg <sam@ravnborg.org>, Michal Marek <michal.lkml@markovi.net>, Thomas Gleixner <tglx@linutronix.de>, Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>, Stephen Bates <sbates@raithlin.com>
> Subject: Re: [PATCH v9 02/10] Makefile: Prepare for using macros for inline asm
> 
> 
> From: Logan Gunthorpe
> Sent: November 8, 2018 at 8:00:33 PM GMT
>> To: Nadav Amit <namit@vmware.com>, hpa@zytor.com <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>
>> Cc: LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>, Sam Ravnborg <sam@ravnborg.org>, Michal Marek <michal.lkml@markovi.net>, Thomas Gleixner <tglx@linutronix.de>, Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>, Stephen Bates <sbates@raithlin.com>
>> Subject: Re: [PATCH v9 02/10] Makefile: Prepare for using macros for inline asm
>> 
>> 
>> 
>> 
>> On 2018-11-08 12:54 p.m., Nadav Amit wrote:
>>> I don’t think the assembly stage needs to be done locally. gcc can still be
>>> used to deploy the assembler. I am not too familiar with distcc, so I don’t
>>> know whether the preprocessing supports multiple source-files, and whether
>>> it has some strange-behavior when it comes to .S/.s files.
>> 
>> The problem is that it's the assembly stage that needs the extra
>> macros.s and without that file being transferred somehow, that stage
>> must be done locally.
> 
> I understand, but the idea is to have two stages, for instance:
> 
>  gcc ... -S -o .tmp_[unit].S [unit].c
> 
> and then
> 
>  gcc ... -D__ASSEMBLY__ arch/x86/kernel/macros.S .tmp_[unit].S
> 
> (Yes, I realize the .tmp_[unit].S was already preprocessed, but this way you
> can combine both inputs)
> 
> Unfortunately, as I write this email (and run tests) I realize distcc is too
> dumb to handle two input files:
> 
>  "(dcc_scan_args) do we have two inputs?  i give up "
> 
> Just great. So I guess macros.s would need to be concatenated with
> .tmp_[unit].s as a separate (local) interim stage.

Err.. I hate makefiles and distcc doesn’t make life easier. For instance, if
it sees two source files on the command-line, it freaks out and compiles it
locally. It also has an option to distribute assembly, but it is not enabled
by default.

Anyhow, can you try the following patch?

-- >8 --

Subject: [PATCH] Makefile: Fix distcc compilation with x86 macros

Introducing the use of asm macros in c-code broke distcc, since it only
sends the preprocessed source file. The solution is to break the
compilation into two separate phases of compilation and assembly, and
between the two concatanate the assembly macros and the compiled (yet
not assembled) source file. Since this is less efficient, this
compilation mode is only used when make is called with the "DISTCC=y"
parameter.

Note that the assembly stage should also be distributable, if distcc is
configured using "CFLAGS=-DENABLE_REMOTE_ASSEMBLE".

Reported-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Nadav Amit <namit@vmware.com>
---
 Makefile               |  4 +++-
 arch/x86/Makefile      |  4 +++-
 scripts/Makefile.build | 29 +++++++++++++++++++++++++++--
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index 9fce8b91c15f..c07349fc38c7 100644
--- a/Makefile
+++ b/Makefile
@@ -743,7 +743,9 @@ KBUILD_CFLAGS   += $(call cc-option, -gsplit-dwarf, -g)
 else
 KBUILD_CFLAGS	+= -g
 endif
-KBUILD_AFLAGS	+= -Wa,-gdwarf-2
+AFLAGS_DEBUG_INFO = -Wa,-gdwarf-2
+export AFLAGS_DEBUG_INFO
+KBUILD_AFLAGS	+= $(AFLAGS_DEBUG_INFO)
 endif
 ifdef CONFIG_DEBUG_INFO_DWARF4
 KBUILD_CFLAGS	+= $(call cc-option, -gdwarf-4,)
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index f5d7f4134524..080bd9cbc4e1 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -238,7 +238,9 @@ archheaders:
 archmacros:
 	$(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
 
-ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
+ASM_MACRO_FILE = arch/x86/kernel/macros.s
+export ASM_MACRO_FILE
+ASM_MACRO_FLAGS = -Wa,$(ASM_MACRO_FILE)
 export ASM_MACRO_FLAGS
 KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
 
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 6a6be9f440cf..2b79789a3e10 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -155,8 +155,33 @@ $(obj)/%.ll: $(src)/%.c FORCE
 
 quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
 
+# If distcc is used, then when an assembly macro files is needed, the
+# compilation stage and the assembly stage need to be separated. Providing
+# "DISTCC=y" option enables the separate compilation and assembly.
+cmd_cc_o_c_simple = $(CC) $(c_flags) -c -o $(1) $<
+
+ifeq ($(DISTCC),y)
+a_flags_no_debug = $(filter-out $(AFLAGS_DEBUG_INFO), $(a_flags))
+c_flags_no_macros = $(filter-out $(ASM_MACRO_FLAGS), $(c_flags))
+
+cmd_cc_o_c_two_steps =							\
+	$(CC) $(c_flags_no_macros) $(DISABLE_LTO) -fverbose-asm -S 	\
+		-o $(@D)/.$(@F:.o=.s) $< ;				\
+	cat $(ASM_MACRO_FILE) $(@D)/.$(@F:.o=.s) > 			\
+		$(@D)/.tmp_$(@F:.o=.s);					\
+	$(CC) $(a_flags_no_debug) -c -o $(1) $(@D)/.tmp_$(@F:.o=.s) ; 	\
+	rm -f $(@D)/.$(@F:.o=.s) $(@D)/.tmp_$(@F:.o=.s)			\
+
+cmd_cc_o_c_helper =    							\
+	$(if $(findstring $(ASM_MACRO_FLAGS),$(c_flags)),		\
+		$(call cmd_cc_o_c_two_steps, $(1)),			\
+		$(call cmd_cc_o_c_simple, $(1)))
+else
+cmd_cc_o_c_helper = $(call cmd_cc_o_c_simple, $(1))
+endif
+
 ifndef CONFIG_MODVERSIONS
-cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
+cmd_cc_o_c = $(call cmd_cc_o_c_helper,$@)
 
 else
 # When module versioning is enabled the following steps are executed:
@@ -171,7 +196,7 @@ else
 #   replace the unresolved symbols __crc_exported_symbol with
 #   the actual value of the checksum generated by genksyms
 
-cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
+cmd_cc_o_c = $(call cmd_cc_o_c_helper,$(@D)/.tmp_$(@F))
 
 cmd_modversions_c =								\
 	if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then		\
-- 
2.17.1




  reply	other threads:[~2018-11-10 22:04 UTC|newest]

Thread overview: 186+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-03 21:30 [PATCH v9 00/10] x86: macrofying inline asm Nadav Amit
2018-10-03 21:30 ` Nadav Amit
2018-10-03 21:30 ` [PATCH v9 01/10] xtensa: defining LINKER_SCRIPT for the linker script Nadav Amit
2018-10-04 10:00   ` [tip:x86/build] kbuild/arch/xtensa: Define " tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 02/10] Makefile: Prepare for using macros for inline asm Nadav Amit
2018-10-03 21:30   ` Nadav Amit
2018-10-04 10:01   ` [tip:x86/build] kbuild/Makefile: Prepare for using macros in inline assembly code to work around asm() related GCC inlining bugs tip-bot for Nadav Amit
2018-11-06 18:57   ` [PATCH v9 02/10] Makefile: Prepare for using macros for inline asm Logan Gunthorpe
2018-11-06 19:18     ` Nadav Amit
2018-11-06 20:01       ` Logan Gunthorpe
2018-11-07 18:01         ` Nadav Amit
2018-11-07 18:53           ` Logan Gunthorpe
2018-11-07 18:56             ` Nadav Amit
2018-11-07 21:43               ` Logan Gunthorpe
2018-11-07 21:50                 ` hpa
2018-11-08  6:18                   ` Nadav Amit
2018-11-08 17:14                     ` Logan Gunthorpe
2018-11-08 19:54                       ` Nadav Amit
2018-11-08 20:00                         ` Logan Gunthorpe
2018-11-08 20:18                           ` Nadav Amit
2018-11-10 22:04                             ` Nadav Amit [this message]
2018-11-13  4:56                               ` Logan Gunthorpe
2018-10-03 21:30 ` [PATCH v9 03/10] x86: objtool: use asm macro for better compiler decisions Nadav Amit
2018-10-03 21:30   ` Nadav Amit
2018-10-04 10:02   ` [tip:x86/build] x86/objtool: Use asm macros to work around GCC inlining bugs tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 04/10] x86: refcount: prevent gcc distortions Nadav Amit
2018-10-04  7:57   ` Ingo Molnar
2018-10-04  8:33     ` Ingo Molnar
2018-10-04  8:40       ` hpa
2018-10-04  8:56         ` Ingo Molnar
2018-10-04  8:56         ` Nadav Amit
2018-10-04  9:02           ` hpa
2018-10-04  9:16             ` Ingo Molnar
2018-10-04 19:33               ` H. Peter Anvin
2018-10-04 20:05                 ` Nadav Amit
2018-10-04 20:08                   ` H. Peter Anvin
2018-10-04 20:29                 ` Andy Lutomirski
2018-10-04 23:11                   ` H. Peter Anvin
2018-10-06  1:40                 ` Rasmus Villemoes
2018-10-04  9:12           ` Ingo Molnar
2018-10-04  9:17             ` hpa
2018-10-04  9:30             ` Nadav Amit
2018-10-04  9:45               ` Ingo Molnar
2018-10-04 10:23                 ` Nadav Amit
2018-10-05  9:31                   ` Ingo Molnar
2018-10-05 11:20                     ` Borislav Petkov
2018-10-05 12:52                       ` Ingo Molnar
2018-10-05 20:27                     ` [PATCH 0/3] Macrofying inline asm rebased Nadav Amit
2018-10-05 20:27                       ` [PATCH 1/3] x86/extable: Macrofy inline assembly code to work around GCC inlining bugs Nadav Amit
2018-10-06 14:42                         ` [tip:x86/build] " tip-bot for Nadav Amit
2018-10-05 20:27                       ` [PATCH 2/3] x86/cpufeature: " Nadav Amit
2018-10-06 14:43                         ` [tip:x86/build] " tip-bot for Nadav Amit
2018-10-05 20:27                       ` [PATCH 3/3] x86/jump-labels: " Nadav Amit
2018-10-06 14:44                         ` [tip:x86/build] " tip-bot for Nadav Amit
2018-10-08  2:17                     ` [PATCH v9 04/10] x86: refcount: prevent gcc distortions Nadav Amit
2018-10-04  8:40     ` Nadav Amit
2018-10-04  9:01       ` Ingo Molnar
2018-10-04 10:02   ` [tip:x86/build] x86/refcount: Work around GCC inlining bug tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 05/10] x86: alternatives: macrofy locks for better inlining Nadav Amit
2018-10-04 10:03   ` [tip:x86/build] x86/alternatives: Macrofy lock prefixes to work around GCC inlining bugs tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 06/10] x86: bug: prevent gcc distortions Nadav Amit
2018-10-04 10:03   ` [tip:x86/build] x86/bug: Macrofy the BUG table section handling, to work around GCC inlining bugs tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 07/10] x86: prevent inline distortion by paravirt ops Nadav Amit
2018-10-04 10:04   ` [tip:x86/build] x86/paravirt: Work around GCC inlining bugs when compiling " tip-bot for Nadav Amit
2018-10-03 21:30 ` [PATCH v9 08/10] x86: extable: use macros instead of inline assembly Nadav Amit
2018-10-03 21:30 ` [PATCH v9 09/10] x86: cpufeature: " Nadav Amit
2018-10-03 21:31 ` [PATCH v9 10/10] x86: jump-labels: " Nadav Amit
2018-10-07  9:18 ` PROPOSAL: Extend inline asm syntax with size spec Borislav Petkov
2018-10-07  9:18 ` Borislav Petkov
2018-10-07  9:18   ` Borislav Petkov
2018-10-07 13:22   ` Segher Boessenkool
2018-10-07 14:13     ` Borislav Petkov
2018-10-07 14:13       ` Borislav Petkov
2018-10-07 15:14       ` Segher Boessenkool
2018-10-07 15:14         ` Segher Boessenkool
2018-10-08  5:58         ` Ingo Molnar
2018-10-08  5:58         ` Ingo Molnar
2018-10-08  5:58           ` Ingo Molnar
2018-10-08  7:53           ` Segher Boessenkool
2018-10-08  7:53             ` Segher Boessenkool
2018-10-07 14:13     ` Borislav Petkov
2018-10-07 15:53     ` Michael Matz
2018-10-07 15:53       ` Michael Matz
2018-10-08  6:13       ` Ingo Molnar
2018-10-08  6:13         ` Ingo Molnar
2018-10-08  8:18         ` Segher Boessenkool
2018-10-08  8:18           ` Segher Boessenkool
2018-10-08  7:31       ` Segher Boessenkool
2018-10-08  7:31         ` Segher Boessenkool
2018-10-08  9:07         ` Richard Biener
2018-10-08  9:07           ` Richard Biener
2018-10-08 10:02           ` Segher Boessenkool
2018-10-08 10:02             ` Segher Boessenkool
2018-10-09 14:53           ` Segher Boessenkool
2018-10-09 14:53             ` Segher Boessenkool
2018-10-10  6:35             ` Ingo Molnar
2018-10-10  6:35               ` Ingo Molnar
2018-10-10  7:12             ` Richard Biener
2018-10-10  7:12               ` Richard Biener
2018-10-10  7:22               ` Ingo Molnar
2018-10-10  7:22                 ` Ingo Molnar
2018-10-10  8:03                 ` Segher Boessenkool
2018-10-10  8:03                   ` Segher Boessenkool
2018-10-10  8:19                   ` Borislav Petkov
2018-10-10  8:19                   ` Borislav Petkov
2018-10-10  8:19                     ` Borislav Petkov
2018-10-10  8:35                     ` Richard Biener
2018-10-10  8:35                       ` Richard Biener
2018-10-10 18:54                     ` Segher Boessenkool
2018-10-10 18:54                       ` Segher Boessenkool
2018-10-10 19:14                       ` Borislav Petkov
2018-10-10 19:14                       ` Borislav Petkov
2018-10-10 19:14                         ` Borislav Petkov
2018-10-13 19:33                         ` Borislav Petkov
2018-10-13 19:33                           ` Borislav Petkov
2018-10-13 21:14                           ` Alexander Monakov
2018-10-13 21:14                             ` Alexander Monakov
2018-10-13 21:30                             ` Borislav Petkov
2018-10-13 21:30                               ` Borislav Petkov
2018-10-25 10:24                           ` Borislav Petkov
2018-10-25 10:24                           ` Borislav Petkov
2018-10-25 10:24                             ` Borislav Petkov
2018-10-31 12:55                           ` Peter Zijlstra
2018-10-31 12:55                             ` Peter Zijlstra
2018-10-31 13:11                             ` Peter Zijlstra
2018-10-31 13:11                               ` Peter Zijlstra
2018-10-31 16:31                             ` Segher Boessenkool
2018-10-31 16:31                               ` Segher Boessenkool
2018-11-01  5:20                             ` Joe Perches
2018-11-01  5:20                               ` Joe Perches
2018-11-01  9:01                               ` Peter Zijlstra
2018-11-01  9:01                                 ` Peter Zijlstra
2018-11-01  9:20                                 ` Joe Perches
2018-11-01  9:20                                   ` Joe Perches
2018-11-01 11:15                                   ` Peter Zijlstra
2018-11-01 11:15                                     ` Peter Zijlstra
2018-11-01  9:20                                 ` Joe Perches
2018-11-01  5:20                             ` Joe Perches
2018-12-27  4:47                             ` Masahiro Yamada
2018-12-27  4:47                               ` Masahiro Yamada
2018-10-10 10:29                   ` Richard Biener
2018-10-10 10:29                     ` Richard Biener
2018-10-10  7:53               ` Segher Boessenkool
2018-10-10  7:53                 ` Segher Boessenkool
2018-10-10 16:31             ` Nadav Amit
2018-10-10 16:31               ` Nadav Amit
2018-10-10 19:21               ` Segher Boessenkool
2018-10-10 19:21                 ` Segher Boessenkool
2018-10-11  7:04               ` Richard Biener
2018-10-11  7:04                 ` Richard Biener
2018-11-29 11:46             ` Masahiro Yamada
2018-11-29 11:46             ` Masahiro Yamada
2018-11-29 11:46               ` Masahiro Yamada
2018-11-29 12:25               ` Segher Boessenkool
2018-11-29 12:25                 ` Segher Boessenkool
2018-11-30  9:06                 ` Boris Petkov via Virtualization
2018-11-30  9:06                 ` Boris Petkov
2018-11-30  9:06                   ` Boris Petkov
2018-11-30 13:16                   ` Segher Boessenkool
2018-11-30 13:16                     ` Segher Boessenkool
2018-12-10  8:16                     ` Masahiro Yamada
2018-12-10  8:16                       ` Masahiro Yamada
2018-12-10  8:16                     ` Masahiro Yamada
2018-11-29 13:07               ` Borislav Petkov
2018-11-29 13:07                 ` Borislav Petkov via Virtualization
2018-11-29 13:09                 ` Richard Biener
2018-11-29 13:09                   ` Richard Biener
2018-11-29 13:16                   ` Borislav Petkov via Virtualization
2018-11-29 13:16                   ` Borislav Petkov
2018-11-29 13:16                     ` Borislav Petkov
2018-11-29 13:24                     ` Richard Biener
2018-11-29 13:24                       ` Richard Biener
2018-10-08 16:24       ` David Laight
2018-10-08 16:24       ` David Laight
2018-10-08 16:24         ` David Laight
2018-10-07 16:09   ` Nadav Amit
2018-10-07 16:09     ` Nadav Amit
2018-10-07 16:13     ` [RESEND] " Nadav Amit
2018-10-07 16:46     ` Richard Biener
2018-10-07 16:46       ` Richard Biener
2018-10-07 19:06       ` Nadav Amit
2018-10-07 19:06         ` Nadav Amit
2018-10-07 19:52         ` Jeff Law
2018-10-07 19:52           ` Jeff Law
2018-10-08  7:46         ` Richard Biener
2018-10-08  7:46           ` Richard Biener

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=88901B62-7D98-45A2-8881-352A31802933@vmware.com \
    --to=namit@vmware.com \
    --cc=hpa@zytor.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=logang@deltatee.com \
    --cc=mhiramat@kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=mingo@redhat.com \
    --cc=sam@ravnborg.org \
    --cc=sbates@raithlin.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.