svn commit: r199485 - projects/ppc64/sys/compat/freebsd32

Nathan Whitehorn nwhitehorn at FreeBSD.org
Wed Nov 18 15:48:51 UTC 2009


Author: nwhitehorn
Date: Wed Nov 18 15:48:51 2009
New Revision: 199485
URL: http://svn.freebsd.org/changeset/base/199485

Log:
  Make freebsd32 pread, pwrite, lseek, and truncate work on big-endian.
  Init now asks me what kind of shell I want to start.

Modified:
  projects/ppc64/sys/compat/freebsd32/freebsd32_misc.c
  projects/ppc64/sys/compat/freebsd32/freebsd32_proto.h
  projects/ppc64/sys/compat/freebsd32/syscalls.master

Modified: projects/ppc64/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- projects/ppc64/sys/compat/freebsd32/freebsd32_misc.c	Wed Nov 18 15:35:03 2009	(r199484)
+++ projects/ppc64/sys/compat/freebsd32/freebsd32_misc.c	Wed Nov 18 15:48:51 2009	(r199485)
@@ -2013,8 +2013,13 @@ freebsd32_lseek(struct thread *td, struc
 	error = lseek(td, &ap);
 	/* Expand the quad return into two parts for eax and edx */
 	pos = *(off_t *)(td->td_retval);
+	#if BYTE_ORDER == BIG_ENDIAN
+	td->td_retval[0] = pos >> 32;
+	td->td_retval[1] = pos & 0xffffffff;
+	#else
 	td->td_retval[0] = pos & 0xffffffff;	/* %eax */
 	td->td_retval[1] = pos >> 32;		/* %edx */
+	#endif
 	return error;
 }
 

Modified: projects/ppc64/sys/compat/freebsd32/freebsd32_proto.h
==============================================================================
--- projects/ppc64/sys/compat/freebsd32/freebsd32_proto.h	Wed Nov 18 15:35:03 2009	(r199484)
+++ projects/ppc64/sys/compat/freebsd32/freebsd32_proto.h	Wed Nov 18 15:48:51 2009	(r199485)
@@ -347,15 +347,25 @@ struct freebsd32_pread_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
 	char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
 	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	#if BYTE_ORDER == BIG_ENDIAN
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	#else
 	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
 	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	#endif
 };
 struct freebsd32_pwrite_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
 	char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
 	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	#if BYTE_ORDER == BIG_ENDIAN
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	#else
 	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
 	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	#endif
 };
 struct freebsd32_mmap_args {
 	char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
@@ -374,8 +384,13 @@ struct freebsd32_lseek_args {
 };
 struct freebsd32_truncate_args {
 	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+	#if BYTE_ORDER == BIG_ENDIAN
+	char lengthhi_l_[PADL_(u_int32_t)]; u_int32_t lengthhi; char lengthhi_r_[PADR_(u_int32_t)];
+	char lengthlo_l_[PADL_(u_int32_t)]; u_int32_t lengthlo; char lengthlo_r_[PADR_(u_int32_t)];
+	#else
 	char lengthlo_l_[PADL_(u_int32_t)]; u_int32_t lengthlo; char lengthlo_r_[PADR_(u_int32_t)];
 	char lengthhi_l_[PADL_(u_int32_t)]; u_int32_t lengthhi; char lengthhi_r_[PADR_(u_int32_t)];
+	#endif
 };
 struct freebsd32_ftruncate_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -667,8 +682,13 @@ struct freebsd6_freebsd32_mmap_args {
 struct freebsd6_freebsd32_lseek_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
 	char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
+	#if BYTE_ORDER == BIG_ENDIAN
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	#else
 	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
 	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	#endif
 	char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
 };
 struct freebsd6_freebsd32_truncate_args {

Modified: projects/ppc64/sys/compat/freebsd32/syscalls.master
==============================================================================
--- projects/ppc64/sys/compat/freebsd32/syscalls.master	Wed Nov 18 15:35:03 2009	(r199484)
+++ projects/ppc64/sys/compat/freebsd32/syscalls.master	Wed Nov 18 15:48:51 2009	(r199485)
@@ -317,11 +317,9 @@
 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	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
 175	AUE_NULL	UNIMPL	nosys
 176	AUE_NTP_ADJTIME	NOPROTO	{ int ntp_adjtime(struct timex *tp); }
 177	AUE_NULL	UNIMPL	sfork (BSD/OS 2.x)
@@ -364,7 +362,6 @@
 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	COMPAT6	{ int freebsd32_truncate(char *path, \
 				    int pad, u_int32_t lengthlo, \
 				    u_int32_t lengthhi); }


More information about the svn-src-projects mailing list