[PATCH] score/i386: Add context switch restore external symbol as a marker.

Chris Johns chrisj at rtems.org
Fri Jul 22 06:34:52 UTC 2016


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.

Chris



More information about the devel mailing list