summaryrefslogtreecommitdiffstats
path: root/sys/compat/freebsd32
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2007-06-17 04:37:57 +0000
committermjacob <mjacob@FreeBSD.org>2007-06-17 04:37:57 +0000
commitb967f0e2c083ebf56c6c985d4521867abc2ee2e0 (patch)
treedd339e9544899f310062be4e332df4ef592a30ab /sys/compat/freebsd32
parentee0c9012eaf64d6df76e0243aef567ec9709d496 (diff)
downloadFreeBSD-src-b967f0e2c083ebf56c6c985d4521867abc2ee2e0.zip
FreeBSD-src-b967f0e2c083ebf56c6c985d4521867abc2ee2e0.tar.gz
Try a cheap way to get around gcc4.2 believing that user arguments
to system calls can change across intervening functions.
Diffstat (limited to 'sys/compat/freebsd32')
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 882177b..663fa8a 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -2053,7 +2053,7 @@ ofreebsd32_sigstack(struct thread *td,
{
struct sigstack32 s32;
struct sigstack nss, oss;
- int error = 0;
+ int error = 0, unss;
if (uap->nss != NULL) {
error = copyin(uap->nss, &s32, sizeof(s32));
@@ -2061,13 +2061,16 @@ ofreebsd32_sigstack(struct thread *td,
return (error);
nss.ss_sp = PTRIN(s32.ss_sp);
CP(s32, nss, ss_onstack);
+ unss = 1;
+ } else {
+ unss = 0;
}
oss.ss_sp = td->td_sigstk.ss_sp;
oss.ss_onstack = sigonstack(cpu_getstack(td));
- if (uap->nss != NULL) {
+ if (unss) {
td->td_sigstk.ss_sp = nss.ss_sp;
td->td_sigstk.ss_size = 0;
- td->td_sigstk.ss_flags |= nss.ss_onstack & SS_ONSTACK;
+ td->td_sigstk.ss_flags |= (nss.ss_onstack & SS_ONSTACK);
td->td_pflags |= TDP_ALTSTACK;
}
if (uap->oss != NULL) {
OpenPOWER on IntegriCloud