aboutsummaryrefslogtreecommitdiffstats
path: root/arch/xtensa/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/xtensa/kernel/signal.c')
-rw-r--r--arch/xtensa/kernel/signal.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
index d7590dddd084..718eca1850bd 100644
--- a/arch/xtensa/kernel/signal.c
+++ b/arch/xtensa/kernel/signal.c
@@ -337,7 +337,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
337 struct rt_sigframe *frame; 337 struct rt_sigframe *frame;
338 int err = 0; 338 int err = 0;
339 int signal; 339 int signal;
340 unsigned long sp, ra; 340 unsigned long sp, ra, tp;
341 341
342 sp = regs->areg[1]; 342 sp = regs->areg[1];
343 343
@@ -391,7 +391,8 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
391 * Return context not modified until this point. 391 * Return context not modified until this point.
392 */ 392 */
393 393
394 /* Set up registers for signal handler */ 394 /* Set up registers for signal handler; preserve the threadptr */
395 tp = regs->threadptr;
395 start_thread(regs, (unsigned long) ka->sa.sa_handler, 396 start_thread(regs, (unsigned long) ka->sa.sa_handler,
396 (unsigned long) frame); 397 (unsigned long) frame);
397 398
@@ -402,6 +403,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
402 regs->areg[6] = (unsigned long) signal; 403 regs->areg[6] = (unsigned long) signal;
403 regs->areg[7] = (unsigned long) &frame->info; 404 regs->areg[7] = (unsigned long) &frame->info;
404 regs->areg[8] = (unsigned long) &frame->uc; 405 regs->areg[8] = (unsigned long) &frame->uc;
406 regs->threadptr = tp;
405 407
406 /* Set access mode to USER_DS. Nomenclature is outdated, but 408 /* Set access mode to USER_DS. Nomenclature is outdated, but
407 * functionality is used in uaccess.h 409 * functionality is used in uaccess.h