ARMv7M Exception Handler
sudarshan.rajagopalan
sudarshan.rajagopalan at vecna.com
Fri Aug 28 15:33:14 UTC 2015
On 2015-08-27 17:06, Joel Sherrill wrote:
> On 8/27/2015 3:58 PM, Daniel Gutson wrote:
>> On Thu, Aug 27, 2015 at 3:53 PM, sudarshan.rajagopalan
>> <sudarshan.rajagopalan at vecna.com> wrote:
>>> Hey guys,
>>>
>>> I was working on the exception handler for the CPU hard fault.
>>> Managed to
>>> register the fatal error user extension to RTEMS and call the user
>>> defined
>>> function when an exception occurs. But the pointer to the stacked
>>> frame
>>> didn't have the correct register values(esp. the PC register). So I
>>> looked
>>> into the assembly code in
>>> /cpukit/score/cpu/arm/armv7m-exception-default.c,
>>> where it decides which stack pointer was used (MSP or PSP) before the
>>> exception occurred depending on the error code returned in the Link
>>> Register. After carefully examining all the assembly instructions, I
>>> guess
>>> theres a little bug in the code.
>>>
>>> The instruction "cmn r2, #3\n" in line 31 basically compares the Link
>>> Register(lr) to value 0xFFFFFFFD (negative #3, because CMN negates
>>> the RHS
>>> and compares with LHS) and chooses MSP or PSP in the following IT
>>> block.
>>> This is pretty cool! But, it will not work if you have the
>>> floating-point
>>> unit (FPU) enabled in your processor, which is enabled in mine. With
>>> FPU
>>> enabled, the error code returned is either 0xFFFFFFE9 or 0xFFFFFFED,
>>> for
>>> which the above assembly instruction will not work out and MSP will
>>> be
>>> selected always.
>>>
>>> Better way to do is to check the 2nd bit of the error code to
>>> determine
>>> which stack pointer was used before the exception happened - "tst lr,
>>> #4\n"
>>> and change the IT block from "itt ne" to "itt eq" and the "mov" and
>>> "add"
>>> within this IT block.
>>>
>>> Have tested this with the above changes and it works. I have sent the
>>> patch
>>> "0001-Fix-exception-handler-for-supporting-FPU.patch" to the devel
>>> mailing
>>> list that fixes this problem. :)
>>
>> Nice. Have you tested this without FPU support too?
Hi Daniel,
Just tested the fix with FPU disabled in my processor and it works fine.
This patch can be pushed!
> Daniel .. when you are happy, we can push it.
>
> Should this go on the 4.11 branch and master? If so, it needs a ticket.
Joel, I think this fix is vital and should be pushed to master. Will
make a ticket for this.
Thanks and Regards,
Sudarshan
--
Sudarshan Rajagopalan
sudarshan.rajagopalan at vecna.com
www.vecna.com
>
>>> Thanks and Regards,
>>> Sudarshan
>>> _______________________________________________
>>> devel mailing list
>>> devel at rtems.org
>>> http://lists.rtems.org/mailman/listinfo/devel
>>
>>
>>
More information about the devel
mailing list