powerpc: Reset MSR_LE on signal entry
We always take signals in big endian which is wrong. Signals should be taken in native endian. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
ef1967ff87
Коммит
e871c6bbf6
|
@ -1045,8 +1045,9 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
|
|||
regs->gpr[5] = (unsigned long) &rt_sf->uc;
|
||||
regs->gpr[6] = (unsigned long) rt_sf;
|
||||
regs->nip = (unsigned long) ka->sa.sa_handler;
|
||||
/* enter the signal handler in big-endian mode */
|
||||
/* enter the signal handler in native-endian mode */
|
||||
regs->msr &= ~MSR_LE;
|
||||
regs->msr |= (MSR_KERNEL & MSR_LE);
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
/* Remove TM bits from thread's MSR. The MSR in the sigcontext
|
||||
* just indicates to userland that we were doing a transaction, but we
|
||||
|
|
|
@ -773,8 +773,9 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info,
|
|||
|
||||
/* Set up "regs" so we "return" to the signal handler. */
|
||||
err |= get_user(regs->nip, &funct_desc_ptr->entry);
|
||||
/* enter the signal handler in big-endian mode */
|
||||
/* enter the signal handler in native-endian mode */
|
||||
regs->msr &= ~MSR_LE;
|
||||
regs->msr |= (MSR_KERNEL & MSR_LE);
|
||||
regs->gpr[1] = newsp;
|
||||
err |= get_user(regs->gpr[2], &funct_desc_ptr->toc);
|
||||
regs->gpr[3] = signr;
|
||||
|
|
Загрузка…
Ссылка в новой задаче