From b9f3e68f953df56d21cb78681126eb1d5a5d5611 Mon Sep 17 00:00:00 2001
From: Peter Wemm <peter@FreeBSD.org>
Date: Wed, 4 Jul 2007 23:02:40 +0000
Subject: [PATCH] Add i386 emulation wrappers for mmap/lseek/etc.  These use
 COMPAT6, so you must use the already existing, already in generic,
 COMPAT_FREEBSD6 kernel option for running old 32 bit binaries.

Approved by:  re (kensmith)
---
 sys/compat/freebsd32/syscalls.master | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index a43979640005..bbd39de542be 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -303,11 +303,11 @@
 171	AUE_SHMSYS	STD	{ int freebsd32_shmsys(uint32_t which, uint32_t a2, \
 				    uint32_t a3, uint32_t a4); }
 172	AUE_NULL	UNIMPL	nosys
-173	AUE_PREAD	STD	{ ssize_t freebsd32_pread(int fd, void *buf, \
+173	AUE_PREAD	COMPAT6	{ ssize_t freebsd32_pread(int fd, void *buf, \
 				    size_t nbyte, int pad, \
 				    u_int32_t offsetlo, u_int32_t offsethi); }
 ; XXX note - bigendian is different
-174	AUE_PWRITE	STD	{ ssize_t freebsd32_pwrite(int fd, \
+174	AUE_PWRITE	COMPAT6	{ ssize_t freebsd32_pwrite(int fd, \
 				    const void *buf, size_t nbyte, int pad, \
 				    u_int32_t offsetlo, u_int32_t offsethi); }
 ; XXX note - bigendian is different
@@ -343,22 +343,22 @@
 				    __setrlimit_args int
 196	AUE_GETDIRENTRIES	NOPROTO	{ int getdirentries(int fd, char *buf, \
 				    u_int count, long *basep); }
-197	AUE_MMAP	STD 	{ caddr_t freebsd32_mmap(caddr_t addr, \
+197	AUE_MMAP	COMPAT6	{ caddr_t freebsd32_mmap(caddr_t addr, \
 				    size_t len, int prot, int flags, int fd, \
 				    int pad, u_int32_t poslo, \
 				    u_int32_t poshi); }
 198	AUE_NULL	NOPROTO	{ int nosys(void); } __syscall \
 				    __syscall_args int
 ; XXX note - bigendian is different
-199	AUE_LSEEK	STD	{ off_t freebsd32_lseek(int fd, int pad, \
+199	AUE_LSEEK	COMPAT6	{ off_t freebsd32_lseek(int fd, int pad, \
 				    u_int32_t offsetlo, u_int32_t offsethi, \
 				    int whence); }
 ; XXX note - bigendian is different
-200	AUE_TRUNCATE	STD	{ int freebsd32_truncate(char *path, \
+200	AUE_TRUNCATE	COMPAT6	{ int freebsd32_truncate(char *path, \
 				    int pad, u_int32_t lengthlo, \
 				    u_int32_t lengthhi); }
 ; XXX note - bigendian is different
-201	AUE_FTRUNCATE	STD	{ int freebsd32_ftruncate(int fd, int pad, \
+201	AUE_FTRUNCATE	COMPAT6	{ int freebsd32_ftruncate(int fd, int pad, \
 				    u_int32_t lengthlo, u_int32_t lengthhi); }
 202	AUE_SYSCTL	STD	{ int freebsd32_sysctl(int *name, \
 				    u_int namelen, void *old, \
@@ -778,3 +778,19 @@
 474	AUE_NULL	NOPROTO	{ int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
 				    struct sockaddr * from, __socklen_t *fromlenaddr, \
 				    struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+475	AUE_PREAD	STD	{ ssize_t freebsd32_pread(int fd, \
+				    void *buf,size_t nbyte, \
+				    u_int32_t offsetlo, u_int32_t offsethi); }
+476	AUE_PWRITE	STD	{ ssize_t freebsd32_pwrite(int fd, \
+				    const void *buf, size_t nbyte, \
+				    u_int32_t offsetlo, u_int32_t offsethi); }
+477	AUE_MMAP	STD 	{ caddr_t freebsd32_mmap(caddr_t addr, \
+				    size_t len, int prot, int flags, int fd, \
+				    u_int32_t poslo, u_int32_t poshi); }
+478	AUE_LSEEK	STD	{ off_t freebsd32_lseek(int fd, \
+				    u_int32_t offsetlo, u_int32_t offsethi, \
+				    int whence); }
+479	AUE_TRUNCATE	STD	{ int freebsd32_truncate(char *path, \
+				    u_int32_t lengthlo, u_int32_t lengthhi); }
+480	AUE_FTRUNCATE	STD	{ int freebsd32_ftruncate(int fd, \
+				    u_int32_t lengthlo, u_int32_t lengthhi); }