diff options
Diffstat (limited to 'sys/alpha/linux/linux_sysvec.c')
-rw-r--r-- | sys/alpha/linux/linux_sysvec.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/sys/alpha/linux/linux_sysvec.c b/sys/alpha/linux/linux_sysvec.c index 188e3d5a5b69..b8639516ef86 100644 --- a/sys/alpha/linux/linux_sysvec.c +++ b/sys/alpha/linux/linux_sysvec.c @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: linux_sysvec.c,v 1.39 1998/12/14 18:54:01 dt Exp $ + * $Id: linux_sysvec.c,v 1.40 1998/12/16 16:28:57 bde Exp $ */ /* XXX we use functions that might not exist. */ @@ -50,6 +50,10 @@ #include <vm/vm_prot.h> #include <vm/vm_page.h> #include <vm/vm_extern.h> +#ifdef COMPAT_LINUX_THREADS +#include <sys/lock.h> /* needed, for now, by vm_map.h */ +#include <vm/vm_map.h> /* needed, for now, for VM_STACK defines */ +#endif /* COMPAT_LINUX_THREADS */ #include <sys/exec.h> #include <sys/kernel.h> #include <sys/module.h> @@ -217,7 +221,24 @@ linux_sendsig(sig_t catcher, int sig, int mask, u_long code) * and the stack can not be grown. useracc will return FALSE * if access is denied. */ +#ifdef COMPAT_LINUX_THREADS +#ifdef USE_VM_STACK +#ifndef USE_VM_STACK_FOR_EXEC + if ((((caddr_t)fp > p->p_vmspace->vm_maxsaddr && + (caddr_t)fp < (caddr_t)USRSTACK && + grow(p, (int)fp) == FALSE) || + (((caddr_t)fp <= p->p_vmspace->vm_maxsaddr || + (caddr_t)fp >= (caddr_t)USRSTACK) && + grow_stack (p, (int)fp) == FALSE)) || +#else + if ((grow_stack (p, (int)fp) == FALSE) || +#endif +#else +#endif /* COMPAT_LINUX_THREADS */ if ((grow(p, (int)fp) == FALSE) || +#ifdef COMPAT_LINUX_THREADS +#endif +#endif /* COMPAT_LINUX_THREADS */ (useracc((caddr_t)fp, sizeof (struct linux_sigframe), B_WRITE) == FALSE)) { /* * Process has trashed its stack; give it an illegal |