git: f19e3fd20601 - main - freebsd32: signed long corrections

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Wed, 17 Nov 2021 20:22:44 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=f19e3fd20601f0ff7fa3261fee339b46276b3d90

commit f19e3fd20601f0ff7fa3261fee339b46276b3d90
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2021-11-17 20:12:26 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2021-11-17 20:12:26 +0000

    freebsd32: signed long corrections
    
    Syscalls that take signed longs need to treat the 32-bit versions as
    signed int so that sign extension happens correctly.  Improve
    decleration quality and add a few minimal syscall implementations.
    
    Reviewed by:    kevans
---
 sys/compat/freebsd32/freebsd32_misc.c          | 27 ++++++++++++++++++++++++++
 sys/compat/freebsd32/freebsd32_proto.h         | 25 ++++++++++++++++++++----
 sys/compat/freebsd32/freebsd32_syscall.h       |  6 +++---
 sys/compat/freebsd32/freebsd32_syscalls.c      |  6 +++---
 sys/compat/freebsd32/freebsd32_sysent.c        |  6 +++---
 sys/compat/freebsd32/freebsd32_systrace_args.c |  8 ++++----
 sys/compat/freebsd32/syscalls.master           | 21 ++++++++++----------
 7 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 4e69dc99b3b2..a165b47b2928 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -1913,6 +1913,14 @@ freebsd32_truncate(struct thread *td, struct freebsd32_truncate_args *uap)
 	    PAIR32TO64(off_t, uap->length)));
 }
 
+#ifdef COMPAT_43
+int
+ofreebsd32_truncate(struct thread *td, struct ofreebsd32_truncate_args *uap)
+{
+	return (kern_truncate(td, uap->path, UIO_USERSPACE, uap->length));
+}
+#endif
+
 int
 freebsd32_ftruncate(struct thread *td, struct freebsd32_ftruncate_args *uap)
 {
@@ -1921,6 +1929,12 @@ freebsd32_ftruncate(struct thread *td, struct freebsd32_ftruncate_args *uap)
 }
 
 #ifdef COMPAT_43
+int
+ofreebsd32_ftruncate(struct thread *td, struct ofreebsd32_ftruncate_args *uap)
+{
+	return (kern_ftruncate(td, uap->fd, uap->length));
+}
+
 int
 ofreebsd32_getdirentries(struct thread *td,
     struct ofreebsd32_getdirentries_args *uap)
@@ -3842,6 +3856,19 @@ freebsd32_ffclock_getestimate(struct thread *td,
 }
 #endif /* FFCLOCK */
 
+#ifdef COMPAT_43
+int
+ofreebsd32_sethostid(struct thread *td, struct ofreebsd32_sethostid_args *uap)
+{
+	int name[] = { CTL_KERN, KERN_HOSTID };
+	long hostid;
+
+	hostid = uap->hostid;
+	return (kernel_sysctl(td, name, nitems(name), NULL, NULL, &hostid,
+	    sizeof(hostid), NULL, 0));
+}
+#endif
+
 int
 freebsd32_fspacectl(struct thread *td, struct freebsd32_fspacectl_args *uap)
 {
diff --git a/sys/compat/freebsd32/freebsd32_proto.h b/sys/compat/freebsd32/freebsd32_proto.h
index 6c1dc013835d..ae3abe22dda4 100644
--- a/sys/compat/freebsd32/freebsd32_proto.h
+++ b/sys/compat/freebsd32/freebsd32_proto.h
@@ -179,7 +179,7 @@ struct freebsd32_msgrcv_args {
 	char msqid_l_[PADL_(int)]; int msqid; char msqid_r_[PADR_(int)];
 	char msgp_l_[PADL_(void *)]; void * msgp; char msgp_r_[PADR_(void *)];
 	char msgsz_l_[PADL_(size_t)]; size_t msgsz; char msgsz_r_[PADR_(size_t)];
-	char msgtyp_l_[PADL_(long)]; long msgtyp; char msgtyp_r_[PADR_(long)];
+	char msgtyp_l_[PADL_(int32_t)]; int32_t msgtyp; char msgtyp_r_[PADR_(int32_t)];
 	char msgflg_l_[PADL_(int)]; int msgflg; char msgflg_r_[PADR_(int)];
 };
 struct freebsd32_clock_gettime_args {
@@ -932,7 +932,7 @@ int	freebsd32_fspacectl(struct thread *, struct freebsd32_fspacectl_args *);
 #endif
 struct ofreebsd32_lseek_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
-	char offset_l_[PADL_(int)]; int offset; char offset_r_[PADR_(int)];
+	char offset_l_[PADL_(int32_t)]; int32_t offset; char offset_r_[PADR_(int32_t)];
 	char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
 };
 struct ofreebsd32_stat_args {
@@ -982,11 +982,22 @@ struct ofreebsd32_sendmsg_args {
 	char msg_l_[PADL_(const struct omsghdr32 *)]; const struct omsghdr32 * msg; char msg_r_[PADR_(const struct omsghdr32 *)];
 	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
 };
+struct ofreebsd32_truncate_args {
+	char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+	char length_l_[PADL_(int32_t)]; int32_t length; char length_r_[PADR_(int32_t)];
+};
+struct ofreebsd32_ftruncate_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char length_l_[PADL_(int32_t)]; int32_t length; char length_r_[PADR_(int32_t)];
+};
+struct ofreebsd32_sethostid_args {
+	char hostid_l_[PADL_(int32_t)]; int32_t hostid; char hostid_r_[PADR_(int32_t)];
+};
 struct ofreebsd32_getdirentries_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
 	char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
 	char count_l_[PADL_(u_int)]; u_int count; char count_r_[PADR_(u_int)];
-	char basep_l_[PADL_(uint32_t *)]; uint32_t * basep; char basep_r_[PADR_(uint32_t *)];
+	char basep_l_[PADL_(int32_t *)]; int32_t * basep; char basep_r_[PADR_(int32_t *)];
 };
 #ifdef PAD64_REQUIRED
 #else
