From owner-svn-src-projects@FreeBSD.ORG Wed Nov 18 15:48:51 2009 Return-Path: <owner-svn-src-projects@FreeBSD.ORG> Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A3789106566C; Wed, 18 Nov 2009 15:48:51 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 923C48FC0A; Wed, 18 Nov 2009 15:48:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAIFmpmZ076578; Wed, 18 Nov 2009 15:48:51 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAIFmpgW076574; Wed, 18 Nov 2009 15:48:51 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200911181548.nAIFmpgW076574@svn.freebsd.org> From: Nathan Whitehorn <nwhitehorn@FreeBSD.org> Date: Wed, 18 Nov 2009 15:48:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199485 - projects/ppc64/sys/compat/freebsd32 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" <svn-src-projects.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects> List-Post: <mailto:svn-src-projects@freebsd.org> List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=subscribe> X-List-Received-Date: Wed, 18 Nov 2009 15:48:51 -0000 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); }