Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Oct 2000 15:10:13 -0700 (PDT)
From:      Sean Eric Fagan <sef@kithrup.com>
To:        emulation@freebsd.org, ohartman@ipamzlx.physik.uni-mainz.de
Subject:   Re: Linux compilation errors under FBSD
Message-ID:  <200010022210.PAA11290@kithrup.com>
In-Reply-To: <Pine.BSF.4.21.0010022221120.812-100000@ipamzlx.physik.uni-mainz.de>

next in thread | previous in thread | raw e-mail | index | archive | help
>My problem is to get the PGI compilers running on FBSD, because
>many of our oncoming scientists here bring their stuff based on 
>PGI's compiler with them. Well, it's a kind of horror ... 

Okay, first version of fstat64 for linux, in case someone else didn't do it.
(I did this on both a 4.0 and 4.1 box, although I haven't tested it beyond
compiling.  Yes, I know, I'm a complete flake.)

--- /sys/i386/linux/linux_dummy.c	Wed Jul 19 22:31:56 2000
+++ linux_dummy.c	Mon Oct  2 15:07:27 2000
@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/i386/linux/linux_dummy.c,v 1.21.2.3 2000/07/20 05:31:56 marcel Exp $
+ * $FreeBSD: src/sys/i386/linux/linux_dummy.c,v 1.21 2000/01/29 12:45:35 peter Exp $
  */
 
 #include <sys/param.h>
@@ -98,6 +98,8 @@
 DUMMY(rt_sigpending);
 DUMMY(rt_sigtimedwait);
 DUMMY(rt_sigqueueinfo);
+DUMMY(pread);
+DUMMY(pwrite);
 DUMMY(capget);
 DUMMY(capset);
 DUMMY(sendfile);
@@ -109,4 +111,3 @@
 DUMMY(ftruncate64);
 DUMMY(stat64);
 DUMMY(lstat64);
-DUMMY(fstat64);
--- /sys/i386/linux/syscalls.master	Wed Jul 19 14:11:10 2000
+++ syscalls.master	Mon Oct  2 15:07:27 2000
@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/i386/linux/syscalls.master,v 1.30.2.2 2000/07/19 21:11:10 marcel Exp $
+ $FreeBSD: src/sys/i386/linux/syscalls.master,v 1.30 2000/01/29 12:43:29 peter Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from LINUX).
@@ -32,7 +32,7 @@
 ; #ifdef's, etc. may be included, and are copied to the output files.
 
 0	STD	LINUX	{ int linux_setup(void); }
-1	NOPROTO	LINUX	{ void exit(int rval); } exit rexit_args void
+1	NOPROTO	LINUX	{ int exit(int rval); }
 2	STD	LINUX	{ int linux_fork(void); }
 3	NOPROTO	LINUX	{ int read(int fd, char *buf, u_int nbyte); }
 4	NOPROTO	LINUX	{ int write(int fd, char *buf, u_int nbyte); }
@@ -113,8 +113,7 @@
 				linux_osigset_t oldmask, \
 				linux_osigset_t mask); }
 73	STD	LINUX	{ int linux_sigpending(linux_osigset_t *mask); }