@@ -1017,6 +1028,9 @@ int	ofreebsd32_sigvec(struct thread *, struct ofreebsd32_sigvec_args *);
 int	ofreebsd32_sigstack(struct thread *, struct ofreebsd32_sigstack_args *);
 int	ofreebsd32_recvmsg(struct thread *, struct ofreebsd32_recvmsg_args *);
 int	ofreebsd32_sendmsg(struct thread *, struct ofreebsd32_sendmsg_args *);
+int	ofreebsd32_truncate(struct thread *, struct ofreebsd32_truncate_args *);
+int	ofreebsd32_ftruncate(struct thread *, struct ofreebsd32_ftruncate_args *);
+int	ofreebsd32_sethostid(struct thread *, struct ofreebsd32_sethostid_args *);
 int	ofreebsd32_getdirentries(struct thread *, struct ofreebsd32_getdirentries_args *);
 
 #endif /* COMPAT_43 */
@@ -1029,7 +1043,7 @@ int	ofreebsd32_getdirentries(struct thread *, struct ofreebsd32_getdirentries_ar
 #endif
 struct freebsd4_freebsd32_getfsstat_args {
 	char buf_l_[PADL_(struct ostatfs32 *)]; struct ostatfs32 * buf; char buf_r_[PADR_(struct ostatfs32 *)];
-	char bufsize_l_[PADL_(long)]; long bufsize; char bufsize_r_[PADR_(long)];
+	char bufsize_l_[PADL_(int32_t)]; int32_t bufsize; char bufsize_r_[PADR_(int32_t)];
 	char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
 };
 struct freebsd4_freebsd32_statfs_args {
@@ -1390,8 +1404,11 @@ int	freebsd11_freebsd32_fstatat(struct thread *, struct freebsd11_freebsd32_fsta
 #define	FREEBSD32_SYS_AUE_freebsd32_readv	AUE_READV
 #define	FREEBSD32_SYS_AUE_freebsd32_writev	AUE_WRITEV
 #define	FREEBSD32_SYS_AUE_freebsd32_settimeofday	AUE_SETTIMEOFDAY
+#define	FREEBSD32_SYS_AUE_ofreebsd32_truncate	AUE_TRUNCATE
+#define	FREEBSD32_SYS_AUE_ofreebsd32_ftruncate	AUE_FTRUNCATE
 #define	FREEBSD32_SYS_AUE_freebsd32_utimes	AUE_UTIMES
 #define	FREEBSD32_SYS_AUE_freebsd32_adjtime	AUE_ADJTIME
+#define	FREEBSD32_SYS_AUE_ofreebsd32_sethostid	AUE_SYSCTL
 #define	FREEBSD32_SYS_AUE_ofreebsd32_getdirentries	AUE_GETDIRENTRIES
 #define	FREEBSD32_SYS_AUE_freebsd4_freebsd32_statfs	AUE_STATFS
 #define	FREEBSD32_SYS_AUE_freebsd4_freebsd32_fstatfs	AUE_FSTATFS
diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h
index 426221bf94eb..05dfb299e332 100644
--- a/sys/compat/freebsd32/freebsd32_syscall.h
+++ b/sys/compat/freebsd32/freebsd32_syscall.h
@@ -131,8 +131,8 @@
 #define	FREEBSD32_SYS_setreuid	126
 #define	FREEBSD32_SYS_setregid	127
 #define	FREEBSD32_SYS_rename	128
-				/* 129 is old truncate */
-				/* 130 is old ftruncate */
+				/* 129 is old freebsd32_truncate */
+				/* 130 is old freebsd32_ftruncate */
 #define	FREEBSD32_SYS_flock	131
 #define	FREEBSD32_SYS_mkfifo	132
 #define	FREEBSD32_SYS_sendto	133
@@ -145,7 +145,7 @@
 #define	FREEBSD32_SYS_freebsd32_adjtime	140
 				/* 141 is old getpeername */
 				/* 142 is old gethostid */
-				/* 143 is obsolete sethostid */
+				/* 143 is old freebsd32_sethostid */
 				/* 144 is old getrlimit */
 				/* 145 is old setrlimit */
 				/* 146 is old killpg */
diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c
index 1630992680a2..3206e069e85d 100644
--- a/sys/compat/freebsd32/freebsd32_syscalls.c
+++ b/sys/compat/freebsd32/freebsd32_syscalls.c
@@ -138,8 +138,8 @@ const char *freebsd32_syscallnames[] = {
 	"setreuid",			/* 126 = setreuid */
 	"setregid",			/* 127 = setregid */
 	"rename",			/* 128 = rename */
-	"compat.truncate",		/* 129 = old truncate */
-	"compat.ftruncate",		/* 130 = old ftruncate */
+	"compat.freebsd32_truncate",		/* 129 = old freebsd32_truncate */
+	"compat.freebsd32_ftruncate",		/* 130 = old freebsd32_ftruncate */
 	"flock",			/* 131 = flock */
 	"mkfifo",			/* 132 = mkfifo */
 	"sendto",			/* 133 = sendto */
@@ -152,7 +152,7 @@ const char *freebsd32_syscallnames[] = {
 	"freebsd32_adjtime",			/* 140 = freebsd32_adjtime */
 	"compat.getpeername",		/* 141 = old getpeername */
 	"compat.gethostid",		/* 142 = old gethostid */
-	"obs_sethostid",			/* 143 = obsolete sethostid */
+	"compat.freebsd32_sethostid",		/* 143 = old freebsd32_sethostid */
 	"compat.getrlimit",		/* 144 = old getrlimit */
 	"compat.setrlimit",		/* 145 = old setrlimit */
 	"compat.killpg",		/* 146 = old killpg */
diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c
index 76d402de3f5e..12fecbee75ab 100644
--- a/sys/compat/freebsd32/freebsd32_sysent.c
+++ b/sys/compat/freebsd32/freebsd32_sysent.c
@@ -191,8 +191,8 @@ struct sysent freebsd32_sysent[] = {
 	{ .sy_narg = AS(setreuid_args), .sy_call = (sy_call_t *)sys_setreuid, .sy_auevent = AUE_SETREUID, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 126 = setreuid */
 	{ .sy_narg = AS(setregid_args), .sy_call = (sy_call_t *)sys_setregid, .sy_auevent = AUE_SETREGID, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 127 = setregid */
 	{ .sy_narg = AS(rename_args), .sy_call = (sy_call_t *)sys_rename, .sy_auevent = AUE_RENAME, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 128 = rename */
-	{ compat(AS(otruncate_args),truncate), .sy_auevent = AUE_TRUNCATE, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 129 = old truncate */
-	{ compat(AS(oftruncate_args),ftruncate), .sy_auevent = AUE_FTRUNCATE, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 130 = old ftruncate */
+	{ compat(AS(ofreebsd32_truncate_args),freebsd32_truncate), .sy_auevent = AUE_TRUNCATE, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 129 = old freebsd32_truncate */
+	{ compat(AS(ofreebsd32_ftruncate_args),freebsd32_ftruncate), .sy_auevent = AUE_FTRUNCATE, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 130 = old freebsd32_ftruncate */
 	{ .sy_narg = AS(flock_args), .sy_call = (sy_call_t *)sys_flock, .sy_auevent = AUE_FLOCK, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 131 = flock */
 	{ .sy_narg = AS(mkfifo_args), .sy_call = (sy_call_t *)sys_mkfifo, .sy_auevent = AUE_MKFIFO, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 132 = mkfifo */
 	{ .sy_narg = AS(sendto_args), .sy_call = (sy_call_t *)sys_sendto, .sy_auevent = AUE_SENDTO, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 133 = sendto */
@@ -205,7 +205,7 @@ struct sysent freebsd32_sysent[] = {
 	{ .sy_narg = AS(freebsd32_adjtime_args), .sy_call = (sy_call_t *)freebsd32_adjtime, .sy_auevent = AUE_ADJTIME, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 140 = freebsd32_adjtime */
 	{ compat(AS(ogetpeername_args),getpeername), .sy_auevent = AUE_GETPEERNAME, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 141 = old getpeername */
 	{ compat(0,gethostid), .sy_auevent = AUE_SYSCTL, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 142 = old gethostid */
-	{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT },			/* 143 = obsolete sethostid */
+	{ compat(AS(ofreebsd32_sethostid_args),freebsd32_sethostid), .sy_auevent = AUE_SYSCTL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 143 = old freebsd32_sethostid */
 	{ compat(AS(ogetrlimit_args),getrlimit), .sy_auevent = AUE_GETRLIMIT, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 144 = old getrlimit */
 	{ compat(AS(osetrlimit_args),setrlimit), .sy_auevent = AUE_SETRLIMIT, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC },	/* 145 = old setrlimit */
 	{ compat(AS(okillpg_args),killpg), .sy_auevent = AUE_KILLPG, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 146 = old killpg */
diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c
index f61641e3ab24..6ba992bed5c9 100644
--- a/sys/compat/freebsd32/freebsd32_systrace_args.c
+++ b/sys/compat/freebsd32/freebsd32_systrace_args.c
@@ -1093,7 +1093,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
 		iarg[0] = p->msqid; /* int */
 		uarg[1] = (intptr_t)p->msgp; /* void * */
 		uarg[2] = p->msgsz; /* size_t */
-		iarg[3] = p->msgtyp; /* long */
+		iarg[3] = p->msgtyp; /* int32_t */
 		iarg[4] = p->msgflg; /* int */
 		*n_args = 5;
 		break;
@@ -3211,7 +3211,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
 	case 557: {
 		struct getfsstat_args *p = params;
 		uarg[0] = (intptr_t)p->buf; /* struct statfs * */
-		iarg[1] = p->bufsize; /* long */
+		iarg[1] = p->bufsize; /* int32_t */
 		iarg[2] = p->mode; /* int */
 		*n_args = 3;
 		break;
@@ -5176,7 +5176,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 			p = "size_t";
 			break;
 		case 3:
-			p = "long";
+			p = "int32_t";
 			break;
 		case 4:
 			p = "int";
@@ -8865,7 +8865,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 			p = "userland struct statfs *";
 			break;
 		case 1:
-			p = "long";
+			p = "int32_t";
 			break;
 		case 2:
 			p = "int";
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index 410499e57609..2bcf84d3baf7 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -92,9 +92,9 @@
 16	AUE_CHOWN	NOPROTO	{ int chown(const char *path, int uid, int gid); }
 17	AUE_NULL	NOPROTO	{ void *break(char *nsize); }
 18	AUE_GETFSSTAT	COMPAT4	{ int freebsd32_getfsstat( \
-				    struct ostatfs32 *buf, long bufsize, \
+				    struct ostatfs32 *buf, int32_t bufsize, \
 				    int mode); }
-19	AUE_LSEEK	COMPAT	{ int freebsd32_lseek(int fd, int offset, \
+19	AUE_LSEEK	COMPAT	{ int freebsd32_lseek(int fd, int32_t offset, \
 				    int whence); }
 20	AUE_GETPID	NOPROTO	{ pid_t getpid(void); }
 21	AUE_MOUNT	NOPROTO	{ int mount(const char *type, \
@@ -274,9 +274,10 @@
 127	AUE_SETREGID	NOPROTO	{ int setregid(int rgid, int egid); }
 128	AUE_RENAME	NOPROTO	{ int rename(const char *from, \
 				    const char *to); }
-129	AUE_TRUNCATE	COMPAT|NOPROTO	{ int truncate(const char *path, \
-					    int length); }
-130	AUE_FTRUNCATE	COMPAT|NOPROTO	{ int ftruncate(int fd, int length); }
+129	AUE_TRUNCATE	COMPAT	{ int freebsd32_truncate(const char *path, \
+					    int32_t length); }
+130	AUE_FTRUNCATE	COMPAT	{ int freebsd32_ftruncate(int fd, \
+				    int32_t length); }
 131	AUE_FLOCK	NOPROTO	{ int flock(int fd, int how); }
 132	AUE_MKFIFO	NOPROTO	{ int mkfifo(const char *path, mode_t mode); }
 133	AUE_SENDTO	NOPROTO	{ int sendto(int s, const void *buf, \
@@ -298,7 +299,7 @@
 				    struct sockaddr *asa, \
 				    __socklen_t *alen); }
 142	AUE_SYSCTL	COMPAT|NOPROTO { long gethostid(void); }
-143	AUE_SYSCTL	OBSOL	sethostid
+143	AUE_SYSCTL	COMPAT	{ int freebsd32_sethostid(int32_t hostid); }
 144	AUE_GETRLIMIT	COMPAT|NOPROTO { int getrlimit(u_int which, \
 				    struct orlimit *rlp); }
 145	AUE_SETRLIMIT	COMPAT|NOPROTO { int setrlimit(u_int which, \
@@ -323,7 +324,7 @@
 ; XXX this is a problem!!!
 155	AUE_NFS_SVC	UNIMPL	nfssvc
 156	AUE_GETDIRENTRIES COMPAT { int freebsd32_getdirentries(int fd, \
-				    char *buf, u_int count, uint32_t *basep); }
+				    char *buf, u_int count, int32_t *basep); }
 157	AUE_STATFS	COMPAT4	{ int freebsd32_statfs(const char *path, \
 				    struct ostatfs32 *buf); }
 158	AUE_FSTATFS	COMPAT4	{ int freebsd32_fstatfs(int fd, \
@@ -446,7 +447,7 @@
 226	AUE_MSGSND	NOSTD	{ int freebsd32_msgsnd(int msqid, const void *msgp, \
 				    size_t msgsz, int msgflg); }
 227	AUE_MSGRCV	NOSTD	{ int freebsd32_msgrcv(int msqid, void *msgp, \
-				    size_t msgsz, long msgtyp, int msgflg); }
+				    size_t msgsz, int32_t msgtyp, int msgflg); }
 228	AUE_SHMAT	NOSTD|NOPROTO	{ void *shmat(int shmid, const void *shmaddr, \
 				    int shmflg); }
 229	AUE_SHMCTL	COMPAT7|NOSTD	{ int freebsd32_shmctl( \
@@ -747,7 +748,7 @@
 394	AUE_NULL	UNIMPL	mac_syscall
 395	AUE_GETFSSTAT	COMPAT11|NOPROTO	{ int getfsstat( \
 				    struct freebsd11_statfs *buf, \
-				    long bufsize, int mode); }
+				    int32_t bufsize, int mode); }
 396	AUE_STATFS	COMPAT11|NOPROTO	{ int statfs(const char *path, \
 				    struct statfs *buf); }
 397	AUE_FSTATFS	COMPAT11|NOPROTO	{ int fstatfs(int fd, \
@@ -1140,7 +1141,7 @@
 				    struct statfs *buf); }
 556	AUE_FSTATFS	NOPROTO	{ int fstatfs(int fd, struct statfs *buf); }
 557	AUE_GETFSSTAT	NOPROTO	{ int getfsstat(struct statfs *buf, \
-				    long bufsize, int mode); }
+				    int32_t bufsize, int mode); }
 558	AUE_FHSTATFS	NOPROTO	{ int fhstatfs(const struct fhandle *u_fhp, \
 				    struct statfs *buf); }
 #ifdef PAD64_REQUIRED