diff --git a/arch/sim/src/sim/up_initialstate.c b/arch/sim/src/sim/up_initialstate.c index 3ddb1128d7..129d3be8ee 100644 --- a/arch/sim/src/sim/up_initialstate.c +++ b/arch/sim/src/sim/up_initialstate.c @@ -67,6 +67,6 @@ void up_initial_state(struct tcb_s *tcb) { memset(&tcb->xcp, 0, sizeof(struct xcptcontext)); - tcb->xcp.regs[JB_SP] = (xcpt_reg_t)tcb->adj_stack_ptr; + tcb->xcp.regs[JB_SP] = (xcpt_reg_t)tcb->adj_stack_ptr - sizeof(xcpt_reg_t); tcb->xcp.regs[JB_PC] = (xcpt_reg_t)tcb->start; } diff --git a/arch/sim/src/sim/up_stackframe.c b/arch/sim/src/sim/up_stackframe.c index eecb3668af..887de5c703 100644 --- a/arch/sim/src/sim/up_stackframe.c +++ b/arch/sim/src/sim/up_stackframe.c @@ -124,7 +124,7 @@ FAR void *up_stack_frame(FAR struct tcb_s *tcb, size_t frame_size) /* Reset the initial state */ - tcb->xcp.regs[JB_SP] = (xcpt_reg_t)tcb->adj_stack_ptr; + tcb->xcp.regs[JB_SP] = (xcpt_reg_t)tcb->adj_stack_ptr - sizeof(xcpt_reg_t); /* And return a pointer to the allocated memory */