cmd/fdt.c align data buffer to avoid unaligned word access
authorBernhard Messerklinger <bernhard.messerklinger@br-automation.com>
Thu, 28 Sep 2017 09:29:52 +0000 (11:29 +0200)
committerSimon Glass <sjg@chromium.org>
Fri, 17 Nov 2017 01:45:05 +0000 (18:45 -0700)
Since the compiler is free to place a char array to any address in
memory (in this case the stack), also to a non word aligned address the
function "fdt_prop_parse" runs into troubles upon it wants to write some
(fdt32_t *) to such a variable (if it has been placed to a none word
aligned address).

To avoid this we tell the compiler to always align this scratchpad to a
word aligned address.

Signed-off-by: Bernhard Messerklinger <bernhard.messerklinger@br-automation.com>
Reviewed-by: Hannes Schmelzer <oe5hpm@oevsv.at>
Tested-by: Hannes Schmelzer <oe5hpm@oevsv.at>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/fdt.c

index 955a0088c6ef31f16c77e5befee761a21fdded69..b783b0df427c848ffd04f07662e27147fa6e2e22 100644 (file)
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -256,7 +256,7 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                char *pathp;            /* path */
                char *prop;             /* property */
                int  nodeoffset;        /* node offset from libfdt */
-               static char data[SCRATCHPAD];   /* storage for the property */
+               static char data[SCRATCHPAD] __aligned(4);/* property storage */
                const void *ptmp;
                int  len;               /* new length of the property */
                int  ret;               /* return value */