Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/powerpc Fix SS_ONSTACK, which seems like broken sin...
details: https://anonhg.NetBSD.org/src/rev/d5620dda6566
branches: trunk
changeset: 973113:d5620dda6566
user: rin <rin%NetBSD.org@localhost>
date: Sun Jun 21 00:00:27 2020 +0000
description:
Fix SS_ONSTACK, which seems like broken since switched to siginfo.
Found by tests/lib/libc/sys/t_sigaltstack, which passes now, while
no other tests are not falling newly.
XXX
Shouldn't we turn _UC_{SET,CLR}STACK into MI?
diffstat:
sys/arch/powerpc/include/mcontext.h | 4 +++-
sys/arch/powerpc/powerpc/sig_machdep.c | 14 ++++++++++++--
2 files changed, 15 insertions(+), 3 deletions(-)
diffs (67 lines):
diff -r fbbede5ecc9a -r d5620dda6566 sys/arch/powerpc/include/mcontext.h
--- a/sys/arch/powerpc/include/mcontext.h Sat Jun 20 21:58:17 2020 +0000
+++ b/sys/arch/powerpc/include/mcontext.h Sun Jun 21 00:00:27 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mcontext.h,v 1.18 2018/02/15 15:53:56 kamil Exp $ */
+/* $NetBSD: mcontext.h,v 1.19 2020/06/21 00:00:27 rin Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -131,6 +131,8 @@
#define _UC_POWERPC_VEC 0x00010000 /* Vector Register File valid */
#define _UC_POWERPC_SPE 0x00020000 /* Vector Register File valid */
#define _UC_TLSBASE 0x00080000 /* thread context valid in R2 */
+#define _UC_SETSTACK 0x00100000
+#define _UC_CLRSTACK 0x00200000
#define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_R1])
#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R31])
diff -r fbbede5ecc9a -r d5620dda6566 sys/arch/powerpc/powerpc/sig_machdep.c
--- a/sys/arch/powerpc/powerpc/sig_machdep.c Sat Jun 20 21:58:17 2020 +0000
+++ b/sys/arch/powerpc/powerpc/sig_machdep.c Sun Jun 21 00:00:27 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sig_machdep.c,v 1.48 2020/04/11 09:15:23 rin Exp $ */
+/* $NetBSD: sig_machdep.c,v 1.49 2020/06/21 00:00:27 rin Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.48 2020/04/11 09:15:23 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.49 2020/06/21 00:00:27 rin Exp $");
#include "opt_ppcarch.h"
#include "opt_altivec.h"
@@ -91,6 +91,8 @@
/* Save register context. */
memset(&uc, 0, sizeof(uc));
uc.uc_flags = _UC_SIGMASK;
+ uc.uc_flags |= (ss->ss_flags & SS_ONSTACK) ?
+ _UC_SETSTACK : _UC_CLRSTACK;
uc.uc_sigmask = *mask;
uc.uc_link = l->l_ctxlink;
sendsig_reset(l, ksi->ksi_signo);
@@ -199,6 +201,7 @@
{
struct trapframe * const tf = l->l_md.md_utf;
const __greg_t * const gr = mcp->__gregs;
+ struct proc * const p = l->l_proc;
int error;
/* Restore GPR context, if any. */
@@ -261,6 +264,13 @@
vec_restore_from_mcontext(l, mcp);
#endif
+ mutex_enter(p->p_lock);
+ if (flags & _UC_SETSTACK)
+ l->l_sigstk.ss_flags |= SS_ONSTACK;
+ if (flags & _UC_CLRSTACK)
+ l->l_sigstk.ss_flags &= ~SS_ONSTACK;
+ mutex_exit(p->p_lock);
+
return (0);
}
Home |
Main Index |
Thread Index |
Old Index