[PATCH v1 1/3] cpukit: Add signal mapping support
Kinsey Moore
kinsey.moore at oarcorp.com
Fri Apr 23 14:28:07 UTC 2021
On 4/20/2021 01:44, Chris Johns wrote:
> On 20/4/21 4:38 pm, Sebastian Huber wrote:
>> On 20/04/2021 08:30, Chris Johns wrote:
>>> On 20/4/21 3:54 pm, Sebastian Huber wrote:
>>>> On 20/04/2021 07:30, Chris Johns wrote:
>>>>
>>>>> We need a way for libdebugger or any other piece of software to capture and
>>>>> cascade the call. If this can be done on aarch64 then I am happy.
>>>> The fatal error extensions execute in a user controllable order. You can for
>>>> example register a libdebugger handler which deals with break point exceptions
>>>> before the signal mapping handler is called.
>>>>
>>>> Synchronous exceptions should end up in an RTEMS_FATAL_SOURCE_EXCEPTION fatal
>>>> error. The fatal code is a pointer to rtems_exception_frame
>>>> (CPU_Exception_frame). In this data structure should be the complete state of
>>>> the interrupted context (which could be also an interrupt handler). If you want
>>>> to resume execution of the interrupted context, then we need an API for this
>>>> (setters/getters and some sort of a longjmp()).
>>> I do not think the fatal error handler support is suitable for a debugger, the
>>> frame maybe on the wrong stack. It was more complicated to implement than this
>>> and the reality of what is needed on the ARM required lots more. The fatal error
>>> handler handles fatal errors however surviving a data abort and then continuing
>>> in the correct CPU context/space and stack is much harder to do ....
>>>
>>> https://git.rtems.org/rtems/tree/cpukit/libdebugger/rtems-debugger-arm.c#n1454
>>>
>>> That code has to work with all data and states saved.
>> Yes, this code is the "some sort of a longjump()". The code mentioned above
>> doesn't seem to be necessarily libdebugger-specific.
> Ah OK we agree :). I would love to see that happen.
>
> The fatal error handler API would then be built on an exception management API.
> I personally believe this is a key piece of functionality RTEMS would benefit
> from. It would make adding signal support easy.
My initial thoughts on an exception management API (EMAPI):
additional CPU port requirements for EMAPI support:
provide functions which operate on CPU Exception Frame (CEF)
get address of exception
get exception class (these will be as granular as possible
while still being arch-agnostic)
set address to resume execution as instruction after exception
set address to resume execution (arbitrary)
upon exception, creates CEF on thread stack and calls into EMAPI
upon return from EMAPI, restores CEF and returns to normal execution
EMAPI:
No architecture-specific information is directly exposed
CEF is provided as a handle on which to operate
architecture-specific details can be pulled from CEF if necessary
handler gets CEF as only argument
handler return value determines whether it took final actions based
on the CEF
handler list is ordered based on priority, but not otherwise keyed
a handler that takes a final action prevents execution of
further handlers
lowest priority handler is always present (frame dump and fatal
extensions run here)
Kinsey
More information about the devel
mailing list