fix xptcalls for macppc. ok/tested by kili@

This commit is contained in:
martynas 2008-09-15 19:20:07 +00:00
parent f4e598f252
commit 973fcef86c
4 changed files with 406 additions and 15 deletions

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.7 2008/08/23 22:27:46 martynas Exp $
# $OpenBSD: Makefile,v 1.8 2008/09/15 19:20:07 martynas Exp $
SHARED_ONLY= Yes
ONLY_FOR_ARCHS= alpha amd64 arm i386 powerpc sparc sparc64
@ -7,7 +7,7 @@ COMMENT= redesign of Mozilla's browser component
VER= 3.0.1
DISTNAME= mozilla
PKGNAME= firefox3-${VER}p5
PKGNAME= firefox3-${VER}p6
SO_VERSION= 20.0
# NOTE: Must bump minor version if any shlib's are removed from the
# components dir to avoid pkg_add -r issues.

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in,v 1.1.1.1 2008/07/25 01:52:55 martynas Exp $
--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig Wed Jun 18 18:37:01 2008
+++ xpcom/reflect/xptcall/src/md/unix/Makefile.in Wed Jun 18 20:32:04 2008
$OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in,v 1.2 2008/09/15 19:20:07 martynas Exp $
--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig Wed Apr 9 09:34:20 2008
+++ xpcom/reflect/xptcall/src/md/unix/Makefile.in Sun Sep 14 16:48:09 2008
@@ -192,7 +192,7 @@ endif
#
# OpenBSD/ARM
@ -10,3 +10,11 @@ $OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in,v 1.1.1.1 2008/07/
CPPSRCS := xptcinvoke_arm_openbsd.cpp xptcstubs_arm_openbsd.cpp
endif
@@ -340,6 +340,7 @@ endif
ifeq ($(OS_ARCH)$(OS_TEST),OpenBSDpowerpc)
CPPSRCS := xptcinvoke_ppc_openbsd.cpp xptcstubs_ppc_openbsd.cpp
ASFILES := xptcinvoke_asm_ppc_openbsd.s xptcstubs_asm_ppc_openbsd.s
+AS := $(CC) -c -x assembler-with-cpp
endif
#

View File

