From owner-svn-src-projects@FreeBSD.ORG Mon Nov 16 04:14:23 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 03DE9106566C; Mon, 16 Nov 2009 04:14:23 +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 E5BEE8FC1B; Mon, 16 Nov 2009 04:14:22 +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 nAG4EMdR057258; Mon, 16 Nov 2009 04:14:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAG4EM3U057253; Mon, 16 Nov 2009 04:14:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200911160414.nAG4EM3U057253@svn.freebsd.org> From: Nathan Whitehorn <nwhitehorn@FreeBSD.org> Date: Mon, 16 Nov 2009 04:14:22 +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: r199309 - in projects/ppc64/sys/powerpc: aim powerpc 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: Mon, 16 Nov 2009 04:14:23 -0000 Author: nwhitehorn Date: Mon Nov 16 04:14:22 2009 New Revision: 199309 URL: http://svn.freebsd.org/changeset/base/199309 Log: Some missing bits from the compat layer, in particular an implementation of fuword32 for 64-bit systems. With this change, sysinstall will now ask me what kind of terminal I wish to use in the Cell system simulator. Modified: projects/ppc64/sys/powerpc/aim/copyinout.c projects/ppc64/sys/powerpc/aim/trap.c projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Modified: projects/ppc64/sys/powerpc/aim/copyinout.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/copyinout.c Mon Nov 16 04:09:11 2009 (r199308) +++ projects/ppc64/sys/powerpc/aim/copyinout.c Mon Nov 16 04:14:22 2009 (r199309) @@ -353,6 +353,33 @@ fubyte(const void *addr) return (val); } +#ifdef __powerpc64__ +int32_t +fuword32(const void *addr) +{ + struct thread *td; + pmap_t pm; + faultbuf env; + int32_t *p, val; + + td = PCPU_GET(curthread); + pm = &td->td_proc->p_vmspace->vm_pmap; + p = (int32_t *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK)); + + if (setfault(env)) { + td->td_pcb->pcb_onfault = NULL; + return (-1); + } + + set_user_sr(pm,addr); + + val = *p; + + td->td_pcb->pcb_onfault = NULL; + return (val); +} +#endif + long fuword(const void *addr) { @@ -378,11 +405,13 @@ fuword(const void *addr) return (val); } +#ifndef __powerpc64__ int32_t fuword32(const void *addr) { return ((int32_t)fuword(addr)); } +#endif uint32_t casuword32(volatile uint32_t *addr, uint32_t old, uint32_t new) Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Mon Nov 16 04:09:11 2009 (r199308) +++ projects/ppc64/sys/powerpc/aim/trap.c Mon Nov 16 04:14:22 2009 (r199309) @@ -93,6 +93,9 @@ int badaddr(void *, size_t); int badaddr_read(void *, size_t, int *); extern char *syscallnames[]; +#ifdef COMPAT_FREEBSD32 +extern char *freebsd32_syscallnames[]; +#endif struct powerpc_exception { u_int vector; @@ -361,6 +364,7 @@ syscall(struct trapframe *frame) size_t narg, argsz; u_register_t args[10]; u_int code; + char **scall_names; td = PCPU_GET(curthread); p = td->td_proc; @@ -371,11 +375,6 @@ syscall(struct trapframe *frame) params = (caddr_t)(frame->fixreg + FIRSTARG); n = NARGREG; - if (p->p_sysent->sv_flags & SV_ILP32) - argsz = sizeof(uint32_t); - else - argsz = sizeof(uint64_t); - if (p->p_sysent->sv_prepsyscall) { /* * The prep code is MP aware. @@ -419,9 +418,19 @@ syscall(struct trapframe *frame) narg = callp->sy_narg; if (p->p_sysent->sv_flags & SV_ILP32) { + argsz = sizeof(uint32_t); + #ifdef COMPAT_FREEBSD32 + scall_names = freebsd32_syscallnames; + #else + scall_names = syscallnames; + #endif + for (i = 0; i < n; i++) args[i] = ((u_register_t *)(params))[i] & 0xffffffff; } else { + argsz = sizeof(uint64_t); + scall_names = syscallnames; + for (i = 0; i < n; i++) args[i] = ((u_register_t *)(params))[i]; } @@ -433,7 +442,7 @@ syscall(struct trapframe *frame) error = 0; CTR5(KTR_SYSC, "syscall: p=%s %s(%x %x %x)", td->td_name, - syscallnames[code], + scall_names[code], args[0], args[1], args[2]); #ifdef KTRACE @@ -456,7 +465,7 @@ syscall(struct trapframe *frame) AUDIT_SYSCALL_EXIT(error, td); CTR3(KTR_SYSC, "syscall: p=%s %s ret=%x", td->td_name, - syscallnames[code], td->td_retval[0]); + scall_names[code], td->td_retval[0]); } switch (error) { case 0: @@ -500,13 +509,13 @@ syscall(struct trapframe *frame) * Check for misbehavior. */ WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???"); + (code >= 0 && code < SYS_MAXSYSCALL) ? scall_names[code] : "???"); KASSERT(td->td_critnest == 0, ("System call %s returning in a critical section", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???")); + (code >= 0 && code < SYS_MAXSYSCALL) ? scall_names[code] : "???")); KASSERT(td->td_locks == 0, ("System call %s returning with %d locks held", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???", + (code >= 0 && code < SYS_MAXSYSCALL) ? scall_names[code] : "???", td->td_locks)); #ifdef KTRACE Modified: projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Mon Nov 16 04:09:11 2009 (r199308) +++ projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Mon Nov 16 04:14:22 2009 (r199309) @@ -81,14 +81,17 @@ struct sysentvec elf32_freebsd_sysvec = .sv_minsigstksz = MINSIGSTKSZ, .sv_pagesize = PAGE_SIZE, .sv_minuser = VM_MIN_ADDRESS, - .sv_maxuser = VM_MAXUSER_ADDRESS, - .sv_usrstack = USRSTACK, - .sv_psstrings = PS_STRINGS, .sv_stackprot = VM_PROT_ALL, #ifdef __powerpc64__ + .sv_maxuser = VM_MAXUSER_ADDRESS, + .sv_usrstack = FREEBSD32_USRSTACK, + .sv_psstrings = FREEBSD32_PS_STRINGS, .sv_copyout_strings = freebsd32_copyout_strings, .sv_setregs = ppc32_setregs, #else + .sv_maxuser = VM_MAXUSER_ADDRESS, + .sv_usrstack = USRSTACK, + .sv_psstrings = PS_STRINGS, .sv_copyout_strings = exec_copyout_strings, .sv_setregs = exec_setregs, #endif Modified: projects/ppc64/sys/powerpc/powerpc/exec_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Mon Nov 16 04:09:11 2009 (r199308) +++ projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Mon Nov 16 04:14:22 2009 (r199309) @@ -490,7 +490,7 @@ ppc32_setregs(struct thread *td, u_long tf->fixreg[5] = (register_t)arginfo.ps_envstr; tf->fixreg[6] = 0; /* auxillary vector */ tf->fixreg[7] = 0; /* termination vector */ - tf->fixreg[8] = (register_t)PS_STRINGS; /* NetBSD extension */ + tf->fixreg[8] = (register_t)FREEBSD32_PS_STRINGS; /* NetBSD extension */ tf->srr0 = entry; tf->srr1 = PSL_MBO | PSL_USERSET | PSL_FE_DFLT;