From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3] BUGFIX: arm: data abort in get_bad_stack_swi
Date: Sat, 13 Apr 2013 13:37:15 +0200 [thread overview]
Message-ID: <20130413133715.24d6fa98@lilith> (raw)
In-Reply-To: <1365156772-31846-1-git-send-email-koba@kmckk.co.jp>
Hi Tetsuyuki,
On Fri, 5 Apr 2013 19:12:51 +0900, Tetsuyuki Kobayashi
<koba@kmckk.co.jp> wrote:
> When swi instruction is executed, it is expected to get message
> "software interrupt" in console and dump registers and reboot, as
> do_software_interrupt() in arch/arm/lib/interrupts.c.
> But, actually it causes data abort accessing wrong address in get_bad_stack_swi
> macro in arch/arm/cpu/v7/start.S.
> This patch fixes this problem.
>
> The same mistake in arch/arm/cpu/{arm1136,arm1176,pxa}/start.S.
>
> Signed-off-by: Tetsuyuki Kobayashi <koba@kmckk.co.jp>
> ---
> Changes for v2:
> - added arch/arm/cpu/{arm1136,arm1176,pxa}/start.S
> Changes for v3:
> - restore lr register in all 4 files.
> Only arm/arm/cpu/armv7/start.S is tested on KZM-A9-GT board.
>
> arch/arm/cpu/arm1136/start.S | 3 ++-
> arch/arm/cpu/arm1176/start.S | 4 +++-
> arch/arm/cpu/armv7/start.S | 3 ++-
> arch/arm/cpu/pxa/start.S | 3 ++-
> 4 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
> index eba2324..bccfdbf 100644
> --- a/arch/arm/cpu/arm1136/start.S
> +++ b/arch/arm/cpu/arm1136/start.S
> @@ -392,8 +392,9 @@ cpu_init_crit:
> str r0, [r13] @ save R0's value.
> ldr r0, IRQ_STACK_START_IN @ get data regions start
> str lr, [r0] @ save caller lr in position 0 of saved stack
> - mrs r0, spsr @ get the spsr
> + mrs lr, spsr @ get the spsr
> str lr, [r0, #4] @ save spsr in position 1 of saved stack
> + ldr lr, [r0] @ restore lr
> ldr r0, [r13] @ restore r0
> add r13, r13, #4 @ pop stack entry
> .endm
> diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S
> index 3c291fb..694f79d 100644
> --- a/arch/arm/cpu/arm1176/start.S
> +++ b/arch/arm/cpu/arm1176/start.S
> @@ -480,9 +480,11 @@ phy_last_jump:
> /* save caller lr in position 0 of saved stack */
> str lr, [r0]
> /* get the spsr */
> - mrs r0, spsr
> + mrs lr, spsr
> /* save spsr in position 1 of saved stack */
> str lr, [r0, #4]
> + /* restore lr */
> + ldr lr, [r0]
> /* restore r0 */
> ldr r0, [r13]
> /* pop stack entry */
> diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
> index 36a4c3c..e5e157b 100644
> --- a/arch/arm/cpu/armv7/start.S
> +++ b/arch/arm/cpu/armv7/start.S
> @@ -465,9 +465,10 @@ ENDPROC(cpu_init_crit)
> @ spots for abort stack
> str lr, [r0] @ save caller lr in position 0
> @ of saved stack
> - mrs r0, spsr @ get the spsr
> + mrs lr, spsr @ get the spsr
> str lr, [r0, #4] @ save spsr in position 1 of
> @ saved stack
> + ldr lr, [r0] @ restore lr
> ldr r0, [r13] @ restore r0
> add r13, r13, #4 @ pop stack entry
> .endm
> diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S
> index 456a783..9c525e8 100644
> --- a/arch/arm/cpu/pxa/start.S
> +++ b/arch/arm/cpu/pxa/start.S
> @@ -387,8 +387,9 @@ cpu_init_crit:
> str r0, [r13] @ save R0's value.
> ldr r0, IRQ_STACK_START_IN @ get data regions start
> str lr, [r0] @ save caller lr in position 0 of saved stack
> - mrs r0, spsr @ get the spsr
> + mrs lr, spsr @ get the spsr
> str lr, [r0, #4] @ save spsr in position 1 of saved stack
> + ldr lr, [r0] @ restore lr
> ldr r0, [r13] @ restore r0
> add r13, r13, #4 @ pop stack entry
> .endm
Applied to u-boot-arm/master, thanks!
Amicalement,
--
Albert.
prev parent reply other threads:[~2013-04-13 11:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-04 4:52 [U-Boot] [PATCH] BUGFIX: arm: armv7: data abort in get_bad_stack_swi Tetsuyuki Kobayashi
2013-04-04 6:21 ` Albert ARIBAUD
2013-04-04 6:24 ` Albert ARIBAUD
2013-04-04 10:29 ` Tetsuyuki Kobayashi
2013-04-05 1:45 ` [U-Boot] [PATCH v2] BUGFIX: arm: " Tetsuyuki Kobayashi
2013-04-05 7:04 ` Albert ARIBAUD
2013-04-05 10:04 ` Tetsuyuki Kobayashi
2013-04-05 10:12 ` [U-Boot] [PATCH v3] " Tetsuyuki Kobayashi
2013-04-11 9:47 ` Tetsuyuki Kobayashi
2013-04-13 11:37 ` Albert ARIBAUD [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130413133715.24d6fa98@lilith \
--to=albert.u.boot@aribaud.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.