[PATCH] Beaglebone: fix missing clobber in inline assembly.

Joel Sherrill joel.sherrill at oarcorp.com
Thu Sep 10 15:48:25 UTC 2015


Marco,

This looks fine and I will apply it but I want to put it on 4.11
and master. Can you file a quick ticket on it?

Thanks.

--joel

On 9/10/2015 10:20 AM, Marcos Diaz wrote:
> flush_data_cache uses R0 directly but doesn't list it as a clobbered register.
> Compiling with -O3 made this code break, since the function that calls flush_data_cache
> already uses r0.
> ---
>   c/src/lib/libbsp/arm/beagle/include/bsp.h | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/c/src/lib/libbsp/arm/beagle/include/bsp.h b/c/src/lib/libbsp/arm/beagle/include/bsp.h
> index 0250749..d9fd2ae 100644
> --- a/c/src/lib/libbsp/arm/beagle/include/bsp.h
> +++ b/c/src/lib/libbsp/arm/beagle/include/bsp.h
> @@ -112,7 +112,13 @@ static inline void isb(void)
>   /* flush data cache */
>   static inline void flush_data_cache(void)
>   {
> -    asm volatile("mov r0, #0; mcr p15, #0, r0, c7, c10, #4" : : : "memory");
> +    asm volatile(
> +        "mov r0, #0\n"
> +        "mcr p15, #0, r0, c7, c10, #4\n"
> +        : /* No outputs */
> +        : /* No inputs */
> +        : "r0","memory"
> +    );
>   }
>
>   #define __arch_getb(a)      (*(volatile unsigned char *)(a))
>

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the devel mailing list