@ -1,14 +1,227 @@
$OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s,v 1.1.1.1 2008/07/25 01:52:55 martynas Exp $
$OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s,v 1.2 2008/09/15 19:20:07 martynas Exp $
--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_openbsd.s.orig Sun Dec 23 01:57:11 2007
+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_openbsd.s Wed Jul 16 03:44:01 2008
@@ -102,9 +102,7 @@ NS_InvokeByIndex_P:
lwz r3,8(r31) # r3 <= that
lwz r4,12(r31) # r4 <= methodIndex
lwz r5,0(r3) # r5 <= vtable ( == *that )
+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_openbsd.s Sun Sep 14 22:24:42 2008
@@ -1,43 +1,43 @@
-# -*- Mode: Asm -*-
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http:#www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1999
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
-# beard@netscape.com (Patrick Beard)
-# waterson@netscape.com (Chris Waterson)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
+// -*- Mode: Asm -*-
+//
+// ***** BEGIN LICENSE BLOCK *****
+// Version: MPL 1.1/GPL 2.0/LGPL 2.1
+//
+// The contents of this file are subject to the Mozilla Public License Version
+// 1.1 (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+// http://www.mozilla.org/MPL/
+//
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the
+// License.
+//
+// The Original Code is mozilla.org code.
+//
+// The Initial Developer of the Original Code is
+// Netscape Communications Corporation.
+// Portions created by the Initial Developer are Copyright (C) 1999
+// the Initial Developer. All Rights Reserved.
+//
+// Contributor(s):
+// Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
+// beard@netscape.com (Patrick Beard)
+// waterson@netscape.com (Chris Waterson)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// either the GNU General Public License Version 2 or later (the "GPL"), or
+// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+// in which case the provisions of the GPL or the LGPL are applicable instead
+// of those above. If you wish to allow use of your version of this file only
+// under the terms of either the GPL or the LGPL, and not to allow others to
+// use your version of this file under the terms of the MPL, indicate your
+// decision by deleting the provisions above and replace them with the notice
+// and other provisions required by the GPL or the LGPL. If you do not delete
+// the provisions above, a recipient may use your version of this file under
+// the terms of any one of the MPL, the GPL or the LGPL.
+//
+// ***** END LICENSE BLOCK *****
.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
@@ -53,80 +53,80 @@
.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
.set f30,30; .set f31,31
-
- .section ".text"
+
+ .section ".text"
.align 2
.globl NS_InvokeByIndex_P
.type NS_InvokeByIndex_P,@function
-#
-# NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
-# PRUint32 paramCount, nsXPTCVariant* params)
-#
+//
+// NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
+// PRUint32 paramCount, nsXPTCVariant* params)
+//
NS_InvokeByIndex_P:
- stwu sp,-32(sp) # setup standard stack frame
- mflr r0 # save LR
- stw r3,8(sp) # r3 <= that
- stw r4,12(sp) # r4 <= methodIndex
- stw r30,16(sp)
- stw r31,20(sp)
+ stwu sp,-32(sp) // setup standard stack frame
+ mflr r0 // save LR
+ stw r3,8(sp) // r3 <= that
+ stw r4,12(sp) // r4 <= methodIndex
+ stw r30,16(sp)
+ stw r31,20(sp)
- stw r0,36(sp) # store LR backchain
- mr r31,sp
+ stw r0,36(sp) // store LR backchain
+ mr r31,sp
- rlwinm r10,r5,3,0,27 # r10 = (ParamCount * 2 * 4) & ~0x0f
- addi r0,r10,96 # reserve stack for GPR and FPR register save area r0 = r10 + 96
- lwz r9,0(sp) # r9 = backchain
- neg r0,r0
- stwux r9,sp,r0 # reserve stack space and save SP backchain
+ rlwinm r10,r5,3,0,27 // r10 = (ParamCount * 2 * 4) & ~0x0f
+ addi r0,r10,96 // reserve stack for GPR and FPR register save area r0 = r10 + 96
+ lwz r9,0(sp) // r9 = backchain
+ neg r0,r0
+ stwux r9,sp,r0 // reserve stack space and save SP backchain
- addi r3,sp,8 # r3 <= args
- mr r4,r5 # r4 <= paramCount
- mr r5,r6 # r5 <= params
- add r6,r3,r10 # r6 <= gpregs ( == args + r10 )
- mr r30,r6 # store in r30 for use later...
- addi r7,r6,32 # r7 <= fpregs ( == gpregs + 32 )
+ addi r3,sp,8 // r3 <= args
+ mr r4,r5 // r4 <= paramCount
+ mr r5,r6 // r5 <= params
+ add r6,r3,r10 // r6 <= gpregs ( == args + r10 )
+ mr r30,r6 // store in r30 for use later...
+ addi r7,r6,32 // r7 <= fpregs ( == gpregs + 32 )
- bl invoke_copy_to_stack@local # (args, paramCount, params, gpregs, fpregs)
+ bl invoke_copy_to_stack@local // (args, paramCount, params, gpregs, fpregs)
- lfd f1,32(r30) # load FP registers with method parameters
- lfd f2,40(r30)
- lfd f3,48(r30)
- lfd f4,56(r30)
- lfd f5,64(r30)
- lfd f6,72(r30)
- lfd f7,80(r30)
- lfd f8,88(r30)
+ lfd f1,32(r30) // load FP registers with method parameters
+ lfd f2,40(r30)
+ lfd f3,48(r30)
+ lfd f4,56(r30)
+ lfd f5,64(r30)
+ lfd f6,72(r30)
+ lfd f7,80(r30)
+ lfd f8,88(r30)
- lwz r3,8(r31) # r3 <= that
- lwz r4,12(r31) # r4 <= methodIndex
- lwz r5,0(r3) # r5 <= vtable ( == *that )
-#if !((__GNUC__ == 3 && __GNUC_MINOR__ < 2) || __GXX_ABI_VERSION >= 100) # G++ pre-V3 ABI
- addi r4,r4,2 # skip first two vtable entries
-#endif
+ subi r4,r4,2 # skip first two vtable entries
slwi r4,r4,2 # convert to offset ( *= 4 )
lwzx r0,r5,r4 # r0 <= methodpointer ( == vtable + offset )
+ lwz r3,8(r31) // r3 <= that
+ lwz r4,12(r31) // r4 <= methodIndex
+ lwz r5,0(r3) // r5 <= vtable ( == *that )
+#if !((__GNUC__ == 3 && __GNUC_MINOR__ < 2) || __GXX_ABI_VERSION >= 100) // G++ pre-V3 ABI
+ addi r4,r4,2 // skip first two vtable entries
#endif
- slwi r4,r4,2 # convert to offset ( *= 4 )
- lwzx r0,r5,r4 # r0 <= methodpointer ( == vtable + offset )
+ slwi r4,r4,2 // convert to offset ( *= 4 )
+ lwzx r0,r5,r4 // r0 <= methodpointer ( == vtable + offset )
- lwz r4,4(r30) # load GP regs with method parameters
- lwz r5,8(r30)
- lwz r6,12(r30)
- lwz r7,16(r30)
- lwz r8,20(r30)
- lwz r9,24(r30)
- lwz r10,28(r30)
+ lwz r4,4(r30) // load GP regs with method parameters
+ lwz r5,8(r30)
+ lwz r6,12(r30)
+ lwz r7,16(r30)
+ lwz r8,20(r30)
+ lwz r9,24(r30)
+ lwz r10,28(r30)
- mtlr r0 # copy methodpointer to LR
- blrl # call method
-
- lwz r30,16(r31) # restore r30 & r31
- lwz r31,20(r31)
-
- lwz r11,0(sp) # clean up the stack
- lwz r0,4(r11)
- mtlr r0
- mr sp,r11
+ mtlr r0 // copy methodpointer to LR
+ blrl // call method
+
+ lwz r30,16(r31) // restore r30 & r31
+ lwz r31,20(r31)
+
+ lwz r11,0(sp) // clean up the stack
+ lwz r0,4(r11)
+ mtlr r0
+ mr sp,r11
blr
-# Magic indicating no need for an executable stack
+// Magic indicating no need for an executable stack
.section .note.GNU-stack, "", @progbits ; .previous

