From owner-svn-src-projects@FreeBSD.ORG Tue Oct 6 03:53:30 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 129881065676; Tue, 6 Oct 2009 03:53:30 +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 011628FC16; Tue, 6 Oct 2009 03:53:30 +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 n963rTCK034732; Tue, 6 Oct 2009 03:53:29 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n963rT9F034730; Tue, 6 Oct 2009 03:53:29 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200910060353.n963rT9F034730@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 6 Oct 2009 03:53:29 +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: r197798 - projects/ppc64/sys/powerpc/aim64 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: Tue, 06 Oct 2009 03:53:30 -0000 Author: nwhitehorn Date: Tue Oct 6 03:53:29 2009 New Revision: 197798 URL: http://svn.freebsd.org/changeset/base/197798 Log: Set up a stack for Open Firmware to use. Make it real-mode accessible, and use the 32-bit ABI for the stack. This should prevent stack frame corruption during the OF thunk. Modified: projects/ppc64/sys/powerpc/aim64/locore.S Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Tue Oct 6 02:13:32 2009 (r197797) +++ projects/ppc64/sys/powerpc/aim64/locore.S Tue Oct 6 03:53:29 2009 (r197798) @@ -78,6 +78,7 @@ .set kernbase, KERNBASE #define TMPSTKSZ 8192 /* 8K temporary stack */ +#define OFWSTKSZ 4096 /* 4K Open Firmware stack */ /* * Globals @@ -86,6 +87,8 @@ .align 4 GLOBAL(tmpstk) .space TMPSTKSZ +GLOBAL(ofwstk) + .space OFWSTKSZ GLOBAL(esym) .llong 0 /* end of symbol table */ @@ -253,6 +256,20 @@ ASENTRY(ofw_32bit_mode_entry) lis %r4,openfirmware_entry@ha ld %r4,openfirmware_entry@l(%r4) /* read client interface handler */ + /* + * Set up OF stack. This needs to be accessible in real mode and + * use the 32-bit ABI stack frame format. The pointer to the current + * kernel stack is placed at the very top of the stack so we + * can get it back later. + */ + mr %r5,%r1 + lis %r1,(ofwstk+OFWSTKSZ-16)@ha + addi %r1,%r1,(ofwstk+OFWSTKSZ-16)@l + std %r5,8(%r1) /* Save real stack pointer */ + li %r5,0 + stw %r5,4(%r1) + stw %r5,0(%r1) + /* Set MSR, branch to OF, and come back */ lis %r5,ofmsr@ha ld %r5,ofmsr@l(%r5) @@ -265,6 +282,8 @@ ASENTRY(ofw_32bit_mode_entry) mtmsr %r14 isync + ld %r1,8(%r1) /* Load real stack pointer */ + /* Now we can use the stack again, so get the real MSR */ ld %r5,216(%r1) mtmsrd %r5