diff options
author | mjacob <mjacob@FreeBSD.org> | 2007-06-17 04:37:57 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2007-06-17 04:37:57 +0000 |
commit | b967f0e2c083ebf56c6c985d4521867abc2ee2e0 (patch) | |
tree | dd339e9544899f310062be4e332df4ef592a30ab /sys/compat | |
parent | ee0c9012eaf64d6df76e0243aef567ec9709d496 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/compat/freebsd32/freebsd32_misc.c | 9 |
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) { |