View File

@ -0,0 +1,170 @@
$OpenBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs_asm_ppc_openbsd_s,v 1.1 2008/09/15 19:20:07 martynas Exp $
--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_openbsd.s.orig Sun Dec 23 01:57:11 2007
+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_openbsd.s Sun Sep 14 22:21:55 2008
@@ -1,43 +1,43 @@
-# -*- Mode: Asm -*-
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http:#www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1999
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
-# beard@netscape.com (Patrick Beard)
-# waterson@netscape.com (Chris Waterson)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
+// -*- Mode: Asm -*-
+//
+// ***** BEGIN LICENSE BLOCK *****
+// Version: MPL 1.1/GPL 2.0/LGPL 2.1
+//
+// The contents of this file are subject to the Mozilla Public License Version
+// 1.1 (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+// http://www.mozilla.org/MPL/
+//
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the
+// License.
+//
+// The Original Code is mozilla.org code.
+//
+// The Initial Developer of the Original Code is
+// Netscape Communications Corporation.
+// Portions created by the Initial Developer are Copyright (C) 1999
+// the Initial Developer. All Rights Reserved.
+//
+// Contributor(s):
+// Franz.Sirl-kernel@lauterbach.com (Franz Sirl)
+// beard@netscape.com (Patrick Beard)
+// waterson@netscape.com (Chris Waterson)
+//
+// Alternatively, the contents of this file may be used under the terms of
+// either the GNU General Public License Version 2 or later (the "GPL"), or
+// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+// in which case the provisions of the GPL or the LGPL are applicable instead
+// of those above. If you wish to allow use of your version of this file only
+// under the terms of either the GPL or the LGPL, and not to allow others to
+// use your version of this file under the terms of the MPL, indicate your
+// decision by deleting the provisions above and replace them with the notice
+// and other provisions required by the GPL or the LGPL. If you do not delete
+// the provisions above, a recipient may use your version of this file under
+// the terms of any one of the MPL, the GPL or the LGPL.
+//
+// ***** END LICENSE BLOCK *****
.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
@@ -54,29 +54,29 @@
.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
.set f30,30; .set f31,31
- .section ".text"
- .align 2
+ .section ".text"
+ .align 2
.globl SharedStub
.type SharedStub,@function
SharedStub:
- stwu sp,-112(sp) # room for
- # linkage (8),
- # gprData (32),
- # fprData (64),
- # stack alignment(8)
- mflr r0
- stw r0,116(sp) # save LR backchain
+ stwu sp,-112(sp) // room for
+ // linkage (8),
+ // gprData (32),
+ // fprData (64),
+ // stack alignment(8)
+ mflr r0
+ stw r0,116(sp) // save LR backchain
- stw r4,12(sp) # save GP registers
- stw r5,16(sp) # (n.b. that we don't save r3
- stw r6,20(sp) # because PrepareAndDispatch() is savvy)
+ stw r4,12(sp) // save GP registers
+ stw r5,16(sp) // (n.b. that we don't save r3
+ stw r6,20(sp) // because PrepareAndDispatch() is savvy)
stw r7,24(sp)
stw r8,28(sp)
stw r9,32(sp)
stw r10,36(sp)
- stfd f1,40(sp) # save FP registers
+ stfd f1,40(sp) // save FP registers
stfd f2,48(sp)
stfd f3,56(sp)
stfd f4,64(sp)
@@ -85,23 +85,23 @@ SharedStub:
stfd f7,88(sp)
stfd f8,96(sp)
- # r3 has the 'self' pointer already
-
- mr r4,r11 # r4 <= methodIndex selector, passed
- # via r11 in the nsXPTCStubBase::StubXX() call
-
- addi r5,sp,120 # r5 <= pointer to callers args area,
- # beyond r3-r10/f1-f8 mapped range
-
- addi r6,sp,8 # r6 <= gprData
- addi r7,sp,40 # r7 <= fprData
-
- bl PrepareAndDispatch@local # Go!
-
- lwz r0,116(sp) # restore LR
+ // r3 has the 'self' pointer already
+
+ mr r4,r11 // r4 <= methodIndex selector, passed
+ // via r11 in the nsXPTCStubBase::StubXX() call
+
+ addi r5,sp,120 // r5 <= pointer to callers args area,
+ // beyond r3-r10/f1-f8 mapped range
+
+ addi r6,sp,8 // r6 <= gprData
+ addi r7,sp,40 // r7 <= fprData
+
+ bl PrepareAndDispatch@local // Go!
+
+ lwz r0,116(sp) // restore LR
mtlr r0
- la sp,112(sp) # clean up the stack
+ la sp,112(sp) // clean up the stack
blr
-# Magic indicating no need for an executable stack
+// Magic indicating no need for an executable stack
.section .note.GNU-stack, "", @progbits ; .previous