From 973fcef86c91f0e05dbf846bae4807c0ad5ac2db Mon Sep 17 00:00:00 2001 From: martynas Date: Mon, 15 Sep 2008 19:20:07 +0000 Subject: [PATCH] fix xptcalls for macppc. ok/tested by kili@ --- www/firefox3/Makefile | 4 +- ...om_reflect_xptcall_src_md_unix_Makefile_in | 14 +- ...l_src_md_unix_xptcinvoke_asm_ppc_openbsd_s | 233 +++++++++++++++++- ...ll_src_md_unix_xptcstubs_asm_ppc_openbsd_s | 170 +++++++++++++ 4 files changed, 406 insertions(+), 15 deletions(-) create mode 100644 www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs_asm_ppc_openbsd_s diff --git a/www/firefox3/Makefile b/www/firefox3/Makefile index 3b1aea4e48a..788278d19f7 100644 --- a/www/firefox3/Makefile +++ b/www/firefox3/Makefile @@ -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. diff --git a/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in index cb6c7bc1bf7..eafc9742627 100644 --- a/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in +++ b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_Makefile_in @@ -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 + + # diff --git a/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s index 6291a718e11..e5e3dfa9c53 100644 --- a/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s +++ b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke_asm_ppc_openbsd_s @@ -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 diff --git a/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs_asm_ppc_openbsd_s b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs_asm_ppc_openbsd_s new file mode 100644 index 00000000000..6a529ba5c48 --- /dev/null +++ b/www/firefox3/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs_asm_ppc_openbsd_s @@ -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