[U-Boot] [PATCH] input: fix unaligned access in key_matrix_decode_fdt()

Stephen Warren swarren at wwwdotorg.org
Tue May 28 06:07:46 CEST 2013


On 05/26/2013 01:28 PM, Simon Glass wrote:
> 
> On Wed, May 22, 2013 at 11:48 AM, Stephen Warren <swarren at wwwdotorg.org
> <mailto:swarren at wwwdotorg.org>> wrote:
> 
>     From: Stephen Warren <swarren at nvidia.com <mailto:swarren at nvidia.com>>
> 
>     Initialized character arrays on the stack can cause gcc to emit code
>     that
>     performs unaligned accessess. Make the data static to avoid this.
> 
>     Note that the unaligned accesses are made when copying data to
>     prefix[] on
>     the stack from .rodata. By making the data static, the copy is
>     completely
>     avoided. All explicitly written code treats the data as u8[], so
>     will never
>     cause any unaligned accesses.
> 
>     Signed-off-by: Stephen Warren <swarren at nvidia.com
>     <mailto:swarren at nvidia.com>>
> 
> 
> Acked-by: Simon Glass <sjg at chromium.org <mailto:sjg at chromium.org>>
> 
> Thanks for fixing.
> 
> I hit this with gcc 4.7. I wonder if previous revisions would not make
> this assumption?

IIRC, gcc-4.7 introduces the emission of native unaligned accesses, and
it's been back-ported to Linaro gcc-4.6.

> Another problem I have is that the 'linux' in 'linux,keymap' in the
> device compile turns into '1' since gcc predefines 'linux' to 1:
> 
> I think I'm going to add a -Ulinux to dts/Makefile.

I forget the exact details, but if you check the Linux makefiles for
dtc+cpp, they don't suffer from this issue any more; it may have been
due to use of -x assembler-with-cpp. I do also have a bug filed
internally to NVIDIA to fix that, which is assigned to Tom. But, I'm
sure he'd be glad if you fixed it:-)


More information about the U-Boot mailing list