ARMv7M Exception Handler
sudarshan.rajagopalan
sudarshan.rajagopalan at vecna.com
Fri Aug 28 16:19:50 UTC 2015
On 2015-08-28 11:37, Daniel Gutson wrote:
> On Fri, Aug 28, 2015 at 12:33 PM, sudarshan.rajagopalan
> <sudarshan.rajagopalan at vecna.com> wrote:
>> 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!
>
> As I mentioned before, please mention what architecture you tested
> (what use cases) and which you didn't.
Hi Daniel, I have replied to the same question in the thread containing
the patch.
>
>>
>>> 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