summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorcracauer <cracauer@FreeBSD.org>2000-06-15 09:57:34 +0000
committercracauer <cracauer@FreeBSD.org>2000-06-15 09:57:34 +0000
commit6a344f765d65cda1689b092db6e9ea5226f20374 (patch)
treeac5899dfdc5ddb3900ddee5bc66b9268c55b13db /sys/compat
parentf29679832cc93d2704e4eddf06408ba75d926ed4 (diff)
downloadFreeBSD-src-6a344f765d65cda1689b092db6e9ea5226f20374.zip
FreeBSD-src-6a344f765d65cda1689b092db6e9ea5226f20374.tar.gz
Linux allows to mmap annonymous with a file descriptor passed, FreeBSD
doesn't. In the Linux emulation layer, ignore the fd passed when MAP_ANON is specified. Known application to be fixed: Xanalys/Harlequin Lispworks Also improve debug output for mmap, now showing what the emulation layer mapped to what (-DDEBUG). Reviewed by: marcel
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_misc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index bb043e4..1adea54 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -696,7 +696,7 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
sizeof(linux_args))))
return error;
#ifdef DEBUG
- printf("Linux-emul(%ld): mmap(%p, %d, %d, %08x, %d, %d)\n",
+ printf("Linux-emul(%ld): mmap(%p, %d, %d, 0x%08x, %d, %d)",
(long)p->p_pid, (void *)linux_args.addr, linux_args.len,
linux_args.prot, linux_args.flags, linux_args.fd, linux_args.pos);
#endif
@@ -756,9 +756,17 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
}
bsd_args.prot = linux_args.prot | PROT_READ; /* always required */
- bsd_args.fd = linux_args.fd;
+ if (linux_args.flags & LINUX_MAP_ANON)
+ bsd_args.fd = -1;
+ else
+ bsd_args.fd = linux_args.fd;
bsd_args.pos = linux_args.pos;
bsd_args.pad = 0;
+#ifdef DEBUG
+ printf("-> (%p, %d, %d, 0x%08x, %d, %d)\n",
+ (void *)bsd_args.addr, bsd_args.len,
+ bsd_args.prot, bsd_args.flags, bsd_args.fd, (int)bsd_args.pos);
+#endif
return mmap(p, &bsd_args);
}
OpenPOWER on IntegriCloud