On 20/4/21 5:02 am, Kinsey Moore wrote:
> On 4/18/2021 20:18, Chris Johns wrote:
>> On 19/4/21 9:23 am, Joel Sherrill wrote:
>>>
>>> On Sun, Apr 18, 2021, 5:13 PM Chris Johns <chr...@rtems.org
>>> <mailto:chr...@rtems.org>> wrote:
>>>
>>>      On 17/4/21 10:00 am, Kinsey Moore wrote:
>>>      > On 4/16/2021 08:48, Gedare Bloom wrote:
>>>      >> On Fri, Apr 16, 2021 at 1:19 AM Sebastian Huber
>>>      >> <sebastian.hu...@embedded-brains.de
>>>      <mailto:sebastian.hu...@embedded-brains.de>> wrote:
>>>      >>> Hello Kinsey,
>>>      >>>
>>>      >>> why don't you use a fatal error extension for this? You can save 
>>> all
>>> the
>>>      >>> processor state to a structure and use it to jump to previous or 
>>> next
>>>      >>> instruction it if needed in a custom fatal error handler which 
>>> deals
>>>      >>> with RTEMS_FATAL_EXCEPTION. I think libdebugger uses this approach.
>>>      >>>
>>>      >> +1
>>>      >>
>>>      >> This is otherwise a major overhaul/addition to the CPU port
>>>      >> requirements. I'd lean in favor of adding any CPU_* API that is
>>>      >> necessary to support vectoring from an exception to a signal. I 
>>> don't
>>>      >> think we can make this kind of intrusive modification to basic
>>>      >> interrupt handling capabilities across all ports easily. Some of 
>>> that
>>>      >> code is old and very stable.
>>>      >
>>>      > I avoided going that direction to maintain the interrupt stack since 
>>> an
>>>      > exception return from within those handlers would necessarily leave
>>> the CPU
>>>      > state as well as intervening functions on the stack along with a 
>>> minor
>>>      amount of
>>>      > data on the thread stack. In addition, thread dispatch needs to occur
>>> and all
>>>      > exception handling for AArch64 (as modeled after ARM) is currently
>>> considered
>>>      > final with no way to reasonably return to execution.
>>>      >
>>>      > Not every platform will need this kind of intrusive change. Any
>>> platform that
>>>      > handles exceptions in a manner similar to IRQs can deal with this
>>> exception
>>>      > mapping far more trivially. ARM and AArch64 don't have that luxury,
>>> but SPARC
>>>      > does and I assume others do as well.
>>>
>>>      How would a user in an application debug a data abort error if all they
>>> get is a
>>>      signal?
>>>
>>>
>>> This is optional and just the way certain Ada exceptions work.
>> Optional means what? What about other optional pieces?
>>
>> Does the change have a wider use case than Ada? I think it may which is good.
>> As a result I feel we need to consider other users of exceptions and how they
>> may interact with this change.
> I think Joel meant optional the same way libdebugger is optional. This change
> operates the same way on AArch64 that libdebugger operates on ARMv7.
>>
>>> If the user
>>> wanted more detail, they would like have to poke directly before it becomes 
>>> a
>>> signal.
>> I would connect a debugger and then expect to have the pc left at the 
>> faulting
>> instruction. At a technical level this means the faulting exception frame 
>> needs
>> to be handled and not compacted down to a single signal. On a 32 bit ARM it 
>> is a
>> very difficult piece of code and I would be pleasantly surprised if you did 
>> not
>> need this on an aarch64.
> It's likely to be just as painful as ARMv7. I spent part of the morning
> reviewing the relevant libdebugger code and both hook directly into the vector
> table. As things stand, libdebugger and this code can not coexist on ARMv7 or
> AArch64.

I suppose the debugger needs to be able to capture the exceptions over this
code. I think that works?

>>
>>>      How would this type of signal support be implemented on the 32bit ARM
>>> arch and
>>>      maintain libdebugger support?
>>>
>>> Is there a technical limitation I don't know about? On the SPARC, it 
>>> recognizes
>>> that only certain faults can be mapped.
>> Not specifically, I am just wondering how each part of our code integrates. 
>> Does
>> adding aarch64 to libdebugger need to work with these changes so the signal
>> exception confdef option is still works? And then the other way around does
>> adding exception signal support to the 32 bit ARM have to deal with 
>> libdebugger
>> as it exists? Who is paying the tax and what does it look like?
> 
> The current implementation of both libdebugger on ARMv7 and this exception to
> signal translator on AArch64 are very similar in how they operate. libdebugger
> on ARMv7 hooks every exception type at the vector table while this translator
> hooks the common/unified exception vector for AArch64. There isn't currently a
> way they could even partially share the exceptions as there isn't a mechanism
> available to register hooks to them individually.
> 
> Some form of sharing could be possible on SPARC since both exceptions and IRQs
> are just different ranges of traps (all of which have handler hooks), but with
> possibly reduced functionality on the libdebugger side since some of the
> exceptions libdebugger typically catches would instead get translated and 
> pushed
> into whichever runtime was operating, be it Ada, C++, Fortran, etc..

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.

>>>      How would libdebugger be integrated on the aarch64 with this change?
>>>
>>> Again what's the limitation? You appear to there's something about the
>>> architecture that would cause a clash.
>> Are the exceptions a shared resource or exclusive? If shared, how? If 
>> exclusive
>> does this mean an aarch64 libdebugger back end does not need to deal with the
>> same exceptions and this change?
> They are currently exclusive as a block as implemented on ARMv7 and AArch64. 
> For
> these two to coexist, there would need to be a mechanism to attach handlers to
> various machine-specific exceptions. They could also be shoehorned into the
> interrupt handler table at an offset to get behavior more similar to SPARC.
>>
>> Are the exceptions chained?
> 
> Neither libdebugger nor signal translation allows for exception chaining.

Are you sure?

https://git.rtems.org/rtems/tree/cpukit/libdebugger/rtems-debugger-arm.c#n1366

It does this for the ARM and i386. For example if libdebugger detects the
exception is in itself that exception is cascaded.

Chris
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to