[PATCH] ARM: asm/unified.h: guard the IT macros against redefinition when using LTO

Dave Martin Dave.Martin at arm.com
Mon Jul 27 04:16:15 PDT 2015


On Fri, Jul 24, 2015 at 05:42:15PM -0400, Nicolas Pitre wrote:
> 
> With LTO, the intermediate representation for each .c file contains those
> global assembly macro definitions. When the lot is merged together during
> the final link, we get duplicate definition errors:
> 
> [...]
> /tmp/cc48fUMp.s:42352: Error: Macro `it' was already defined
> /tmp/cc48fUMp.s:42354: Error: Macro `itt' was already defined
> /tmp/cc48fUMp.s:42356: Error: Macro `ite' was already defined
> [...]
> 
> Guard those against redefinitions.
> 
> Signed-off-by: Nicolas Pitre <nico at linaro.org>

Reviewed-by: Dave Martin <Dave.Martin at arm.com>

I have a vague memory of hitting this before, but LTO had other problems
at the time...

Another scary thing with LTO is asms that use directives like
.arch_extension, .fpu etc. that will stay active for the rest of the LTO
unit of nothing is done about it.

I can't remember whether that was resolved somehow.

Cheers
---Dave
 
> diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h
> index a91ae49961..ee257a3de7 100644
> --- a/arch/arm/include/asm/unified.h
> +++ b/arch/arm/include/asm/unified.h
> @@ -103,6 +103,8 @@
>  	.endm
>  #else	/* !__ASSEMBLY__ */
>  __asm__(
> +/* the .L_it_macros_defined guards against redefinition in the LTO case */
> +"	.ifndef	.L_it_macros_defined\n"
>  "	.macro	it, cond\n"
>  "	.endm\n"
>  "	.macro	itt, cond\n"
> @@ -132,7 +134,9 @@ __asm__(
>  "	.macro	iteet, cond\n"
>  "	.endm\n"
>  "	.macro	iteee, cond\n"
> -"	.endm\n");
> +"	.endm\n"
> +"	.set	.L_it_macros_defined,1\n"
> +"	.endif");
>  #endif	/* __ASSEMBLY__ */
>  
>  #endif	/* CONFIG_ARM_ASM_UNIFIED */
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel




More information about the linux-arm-kernel mailing list