From: Tetsuyuki Kobayashi <koba@kmckk.co.jp>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] BUGFIX: arm: data abort in get_bad_stack_swi
Date: Fri, 05 Apr 2013 19:04:27 +0900 [thread overview]
Message-ID: <515EA1AB.7020702@kmckk.co.jp> (raw)
In-Reply-To: <20130405090450.7f7a4624@lilith>
Hi Albert
(04/05/2013 04:04 PM), Albert ARIBAUD wrote:
> Hi Tetsuyuki,
>
> On Fri, 5 Apr 2013 10:45:14 +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
>> (But not tested, because I don't have test boards of them)
>> arm/arm/cpu/armv7/start.S is tested on KZM-A9-GT board.
>>
>> arch/arm/cpu/arm1136/start.S | 2 +-
>> arch/arm/cpu/arm1176/start.S | 2 +-
>> arch/arm/cpu/armv7/start.S | 2 +-
>> arch/arm/cpu/pxa/start.S | 2 +-
>> 4 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
>> index eba2324..7b9db2b 100644
>> --- a/arch/arm/cpu/arm1136/start.S
>> +++ b/arch/arm/cpu/arm1136/start.S
>> @@ -392,7 +392,7 @@ 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 r0, [r13] @ restore r0
>> add r13, r13, #4 @ pop stack entry
>
> Sorry for not checking this in V1, but I see that get_bad_stack_swi does
> not preserve lr, so when bad_save_user_regs is expanded, it will save
> the wrong value for lr. You need to restore lr from [r0] before you
> restore r0 from [r13].
Thank you, I was not aware that.
The dumped lr value was wrong.
I am going to post V3 patch for all 4 files.
>
>> diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S
>
>> diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
>
>> diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S
>
> Ditto for all four files, of course.
>
> Amicalement,
>
next prev parent reply other threads:[~2013-04-05 10:04 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 [this message]
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
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=515EA1AB.7020702@kmckk.co.jp \
--to=koba@kmckk.co.jp \
--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.