Re: [PATCH v8 02/10] Makefile: Prepare for using macros for inline asm

From: Nadav Amit
Date: Wed Sep 26 2018 - 13:56:52 EST


at 1:58 AM, Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx> wrote:

> On 2018-09-18 23:28, Nadav Amit wrote:
>
>> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
>> index 8f6e7eb8ae9f..944fa3bc9376 100644
>> --- a/arch/x86/Makefile
>> +++ b/arch/x86/Makefile
>> @@ -214,8 +214,8 @@ ifdef CONFIG_X86_64
>> KBUILD_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
>
> Is this really necessary? The gas manual says that one can use -- to
> name stdin, though that's probably a typo and should just be - . Doing
>
> gcc -pipe -Wa,foo.s -Wa,-

Good idea. I didnât think of it. Yes, this can do the trick. Iâll do it in
v9.

> does seem to work as expected (and would also make it possible to append
> some .s file should that ever be required).
>> +archmacros:
>> + $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
>> +
>> +ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
>> +export ASM_MACRO_FLAGS
>> +KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
> How does this affect what gets rebuilt when one of the asm/foo.h files
> going into macros.s changes? Does that cause a global rebuild because
> everything depends on macros.s, or do we still only rebuild the files
> that actually include asm/foo.h?

There will not be a global rebuild. Any source file that uses the header
files that are included in macros.S will be rebuilt.

But your question actually raises two issues:

1. If macros.S changes, there *should* be a global rebuild, and currently
there wouldnât be one. Do you happen to know what would be the appropriate
way to trigger one?

2. Someone might mistakenly use the macros through inline assembly without
including the header file. It would be better to detect such cases and fail
the build. I may be able to create another asm macro in the C part of the
header that would cause the build to fail. But let me know if you any
better idea.

Regards,
Nadav