Date: Mon, 24 May 2010 17:24:14 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r208514 - in head/sys/ia64: ia32 ia64 include Message-ID: <201005241724.o4OHOEuE065147@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Mon May 24 17:24:14 2010 New Revision: 208514 URL: http://svn.freebsd.org/changeset/base/208514 Log: Change ia64' struct syscall_args definition so that args is a pointer to the arguments array instead of array itself. ia64 syscall arguments are readily available in the frame, point args to it, do not do unnecessary bcopy. Still reserve the array in syscall_args for ia32 emulation. Suggested and reviewed by: marcel MFC after: 1 month Modified: head/sys/ia64/ia32/ia32_trap.c head/sys/ia64/ia64/trap.c head/sys/ia64/include/proc.h Modified: head/sys/ia64/ia32/ia32_trap.c ============================================================================== --- head/sys/ia64/ia32/ia32_trap.c Mon May 24 17:23:14 2010 (r208513) +++ head/sys/ia64/ia32/ia32_trap.c Mon May 24 17:24:14 2010 (r208514) @@ -132,10 +132,11 @@ ia32_fetch_syscall_args(struct thread *t error = copyin(params, (caddr_t)args, sa->narg * sizeof(int)); else error = 0; + sa->args = &sa->args32[0]; if (error == 0) { for (i = 0; i < sa->narg; i++) - sa->args[i] = args[i]; + sa->args32[i] = args[i]; td->td_retval[0] = 0; td->td_retval[1] = tf->tf_scratch.gr10; /* edx */ } Modified: head/sys/ia64/ia64/trap.c ============================================================================== --- head/sys/ia64/ia64/trap.c Mon May 24 17:23:14 2010 (r208513) +++ head/sys/ia64/ia64/trap.c Mon May 24 17:24:14 2010 (r208514) @@ -902,13 +902,12 @@ cpu_fetch_syscall_args(struct thread *td { struct proc *p; struct trapframe *tf; - register_t *args; p = td->td_proc; tf = td->td_frame; sa->code = tf->tf_scratch.gr15; - args = &tf->tf_scratch.gr16; + sa->args = &tf->tf_scratch.gr16; /* * syscall() and __syscall() are handled the same on @@ -918,8 +917,8 @@ cpu_fetch_syscall_args(struct thread *td /* * Code is first argument, followed by actual args. */ - sa->code = args[0]; - args++; + sa->code = sa->args[0]; + sa->args++; } if (p->p_sysent->sv_mask) @@ -929,7 +928,6 @@ cpu_fetch_syscall_args(struct thread *td else sa->callp = &p->p_sysent->sv_table[sa->code]; sa->narg = sa->callp->sy_narg; - bcopy(args, sa->args, sa->narg * sizeof(sa->args[0])); td->td_retval[0] = 0; td->td_retval[1] = 0; Modified: head/sys/ia64/include/proc.h ============================================================================== --- head/sys/ia64/include/proc.h Mon May 24 17:23:14 2010 (r208513) +++ head/sys/ia64/include/proc.h Mon May 24 17:24:14 2010 (r208514) @@ -45,7 +45,8 @@ struct mdproc { struct syscall_args { u_int code; struct sysent *callp; - register_t args[8]; + register_t *args; + register_t args32[8]; int narg; }; #define HAVE_SYSCALL_ARGS_DEF 1
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005241724.o4OHOEuE065147>