-74	NOPROTO	LINUX	{ int osethostname(char *hostname, u_int len); } \
-			    osethostname sethostname_args int
+74	NOPROTO	LINUX	{ int osethostname(char *hostname, u_int len); }
 75	STD	LINUX	{ int linux_setrlimit(u_int resource, \
 				struct ogetrlimit *rlim); }
 76	STD	LINUX	{ int linux_getrlimit(u_int resource, \
@@ -266,10 +265,8 @@
 178	STD	LINUX	{ int linux_rt_sigqueueinfo(void); }
 179	STD	LINUX	{ int linux_rt_sigsuspend(linux_sigset_t *newset, \
 				size_t sigsetsize); }
-180	STD	LINUX	{ int linux_pread(int fd, char *buf, size_t nbyte, \
-				off_t offset); }
-181	STD	LINUX	{ int linux_pwrite(int fd, const char *buf, \
-				size_t nbyte, off_t offset); }
+180	STD	LINUX	{ int linux_pread(void); }
+181	STD	LINUX	{ int linux_pwrite(void); }
 182	STD	LINUX	{ int linux_chown(char *path, int uid, int gid); }
 183	STD	LINUX	{ int linux_getcwd(char *buf, unsigned long bufsize); }
 184	STD	LINUX	{ int linux_capget(void); }
@@ -286,4 +283,4 @@
 194	STD	LINUX	{ int linux_ftruncate64(void); }
 195	STD	LINUX	{ int linux_stat64(void); }
 196	STD	LINUX	{ int linux_lstat64(void); }
-197	STD	LINUX	{ int linux_fstat64(void); }
+197	STD	LINUX	{ int linux_fstat64(int fd, struct stat64 *buf); }
--- /sys/i386/linux/linux_stats.c	Thu Jul  6 18:16:52 2000
+++ linux_stats.c	Mon Oct  2 15:07:27 2000
@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/i386/linux/linux_stats.c,v 1.20.2.1 2000/07/07 01:16:52 obrien Exp $
+ * $FreeBSD: src/sys/i386/linux/linux_stats.c,v 1.20 2000/01/08 21:09:41 marcel Exp $
  */
 
 #include <sys/param.h>
@@ -44,6 +44,8 @@
 #include <i386/linux/linux_proto.h>
 #include <i386/linux/linux_util.h>
 
+#include <vm/vm_zone.h>
+
 struct linux_newstat {
 	u_short	stat_dev;
 	u_short	__pad1;
@@ -67,6 +69,30 @@
 	u_long	__unused5;
 };
 
+struct linux_stat64 {
+	u_short stat_dev;
+	u_char __pad0[10];
+	u_long stat_ino;
+	u_int stat_mode;
+	u_int stat_nlink;
+	u_long stat_uid;
+	u_long stat_gid;
+	u_short stat_rdev;
+	u_char __pad3[10];
+	int64_t stat_size;
+	u_long stat_blksize;
+	u_long stat_blocks;
+	u_long __pad4;
+	u_long stat_atime;
+	u_long __pad5;
+	u_long stat_mtime;
+	u_long __pad6;
+	u_long stat_ctime;
+	u_long __pad7;
+	u_long __unused1;
+	u_long __unused2;
+};
+
 struct linux_ustat 
 {
 	int	f_tfree;
@@ -97,6 +123,29 @@
 	return (copyout(&tbuf, ubuf, sizeof(tbuf)));
 }
 
+static int
+stat64_copyout(struct stat *buf, void *ubuf)
+{
+	struct linux_stat64 tbuf;
+
+	bzero(&tbuf, sizeof(tbuf));
+	tbuf.stat_dev = uminor(buf->st_dev) | (umajor(buf->st_dev) << 8);
+	tbuf.stat_ino = buf->st_ino;
+	tbuf.stat_mode = buf->st_mode;
+	tbuf.stat_nlink = buf->st_nlink;
+	tbuf.stat_uid = buf->st_uid;
+	tbuf.stat_gid = buf->st_gid;
+	tbuf.stat_rdev = buf->st_rdev;
+	tbuf.stat_size = buf->st_size;
+	tbuf.stat_atime = buf->st_atime;
+	tbuf.stat_mtime = buf->st_mtime;
+	tbuf.stat_ctime = buf->st_ctime;
+	tbuf.stat_blksize = buf->st_blksize;
+	tbuf.stat_blocks = buf->st_blocks;
+
+	return (copyout(&tbuf, ubuf, sizeof(tbuf)));
+}
+
 int
 linux_newstat(struct proc *p, struct linux_newstat_args *args)
 {
@@ -187,6 +236,31 @@
 	error = fo_stat(fp, &buf, p);
 	if (!error)
 		error = newstat_copyout(&buf, args->buf);
+
+	return (error);
+}
+
+int
+linux_fstat64(struct proc *p, struct linux_fstat64_args *args)
+{
+	struct filedesc *fdp;
+	struct file *fp;
+	struct stat buf;
+	int error;
+
+	fdp = p->p_fd;
+
+#ifdef DEBUG
+	printf("Linux-emul(%ld): fstat64(%d, *)\n", (long)p->p_pid, args->fd);
+#endif
+
+	if ((unsigned)args->fd >= fdp->fd_nfiles ||
+	    (fp = fdp->fd_ofiles[args->fd]) == NULL)
+		return (EBADF);
+
+	error = fo_stat(fp, &buf, p);
+	if (!error)
+		error = stat64_copyout(&buf, args->buf);
 
 	return (error);
 }


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-emulation" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200010022210.PAA11290>