From owner-svn-src-head@freebsd.org Sat Aug 6 15:06:20 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C2CC6BAF681; Sat, 6 Aug 2016 15:06:20 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7A6201B1F; Sat, 6 Aug 2016 15:06:20 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u76F6JI4048942; Sat, 6 Aug 2016 15:06:19 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u76F6JwI048940; Sat, 6 Aug 2016 15:06:19 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201608061506.u76F6JwI048940@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 6 Aug 2016 15:06:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r303796 - head/sys/cddl/dev/dtrace/powerpc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Aug 2016 15:06:20 -0000 Author: jhibbits Date: Sat Aug 6 15:06:19 2016 New Revision: 303796 URL: https://svnweb.freebsd.org/changeset/base/303796 Log: Two fixups for dtrace * Use the right incantation to get the next stack pointer. Since powerpc uses special frames for traps, dereferencing the stack pointer straight up won't get us the next stack pointer in every case. * Clear EE using the correct instruction sequence. The PowerISA states that 'andi.' ANDs the register with 0||, instead of sign extending or filling out the unavailable bits with 1. Even if it did sign extend, PSL_EE is 0x8000, so ~PSL_EE is 0x7fff, and the upper bits would be cleared. Use rlwinm in the 32-bit case, and a two-rotate sequence in the 64-bit case, the latter chosen to follow the output generated by gcc. MFC after: 1 week Modified: head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c Modified: head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S ============================================================================== --- head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S Sat Aug 6 13:32:40 2016 (r303795) +++ head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S Sat Aug 6 15:06:19 2016 (r303796) @@ -67,7 +67,13 @@ dtrace_icookie_t dtrace_interrupt_disabl */ ASENTRY_NOPROF(dtrace_interrupt_disable) mfmsr %r3 - andi. %r0,%r3,~PSL_EE@l +#ifdef __powerpc64__ + /* Two-instruction sequence to clear EE flag */ + rldicl %r0,%r3,48,1 + rotldi %r0,%r0,16 +#else + rlwinm %r0,%r3,0,~PSL_EE /* Clear EE flag */ +#endif mtmsr %r0 blr END(dtrace_interrupt_disable) Modified: head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c ============================================================================== --- head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c Sat Aug 6 13:32:40 2016 (r303795) +++ head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c Sat Aug 6 15:06:19 2016 (r303796) @@ -545,7 +545,7 @@ dtrace_getstackdepth(int aframes) else aframes--; osp = sp; - sp = *(uintptr_t *)sp; + sp = dtrace_next_sp(sp); } if (depth < aframes) return (0);