From owner-svn-src-projects@FreeBSD.ORG Fri Nov 20 15:51:59 2009 Return-Path: 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 23AF5106568B; Fri, 20 Nov 2009 15:51:59 +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 12BA58FC13; Fri, 20 Nov 2009 15:51:59 +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 nAKFpwtN048637; Fri, 20 Nov 2009 15:51:58 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAKFpwv9048635; Fri, 20 Nov 2009 15:51:58 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200911201551.nAKFpwv9048635@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 20 Nov 2009 15:51:58 +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: r199589 - projects/ppc64/sys/powerpc/aim 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" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Nov 2009 15:51:59 -0000 Author: nwhitehorn Date: Fri Nov 20 15:51:58 2009 New Revision: 199589 URL: http://svn.freebsd.org/changeset/base/199589 Log: Add support for stack-passed arguments in the freebsd32 compatibility layer and add some speculative support for syscalls from 64-bit processes. Modified: projects/ppc64/sys/powerpc/aim/trap.c Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Fri Nov 20 15:51:07 2009 (r199588) +++ projects/ppc64/sys/powerpc/aim/trap.c Fri Nov 20 15:51:58 2009 (r199589) @@ -441,6 +441,15 @@ syscall(struct trapframe *frame) else error = 0; +#ifdef __powerpc64__ + if (p->p_sysent->sv_flags & SV_ILP32 && narg > n) { + /* Expand the size of arguments copied from the stack */ + + for (i = narg; i >= n; i--) + args[i] = ((uint32_t *)(&args[n]))[i-n]; + } +#endif + CTR5(KTR_SYSC, "syscall: p=%s %s(%x %x %x)", td->td_name, scall_names[code], args[0], args[1], args[2]); @@ -469,7 +478,8 @@ syscall(struct trapframe *frame) } switch (error) { case 0: - if (frame->fixreg[0] == SYS___syscall && + if (p->p_sysent->sv_flags & SV_ILP32 && + frame->fixreg[0] == SYS___syscall && code != SYS_freebsd6_lseek && code != SYS_lseek) { /* * 64-bit return, 32-bit syscall. Fixup byte order