[PATCH] score/i386: Add context switch restore external symbol as a marker.
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Jul 22 06:44:34 UTC 2016
On 22/07/16 08:43, Sebastian Huber wrote:
>
>
> On 22/07/16 08:34, Chris Johns wrote:
>> On 22/07/2016 16:10, Sebastian Huber wrote:
>>> On i386 the PC is stored on the stack frame:
>>>
>>> #define _CPU_Context_Initialize( _the_context, _stack_base, _size, \
>>> _isr, _entry_point, _is_fp,
>>> _tls_area ) \
>>> do { \
>>> uint32_t _stack; \
>>> \
>>> (void) _is_fp; /* avoid warning for being unused */ \
>>> if ( (_isr) ) (_the_context)->eflags =
>>> CPU_EFLAGS_INTERRUPTS_OFF; \
>>> else (_the_context)->eflags = CPU_EFLAGS_INTERRUPTS_ON; \
>>> \
>>> _stack = ((uint32_t)(_stack_base)) + (_size); \
>>> _stack &= ~ (CPU_STACK_ALIGNMENT - 1); \
>>> _stack -= 2*sizeof(proc_ptr*); /* see above for why we need to do
>>> this */ \
>>> *((proc_ptr *)(_stack)) = (_entry_point); \
>>> (_the_context)->ebp = (void *) 0; \
>>> (_the_context)->esp = (void *) _stack; \
>>> } while (0)
>>>
>>> The stack pointer is part of the context. If you retrieve the PC from
>>> here it should work for all threads.
>>
>> All threads on the i386 arch or all threads on all archs?
>>
>> I would like to make this simpler for all archs. I do not mind if we
>> require something being added to each arch to do this but I would
>> like an interface somewhere and somehow.
>
> I don't think that the thread context reconstruction can be done in an
> architecture independent way. You have different register sets and
> different ways to store the PC. For example on x86 the PC is on the
> stack, on ARM you have Context_Control::register_lr, on PowerPC
> ppc_context::lr which is embedded in Context_Control due to cache line
> alignment, on SPARC you have Context_Control::o7, and so on.
>
> I would rather provide a global function that provides the data for
> your consumer (libunwind?) with a common interface for all
> architectures and an architecture dependent implementation. The
> debugger could call this function.
>
For the stack checker extension we have for example _CPU_Context_Get_SP().
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list