niklas pointed out the new MDP_UNCACHE_WX might break fork/exec.
authorderaadt <deraadt@openbsd.org>
Wed, 29 Nov 1995 17:02:41 +0000 (17:02 +0000)
committerderaadt <deraadt@openbsd.org>
Wed, 29 Nov 1995 17:02:41 +0000 (17:02 +0000)
always set/clear in setregs() now

sys/arch/m68k/m68k/sunos_machdep.c
sys/arch/mvme68k/mvme68k/machdep.c
sys/compat/sunos/sunos_exec.c

index 25e3ed7..20250bd 100644 (file)
@@ -87,21 +87,6 @@ struct sunos_sigframe {
                                           comes here */
 };
 
-/*
- * SunOS' ld.so does self-modifying code without knowing about the 040's
- * cache purging needs.  So we need to uncache writeable executable pages.
- */
-void
-sunos_setregs(p, pack, stack, retval)
-       register struct proc *p;
-       struct exec_package *pack;
-       u_long stack;
-       register_t *retval;
-{
-       setregs(p, pack, stack, retval);
-       p->p_md.md_flags |= MDP_UNCACHE_WX;
-}
-
 /*
  * much simpler sendsig() for SunOS processes, as SunOS does the whole
  * context-saving in usermode. For now, no hardware information (ie.
index f237d37..697c840 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: machdep.c,v 1.4 1995/11/28 01:24:40 deraadt Exp $ */
+/*     $Id: machdep.c,v 1.5 1995/11/29 17:02:49 deraadt Exp $ */
 
 /*
  * Copyright (c) 1995 Theo de Raadt
@@ -416,6 +416,17 @@ setregs(p, pack, stack, retval)
        p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
        m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
 #endif
+#ifdef COMPAT_SUNOS
+       /*
+        * SunOS' ld.so does self-modifying code without knowing
+        * about the 040's cache purging needs.  So we need to uncache
+        * writeable executable pages.
+        */
+       if (p->p_emul == &emul_sunos)
+               p->p_md.md_flags |= MDP_UNCACHE_WX;
+       else
+               p->p_md.md_flags &= ~MDP_UNCACHE_WX;
+#endif
 #ifdef COMPAT_HPUX
        p->p_md.md_flags &= ~MDP_HPUXMMAP;
        if (p->p_emul == &emul_hpux) {
index e2ada6f..3ed414f 100644 (file)
@@ -68,10 +68,6 @@ extern struct sysent sunos_sysent[];
 extern char *sunos_syscallnames[];
 #endif
 extern void sunos_sendsig __P((sig_t, int, int, u_long));
-#ifdef m68k
-extern void sunos_setregs __P((struct proc *, struct exec_package *, u_long,
-                              register_t *));
-#endif
 extern char sigcode[], esigcode[];
 const char sunos_emul_path[] = "/emul/sunos";
 
@@ -93,11 +89,7 @@ struct emul emul_sunos = {
 #endif
        0,
        copyargs,
-#ifdef m68k
-       sunos_setregs,
-#else
        setregs,
-#endif
        sigcode,
        esigcode,
 };