Fix excepion handling reg save
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3074 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
2b04ad72ee
commit
017ed0b582
|
@ -233,8 +233,8 @@ avr32_xcptcommon:
|
|||
/* xx xx xx xx xx xx xx xx xx SR PC LI 12 11 10 SR PC */
|
||||
/* ^ ^+8*4 */
|
||||
|
||||
ld.w r11, sp[4*4]
|
||||
ld.w r12, sp[5*4]
|
||||
ld.w r12, sp[4*4]
|
||||
ld.w r11, sp[5*4]
|
||||
stm --sp, r11-r12
|
||||
|
||||
/* Save r8 and r8: */
|
||||
|
|
|
@ -70,7 +70,10 @@
|
|||
* pointer (hence, interrupts must be disabled), and (b) there is the
|
||||
* very real possibility that the new stack pointer might overlap with
|
||||
* the register save area and stack usage in this function might corrupt
|
||||
* the register save data before the state is restored.
|
||||
* the register save data before the state is restored. It turns that
|
||||
* an extra 3 words in the register save structure size will protect its
|
||||
* contents (because that is the number of temporaries pushed onto the
|
||||
* stack).
|
||||
*
|
||||
* Input Parameters:
|
||||
* r12 = A pointer to the register save area of the thread to be restored.
|
||||
|
|
|
@ -82,7 +82,11 @@
|
|||
void up_sigdeliver(void)
|
||||
{
|
||||
_TCB *rtcb = (_TCB*)g_readytorun.head;
|
||||
#if 0
|
||||
uint32_t regs[XCPTCONTEXT_REGS+3]; /* Why +3? See below */
|
||||
#else
|
||||
uint32_t regs[XCPTCONTEXT_REGS];
|
||||
#endif
|
||||
sig_deliver_t sigdeliver;
|
||||
|
||||
/* Save the errno. This must be preserved throughout the signal handling
|
||||
|
@ -140,7 +144,9 @@ void up_sigdeliver(void)
|
|||
* dangerous because there is the very real possibility that the new
|
||||
* stack pointer might overlap with the register save area and hat stack
|
||||
* usage in up_fullcontextrestore might corrupt the register save data
|
||||
* before the state is restored.
|
||||
* before the state is restored. At present, there does not appear to
|
||||
* be any stack overlap problems. If there were, then adding 3 words
|
||||
* to the size of register save structure size will protect its contents.
|
||||
*/
|
||||
|
||||
up_ledoff(LED_SIGNAL);
|
||||
|
|
|
@ -432,4 +432,8 @@ Where <subdir> is one of the following:
|
|||
This configuration directory, performs a simple OS test using
|
||||
examples/ostest.
|
||||
|
||||
NOTE: Round-robin scheduling is disabled in this test because
|
||||
the RR test in examples/ostest declares data structures that
|
||||
are too large for the poor little uc3 SRAM.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue