Patchwork [U-Boot] common: remove unaligned access error in bootmenu_getoption()

login
register
mail settings
Submitter Dennis Lan (dlan)
Date June 27, 2013, 10:58 a.m.
Message ID <1372330733-28031-1-git-send-email-dennis.yxun@gmail.com>
Download mbox | patch
Permalink /patch/255037/
State Accepted
Delegated to: Tom Rini
Headers show

Comments

Dennis Lan (dlan) - June 27, 2013, 10:58 a.m.
From: "Lan Yixun (dlan)" <dennis.yxun@gmail.com>

Some ARM compilers may emit code that makes unaligned accesses when
faced with constructs such as:

    char name[12] = "bootmenu_";

same fix as commit: 064d55f8bc8d7d205ed0be6abb6717e92eeb7cad
Tom Rini - July 16, 2013, 2:37 p.m.
On Thu, Jun 27, 2013 at 06:58:53PM +0800, Dennis Lan (dlan) wrote:

> From: "Lan Yixun (dlan)" <dennis.yxun@gmail.com>
> 
> Some ARM compilers may emit code that makes unaligned accesses when
> faced with constructs such as:
> 
>     char name[12] = "bootmenu_";
> 
> same fix as commit: 064d55f8bc8d7d205ed0be6abb6717e92eeb7cad

Applied to u-boot/master, thanks!

Patch

=========================================================
data abort

    MAYBE you should read doc/README.arm-unaligned-accesses

pc : [<3ff4b60c>]          lr : [<3ff4b7b0>]
sp : 3f346a58  ip : 3ff9c8e6     fp : 02000060
r10: 00000000  r9 : 3df47fc0     r8 : 3f347f40
r7 : 00000000  r6 : 00000000     r5 : 00000003  r4 : 3f759140
r3 : 000003f0  r2 : 00000000     r1 : 000003f1  r0 : 00000000
Flags: nzCv  IRQs on  FIQs off  Mode SVC_32
Resetting CPU ...
======================================================

Signed-off-by: Lan Yixun (dlan) <dennis.yxun@gmail.com>
---
 common/cmd_bootmenu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/common/cmd_bootmenu.c b/common/cmd_bootmenu.c
index 7041273..d414c17 100644
--- a/common/cmd_bootmenu.c
+++ b/common/cmd_bootmenu.c
@@ -65,12 +65,12 @@  enum bootmenu_key {
 
 static char *bootmenu_getoption(unsigned short int n)
 {
-	char name[MAX_ENV_SIZE] = "bootmenu_";
+	char name[MAX_ENV_SIZE];
 
 	if (n > MAX_COUNT)
 		return NULL;
 
-	sprintf(name + 9, "%d", n);
+	sprintf(name, "bootmenu_%d", n);
 	return getenv(name);
 }