Re: [PATCH] s390: Add assembler-level include guard to insn-common-asm.h

From: Alexander Gordeev

Date: Tue Nov 03 2026 - 11:46:57 EST


On Mon, Nov 02, 2026 at 05:51:03PM +0100, Steffen Eiden wrote:

Hi Steffen,

> The CPP include guard of insn-common-asm.h is ineffective when the file
> is read via a gas-level .include from inline asm. The assembler ignores
> all '#' lines, so every .include redefines GR_NUM/VX_NUM and fails with
> "Macro was already defined" if a translation unit emits more than one
> such include. This is not the case right now but may lead to future
> build issues.
>
> Add a .ifndef guard with an L-prefixed (local, non-emitted) symbol so
> the file can be include multiple times per assembly unit.
>
> Fixes: 495bc70aa3225 ("s390/fpu: Move GR_NUM / VX_NUM macros to separate header file")

I have a problem with Fixes here:
- as you noted above nothing fails right now
- the same behaviour was there before 495bc70aa3225 commit

Is there a real problem this patch fixes?

Do you happen to know why some other archs use .purgem in similar cases
(aka though appears ugly, should not we use .purgem too)?

> Signed-off-by: Steffen Eiden <seiden@xxxxxxxxxxxxx>
> ---
> arch/s390/include/asm/insn-common-asm.h | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/arch/s390/include/asm/insn-common-asm.h b/arch/s390/include/asm/insn-common-asm.h
> index fd9b3cacb7c5..060116719846 100644
> --- a/arch/s390/include/asm/insn-common-asm.h
> +++ b/arch/s390/include/asm/insn-common-asm.h
> @@ -9,6 +9,10 @@
>
> #ifdef __ASSEMBLER__
>
> +/* Prevent duplicated GAS macro definitions. CPP guards have no effect for GAS.*/
> +.ifndef .Lasm_s390_insn_common_asm_h
> +.Lasm_s390_insn_common_asm_h = 1
> +
> /*
> * GR_NUM - Retrieve general-purpose register number
> *
> @@ -49,5 +53,7 @@
> .endif
> .endm
>
> +.endif /* .Lasm_s390_insn_common_asm_h */
> +
> #endif /* __ASSEMBLER__ */
> #endif /* __ASM_S390_INSN_COMMON_ASM_H */

Thanks!