[linux-yocto] [PATCH 30/30] ARM: 7670/1: fix the memset fix

Bruce Ashfield bruce.ashfield at windriver.com
Thu May 1 19:25:55 PDT 2014


Charlie,

As you can see, we managed to get ourselves some extra attention
with git cc'ing the authors and sign-offs on the patch.

Can you double check your send settings and make sure that suppress-cc
is in use ?

Also, as I mentioned in my followup, I already have up to v3.4.88
merged, and this has been in since v3.4.70.

So make sure your tree is up to date, and resend this series once
it is sorted out.

Bruce

On 2014-05-01, 11:29 AM, Charlie Paul wrote:
> From: Nicolas Pitre <nicolas.pitre at linaro.org>
>
> commit 418df63adac56841ef6b0f1fcf435bc64d4ed177 upstream.
>
> Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
> recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
> with the memset return value.  However the memset itself became broken
> by that patch for misaligned pointers.
>
> This fixes the above by branching over the entry code from the
> misaligned fixup code to avoid reloading the original pointer.
>
> Also, because the function entry alignment is wrong in the Thumb mode
> compilation, that fixup code is moved to the end.
>
> While at it, the entry instructions are slightly reworked to help dual
> issue pipelines.
>
> Signed-off-by: Nicolas Pitre <nico at linaro.org>
> Tested-by: Alexander Holler <holler at ahsoftware.de>
> Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
> Cc: Eric Bénard <eric at eukrea.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> ---
>   arch/arm/lib/memset.S |   22 +++-------------------
>   1 file changed, 3 insertions(+), 19 deletions(-)
>
> diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
> index 1039023..94b0650 100644
> --- a/arch/arm/lib/memset.S
> +++ b/arch/arm/lib/memset.S
> @@ -14,27 +14,11 @@
>
>   	.text
>   	.align	5
> -	.word	0
> -
> -1:	subs	r2, r2, #4		@ 1 do we have enough
> -	blt	5f			@ 1 bytes to align with?
> -	cmp	r3, #2			@ 1
> -	strltb	r1, [ip], #1		@ 1
> -	strleb	r1, [ip], #1		@ 1
> -	strb	r1, [ip], #1		@ 1
> -	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
> -/*
> - * The pointer is now aligned and the length is adjusted.  Try doing the
> - * memset again.
> - */
>
>   ENTRY(memset)
> -/*
> - * Preserve the contents of r0 for the return value.
> - */
> -	mov	ip, r0
> -	ands	r3, ip, #3		@ 1 unaligned?
> -	bne	1b			@ 1
> +	ands	r3, r0, #3		@ 1 unaligned?
> +	mov	ip, r0			@ preserve r0 as return value
> +	bne	6f			@ 1
>   /*
>    * we know that the pointer in ip is aligned to a word boundary.
>    */
>



More information about the linux-yocto mailing list