Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat Handle MAP_ANON (0x100 in Solaris8, not 0x1000) p...
details: https://anonhg.NetBSD.org/src/rev/40bd082d1441
branches: trunk
changeset: 521887:40bd082d1441
user: tv <tv%NetBSD.org@localhost>
date: Thu Feb 07 23:22:24 2002 +0000
description:
Handle MAP_ANON (0x100 in Solaris8, not 0x1000) properly, by factoring out
the flags common to SVR4 and NetBSD, and mapping the rest manually.
diffstat:
sys/compat/svr4/svr4_misc.c | 34 ++++++++++++++++++++++++++++------
sys/compat/svr4/svr4_mman.h | 11 ++++++++++-
sys/compat/svr4_32/svr4_32_misc.c | 34 ++++++++++++++++++++++++++++------
3 files changed, 66 insertions(+), 13 deletions(-)
diffs (211 lines):
diff -r 20ced601f55f -r 40bd082d1441 sys/compat/svr4/svr4_misc.c
--- a/sys/compat/svr4/svr4_misc.c Thu Feb 07 22:23:01 2002 +0000
+++ b/sys/compat/svr4/svr4_misc.c Thu Feb 07 23:22:24 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_misc.c,v 1.94 2001/11/18 13:29:29 jdolecek Exp $ */
+/* $NetBSD: svr4_misc.c,v 1.95 2002/02/07 23:22:24 tv Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.94 2001/11/18 13:29:29 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.95 2002/02/07 23:22:24 tv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -101,6 +101,8 @@
#include <uvm/uvm_extern.h>
+static int svr4_to_bsd_mmap_flags __P((int));
+
static __inline clock_t timeval_to_clock_t __P((struct timeval *));
static int svr4_setinfo __P((struct proc *, int, svr4_siginfo_t *));
@@ -489,6 +491,24 @@
}
+static int
+svr4_to_bsd_mmap_flags(f)
+ int f;
+{
+ int type = f & SVR4_MAP_TYPE;
+ int nf;
+
+ if (type != MAP_PRIVATE && type != MAP_SHARED)
+ return -1;
+
+ nf = f & SVR4_MAP_COPYFLAGS;
+ if (f & SVR4_MAP_ANON)
+ nf |= MAP_ANON;
+
+ return nf;
+}
+
+
int
svr4_sys_mmap(p, v, retval)
struct proc *p;
@@ -498,7 +518,6 @@
struct svr4_sys_mmap_args *uap = v;
struct sys_mmap_args mm;
void *rp;
-#define _MAP_NEW 0x80000000
/*
* Verify the arguments.
*/
@@ -508,9 +527,11 @@
if (SCARG(uap, len) == 0)
return EINVAL;
+ if ((SCARG(&mm, flags) = svr4_to_bsd_mmap_flags(SCARG(uap, flags))) == -1)
+ return EINVAL;
+
SCARG(&mm, prot) = SCARG(uap, prot);
SCARG(&mm, len) = SCARG(uap, len);
- SCARG(&mm, flags) = SCARG(uap, flags) & ~_MAP_NEW;
SCARG(&mm, fd) = SCARG(uap, fd);
SCARG(&mm, addr) = SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
@@ -533,7 +554,6 @@
struct svr4_sys_mmap64_args *uap = v;
struct sys_mmap_args mm;
void *rp;
-#define _MAP_NEW 0x80000000
/*
* Verify the arguments.
*/
@@ -543,9 +563,11 @@
if (SCARG(uap, len) == 0)
return EINVAL;
+ if ((SCARG(&mm, flags) = svr4_to_bsd_mmap_flags(SCARG(uap, flags))) == -1)
+ return EINVAL;
+
SCARG(&mm, prot) = SCARG(uap, prot);
SCARG(&mm, len) = SCARG(uap, len);
- SCARG(&mm, flags) = SCARG(uap, flags) & ~_MAP_NEW;
SCARG(&mm, fd) = SCARG(uap, fd);
SCARG(&mm, addr) = SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
diff -r 20ced601f55f -r 40bd082d1441 sys/compat/svr4/svr4_mman.h
--- a/sys/compat/svr4/svr4_mman.h Thu Feb 07 22:23:01 2002 +0000
+++ b/sys/compat/svr4/svr4_mman.h Thu Feb 07 23:22:24 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_mman.h,v 1.2 1999/04/06 02:55:24 tv Exp $ */
+/* $NetBSD: svr4_mman.h,v 1.3 2002/02/07 23:22:24 tv Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -49,4 +49,13 @@
#define SVR4_MC_LOCKAS 5
#define SVR4_MC_UNLOCKAS 6
+/*
+ * Flags passed to traditional mmap() syscall. The type (SHARED/PRIVATE)
+ * is the same as in NetBSD.
+ */
+
+#define SVR4_MAP_TYPE 0x00f
+#define SVR4_MAP_COPYFLAGS 0x07f /* flags same as NetBSD */
+#define SVR4_MAP_ANON 0x100
+
#endif /* !_SVR4_MMAN_H */
diff -r 20ced601f55f -r 40bd082d1441 sys/compat/svr4_32/svr4_32_misc.c
--- a/sys/compat/svr4_32/svr4_32_misc.c Thu Feb 07 22:23:01 2002 +0000
+++ b/sys/compat/svr4_32/svr4_32_misc.c Thu Feb 07 23:22:24 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_misc.c,v 1.9 2001/11/13 02:09:29 lukem Exp $ */
+/* $NetBSD: svr4_32_misc.c,v 1.10 2002/02/07 23:22:24 tv Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.9 2001/11/13 02:09:29 lukem Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.10 2002/02/07 23:22:24 tv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -101,6 +101,8 @@
#include <uvm/uvm_extern.h>
+static int svr4_to_bsd_mmap_flags __P((int));
+
static __inline clock_t timeval_to_clock_t __P((struct timeval *));
static int svr4_32_setinfo __P((struct proc *, int, svr4_32_siginfo_tp));
@@ -493,6 +495,24 @@
}
+static int
+svr4_to_bsd_mmap_flags(f)
+ int f;
+{
+ int type = f & SVR4_MAP_TYPE;
+ int nf;
+
+ if (type != MAP_PRIVATE && type != MAP_SHARED)
+ return -1;
+
+ nf = f & SVR4_MAP_COPYFLAGS;
+ if (f & SVR4_MAP_ANON)
+ nf |= MAP_ANON;
+
+ return nf;
+}
+
+
int
svr4_32_sys_mmap(p, v, retval)
struct proc *p;
@@ -503,7 +523,6 @@
struct sys_mmap_args mm;
void *rp;
int error;
-#define _MAP_NEW 0x80000000
/*
* Verify the arguments.
*/
@@ -513,9 +532,11 @@
if (SCARG(uap, len) == 0)
return EINVAL;
+ if ((SCARG(&mm, flags) = svr4_to_bsd_mmap_flags(SCARG(uap, flags))) == -1)
+ return EINVAL;
+
SCARG(&mm, prot) = SCARG(uap, prot);
SCARG(&mm, len) = SCARG(uap, len);
- SCARG(&mm, flags) = SCARG(uap, flags) & ~_MAP_NEW;
SCARG(&mm, fd) = SCARG(uap, fd);
SCARG(&mm, addr) = (void *)(u_long)SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
@@ -545,7 +566,6 @@
struct sys_mmap_args mm;
void *rp;
int error;
-#define _MAP_NEW 0x80000000
/*
* Verify the arguments.
*/
@@ -555,9 +575,11 @@
if (SCARG(uap, len) == 0)
return EINVAL;
+ if ((SCARG(&mm, flags) = svr4_to_bsd_mmap_flags(SCARG(uap, flags))) == -1)
+ return EINVAL;
+
SCARG(&mm, prot) = SCARG(uap, prot);
SCARG(&mm, len) = SCARG(uap, len);
- SCARG(&mm, flags) = SCARG(uap, flags) & ~_MAP_NEW;
SCARG(&mm, fd) = SCARG(uap, fd);
SCARG(&mm, addr) = (void *)(u_long)SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
Home |
Main Index |
Thread Index |
Old Index