summaryrefslogtreecommitdiff
path: root/www/firefox
diff options
context:
space:
mode:
authortaya <taya@pkgsrc.org>2004-06-02 15:09:01 +0000
committertaya <taya@pkgsrc.org>2004-06-02 15:09:01 +0000
commit59be239035f176b0635f98e4d75c85b3a95d7b1c (patch)
tree772ced69fe879be82087ff7e8b1b2a11a10b994f /www/firefox
parent0245c8cc7e88a16408bde9ceab24b8050feb8fb8 (diff)
downloadpkgsrc-59be239035f176b0635f98e4d75c85b3a95d7b1c.tar.gz
- copy amd64 support patch from www/mozilla
- correct ARM architecture handling - add g++-3.0 support for xpcom module on alpha - bump PKGREVISION
Diffstat (limited to 'www/firefox')
-rw-r--r--www/firefox/Makefile5
-rw-r--r--www/firefox/distinfo13
-rw-r--r--www/firefox/patches/patch-ac23
-rw-r--r--www/firefox/patches/patch-ba66
-rw-r--r--www/firefox/patches/patch-bb31
-rw-r--r--www/firefox/patches/patch-bs14
-rw-r--r--www/firefox/patches/patch-bt16
-rw-r--r--www/firefox/patches/patch-bu179
-rw-r--r--www/firefox/patches/patch-bv211
-rw-r--r--www/firefox/patches/patch-bw64
10 files changed, 592 insertions, 30 deletions
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 6b9480f27b2..d425316c70a 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -1,9 +1,10 @@
-# $NetBSD: Makefile,v 1.3 2004/04/24 01:21:17 taya Exp $
+# $NetBSD: Makefile,v 1.4 2004/06/02 15:09:01 taya Exp $
MOZILLA= firefox
MOZILLA_BIN= firefox-bin
+MOZCONFDIR= .mozilla
MOZ_VER= 0.8
-PKGREVISION= 2
+PKGREVISION= 3
EXTRACT_SUFX= .tar.bz2
DISTNAME= ${MOZILLA}-source-${MOZ_VER}
MASTER_SITES= http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${MOZ_VER}/ \
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index 1856f693a3a..9e6a6daf191 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -1,9 +1,9 @@
-$NetBSD: distinfo,v 1.4 2004/04/29 16:19:36 recht Exp $
+$NetBSD: distinfo,v 1.5 2004/06/02 15:09:01 taya Exp $
SHA1 (firefox-source-0.8.tar.bz2) = 8282f17a8f51265a86923c03362bba629162bf05
Size (firefox-source-0.8.tar.bz2) = 31102943 bytes
SHA1 (patch-ab) = ddb1ba102585037100f7dd0c0c04e45caf32732d
-SHA1 (patch-ac) = 3181d6004e513988f5169df3cc13b4ca98c19bec
+SHA1 (patch-ac) = d5e3f5833860cd3404030eff76c993ab48c0d8df
SHA1 (patch-ad) = 09091d0a2ded2775ca35d1315ae9b95c506b28ef
SHA1 (patch-ae) = 99935f034e6485e9e0d4eaf20e6ddd2b90b75ad5
SHA1 (patch-af) = 3b6f5c71146b3a402b164b7f10fb652408712b73
@@ -20,8 +20,8 @@ SHA1 (patch-ap) = 522eeeba2ff4fb57bb4bf6e83a1849e4849ca918
SHA1 (patch-aw) = ba1a408cd3b44dcd2123672ec4cbcefb436e5330
SHA1 (patch-ax) = 070c88dee0446b093ab1c2a9120dc1747642d46f
SHA1 (patch-ay) = b9bc5ce449c6851781b12cd1e7bc43186b3654fd
-SHA1 (patch-ba) = 35256ee83e446c174adf311d8d8aaf90207f309e
-SHA1 (patch-bb) = 11929b787fcc04306612711bc15b6c53d73afd63
+SHA1 (patch-ba) = d2e195900ed806aaf18e8a56efcf26c0bd4941ce
+SHA1 (patch-bb) = b3cedb7b6ae46749d5222ab9fd6bc087c781d459
SHA1 (patch-be) = dd85f24f2ebb10d2435055ab4540d27178d8074d
SHA1 (patch-bm) = 17cf1207bd3f3fffa355a81c8f803704068438a3
SHA1 (patch-bn) = 78e6b99604049e6033985c230155dfd437c97660
@@ -29,3 +29,8 @@ SHA1 (patch-bo) = a4fd1fc935e671aa12f30ccb24fa83787cc8f14f
SHA1 (patch-bp) = b542833425591539a6b859be4eea55c88b7d69e8
SHA1 (patch-bq) = 0c520287d97027da06a5aa65cbd038bf19a49dde
SHA1 (patch-br) = 4fd94d2748a39a21791aaef27c9c8a8d2a1eadd8
+SHA1 (patch-bs) = e9434aadc52b0120dcfc80e57002152d2bd47605
+SHA1 (patch-bt) = a033b83ee633391ffc138442697fbe754ec92902
+SHA1 (patch-bu) = db33b8651e3cb1fbf9a18dbe78e1e8288cfda0ee
+SHA1 (patch-bv) = 4f23dfd885131ea866f31370f1421e7c19706860
+SHA1 (patch-bw) = 789f63b68eaffac878866b5d111de60939d1f844
diff --git a/www/firefox/patches/patch-ac b/www/firefox/patches/patch-ac
index 06a2afe1f13..e7d7df0ab27 100644
--- a/www/firefox/patches/patch-ac
+++ b/www/firefox/patches/patch-ac
@@ -1,9 +1,18 @@
-$NetBSD: patch-ac,v 1.1.1.1 2004/02/29 17:44:58 xtraeme Exp $
+$NetBSD: patch-ac,v 1.2 2004/06/02 15:09:01 taya Exp $
-diff -ru ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in ./xpcom/reflect/xptcall/src/md/unix/Makefile.in
---- ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in 2003-08-15 13:00:23.000000000 +0900
-+++ ./xpcom/reflect/xptcall/src/md/unix/Makefile.in 2003-10-20 10:17:16.000000000 +0900
-@@ -135,7 +135,7 @@
+--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig 2003-08-15 13:00:23.000000000 +0900
++++ xpcom/reflect/xptcall/src/md/unix/Makefile.in 2004-05-30 21:36:44.000000000 +0900
+@@ -49,6 +49,9 @@
+ ifeq (86,$(findstring 86,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_unixish_x86.cpp xptcstubs_unixish_x86.cpp
+ endif
++ifeq (amd64,$(OS_TEST))
++CPPSRCS := xptcinvoke_unixish_amd64.cpp xptcstubs_unixish_amd64.cpp
++endif
+ endif
+ #
+ # New code for Linux, et. al., with gcc
+@@ -135,7 +138,7 @@
# NetBSD/ARM
#
ifeq ($(OS_ARCH),NetBSD)
@@ -12,7 +21,7 @@ diff -ru ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in ./xpcom/r
CPPSRCS := xptcinvoke_arm_netbsd.cpp xptcstubs_arm_netbsd.cpp
endif
endif
-@@ -169,7 +169,7 @@
+@@ -169,7 +172,7 @@
# NetBSD/m68k
#
ifeq ($(OS_ARCH),NetBSD)
@@ -21,7 +30,7 @@ diff -ru ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in ./xpcom/r
CPPSRCS := xptcinvoke_netbsd_m68k.cpp xptcstubs_netbsd_m68k.cpp
endif
endif
-@@ -295,6 +295,13 @@
+@@ -295,6 +298,13 @@
CPPSRCS := xptcinvoke_sparc_netbsd.cpp xptcstubs_sparc_netbsd.cpp
ASFILES := xptcinvoke_asm_sparc_netbsd.s xptcstubs_asm_sparc_netbsd.s
endif
diff --git a/www/firefox/patches/patch-ba b/www/firefox/patches/patch-ba
index 140aed17213..ca9548990bd 100644
--- a/www/firefox/patches/patch-ba
+++ b/www/firefox/patches/patch-ba
@@ -1,15 +1,15 @@
-$NetBSD: patch-ba,v 1.1.1.1 2004/02/29 17:45:02 xtraeme Exp $
+$NetBSD: patch-ba,v 1.2 2004/06/02 15:09:01 taya Exp $
diff -ru ../Orig/mozilla/nsprpub/pr/include/md/_netbsd.cfg ./nsprpub/pr/include/md/_netbsd.cfg
--- ../Orig/mozilla/nsprpub/pr/include/md/_netbsd.cfg 2000-12-02 06:29:17.000000000 +0900
-+++ ./nsprpub/pr/include/md/_netbsd.cfg 2003-10-20 10:18:58.000000000 +0900
++++ ./nsprpub/pr/include/md/_netbsd.cfg 2004-05-30 23:39:50.000000000 +0900
@@ -45,7 +45,8 @@
#define PR_AF_INET6 24 /* same as AF_INET6 */
-#if defined(__i386__) || defined(__arm32__) || defined(__MIPSEL__)
-+#if defined(__i386__) || defined(__arm32__) || defined(__arm__) || \
-+ defined(__armel__) || defined(__MIPSEL__)
++#if defined(__i386__) || defined(__arm32__) || defined(__ARMEL__) || \
++ defined(__MIPSEL__)
#define IS_LITTLE_ENDIAN 1
#undef IS_BIG_ENDIAN
@@ -64,7 +64,63 @@ diff -ru ../Orig/mozilla/nsprpub/pr/include/md/_netbsd.cfg ./nsprpub/pr/include/
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+
-+#elif defined(__sparc__) || defined(__MIPSEB__) || defined(__armeb__)
++#elif defined(__sparc__) || defined(__MIPSEB__) || defined(__ARMEB__)
#undef IS_LITTLE_ENDIAN
#define IS_BIG_ENDIAN 1
+@@ -184,6 +231,55 @@
+ #define PR_BYTES_PER_WORD_LOG2 3
+ #define PR_BYTES_PER_DWORD_LOG2 3
+
++#elif defined(__amd64__)
++#define IS_LITTLE_ENDIAN 1
++#undef IS_BIG_ENDIAN
++#define IS_64
++
++#define PR_BYTES_PER_BYTE 1
++#define PR_BYTES_PER_SHORT 2
++#define PR_BYTES_PER_INT 4
++#define PR_BYTES_PER_INT64 8
++#define PR_BYTES_PER_LONG 8
++#define PR_BYTES_PER_FLOAT 4
++#define PR_BYTES_PER_DOUBLE 8
++#define PR_BYTES_PER_WORD 8
++#define PR_BYTES_PER_DWORD 8
++
++#define PR_BITS_PER_BYTE 8
++#define PR_BITS_PER_SHORT 16
++#define PR_BITS_PER_INT 32
++#define PR_BITS_PER_INT64 64
++#define PR_BITS_PER_LONG 64
++#define PR_BITS_PER_FLOAT 32
++#define PR_BITS_PER_DOUBLE 64
++#define PR_BITS_PER_WORD 64
++
++#define PR_BITS_PER_BYTE_LOG2 3
++#define PR_BITS_PER_SHORT_LOG2 4
++#define PR_BITS_PER_INT_LOG2 5
++#define PR_BITS_PER_INT64_LOG2 6
++#define PR_BITS_PER_LONG_LOG2 6
++#define PR_BITS_PER_FLOAT_LOG2 5
++#define PR_BITS_PER_DOUBLE_LOG2 6
++#define PR_BITS_PER_WORD_LOG2 6
++
++#define PR_ALIGN_OF_SHORT 2
++#define PR_ALIGN_OF_INT 4
++#define PR_ALIGN_OF_LONG 8
++#define PR_ALIGN_OF_INT64 8
++#define PR_ALIGN_OF_FLOAT 4
++#define PR_ALIGN_OF_DOUBLE 8
++#define PR_ALIGN_OF_POINTER 8
++#define PR_ALIGN_OF_WORD 8
++
++#define PR_BYTES_PER_WORD_LOG2 3
++#define PR_BYTES_PER_DWORD_LOG2 3
++
++#define HAVE_LONG_LONG
++#define HAVE_ALIGNED_DOUBLES
++#define HAVE_ALIGNED_LONGLONGS
++
+ #elif defined(__powerpc__) || defined(__m68k__)
+
+ #undef IS_LITTLE_ENDIAN
diff --git a/www/firefox/patches/patch-bb b/www/firefox/patches/patch-bb
index 9b9bac61ce2..956982134e4 100644
--- a/www/firefox/patches/patch-bb
+++ b/www/firefox/patches/patch-bb
@@ -1,8 +1,15 @@
-$NetBSD: patch-bb,v 1.1.1.1 2004/02/29 17:45:02 xtraeme Exp $
+$NetBSD: patch-bb,v 1.2 2004/06/02 15:09:01 taya Exp $
---- nsprpub/pr/include/md/_netbsd.h.orig 2004-02-27 14:55:33.000000000 +0900
-+++ nsprpub/pr/include/md/_netbsd.h 2004-02-27 15:29:42.000000000 +0900
-@@ -48,12 +48,20 @@
+diff -ru ../Orig/mozilla/nsprpub/pr/include/md/_netbsd.h ./nsprpub/pr/include/md/_netbsd.h
+--- ../Orig/mozilla/nsprpub/pr/include/md/_netbsd.h 2003-09-12 02:24:53.000000000 +0900
++++ ./nsprpub/pr/include/md/_netbsd.h 2004-05-30 23:41:41.000000000 +0900
+@@ -44,16 +44,26 @@
+ #define _PR_SI_ARCHITECTURE "x86"
+ #elif defined(__alpha__)
+ #define _PR_SI_ARCHITECTURE "alpha"
++#elif defined(__amd64__)
++#define _PR_SI_ARCHITECTURE "amd64"
+ #elif defined(__m68k__)
#define _PR_SI_ARCHITECTURE "m68k"
#elif defined(__powerpc__)
#define _PR_SI_ARCHITECTURE "powerpc"
@@ -14,16 +21,16 @@ $NetBSD: patch-bb,v 1.1.1.1 2004/02/29 17:45:02 xtraeme Exp $
#define _PR_SI_ARCHITECTURE "mips"
#elif defined(__arm32__)
#define _PR_SI_ARCHITECTURE "arm32"
-+#elif defined(__arm__)
-+#define _PR_SI_ARCHITECTURE "arm"
-+#elif defined(__armel__)
++#elif defined(__ARMEL__)
+#define _PR_SI_ARCHITECTURE "armel"
-+#elif defined(__armeb__)
++#elif defined(__ARMEL__)
+#define _PR_SI_ARCHITECTURE "armeb"
++#elif defined(__arm__)
++#define _PR_SI_ARCHITECTURE "arm"
#endif
#if defined(__ELF__)
-@@ -86,6 +94,12 @@
+@@ -86,6 +96,12 @@
#define _PR_INET6_PROBE
#endif
@@ -36,7 +43,7 @@ $NetBSD: patch-bb,v 1.1.1.1 2004/02/29 17:45:02 xtraeme Exp $
#define USE_SETJMP
#ifndef _PR_PTHREADS
-@@ -108,7 +122,17 @@
+@@ -108,7 +124,17 @@
}
#define _MD_GET_SP(_thread) CONTEXT(_thread)[2]
#endif
@@ -55,12 +62,12 @@ $NetBSD: patch-bb,v 1.1.1.1 2004/02/29 17:45:02 xtraeme Exp $
#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
{ \
sigsetjmp(CONTEXT(_thread), 1); \
-@@ -150,7 +174,7 @@
+@@ -150,7 +176,7 @@
}
#define _MD_GET_SP(_thread) CONTEXT(_thread)[32]
#endif
-#ifdef __arm32__
-+#if defined(__arm32__) || defined(__arm__) || defined(__armel__) || defined(__armeb__)
++#ifdef __arm__
#define _MD_INIT_CONTEXT(_thread, _sp, _main, status) \
{ \
sigsetjmp(CONTEXT(_thread), 1); \
diff --git a/www/firefox/patches/patch-bs b/www/firefox/patches/patch-bs
new file mode 100644
index 00000000000..c45abed5021
--- /dev/null
+++ b/www/firefox/patches/patch-bs
@@ -0,0 +1,14 @@
+$NetBSD: patch-bs,v 1.1 2004/06/02 15:09:01 taya Exp $
+
+--- config/mkdepend/imakemdep.h.orig 2004-05-30 11:16:09.000000000 +0900
++++ config/mkdepend/imakemdep.h 2004-05-30 11:17:01.000000000 +0900
+@@ -277,6 +277,9 @@
+ # ifdef __i386__
+ "-D__i386__",
+ # endif
++#if defined(__amd64__) || defined(__x86_64__)
++ "-D__amd64__ -D__x86_64__",
++# endif
+ # ifdef __GNUC__
+ "-traditional",
+ # endif
diff --git a/www/firefox/patches/patch-bt b/www/firefox/patches/patch-bt
new file mode 100644
index 00000000000..e3cd6905f93
--- /dev/null
+++ b/www/firefox/patches/patch-bt
@@ -0,0 +1,16 @@
+$NetBSD: patch-bt,v 1.1 2004/06/02 15:09:01 taya Exp $
+
+--- nsprpub/pr/src/io/prprf.c.orig 2003-02-27 08:53:42.000000000 +0900
++++ nsprpub/pr/src/io/prprf.c 2004-05-30 14:47:15.000000000 +0900
+@@ -51,7 +51,10 @@
+ ** Note: on some platforms va_list is defined as an array,
+ ** and requires array notation.
+ */
+-#if (defined(LINUX) && defined(__powerpc__)) || \
++#if defined(__amd64__)
++#include <stdarg.h>
++#define VARARGS_ASSIGN(foo, bar) va_copy((foo), (bar))
++#elif (defined(LINUX) && defined(__powerpc__)) || \
+ (defined(LINUX) && defined(__s390__)) || \
+ (defined(LINUX) && defined(__s390x__)) || \
+ defined(WIN16) || defined(QNX) || \
diff --git a/www/firefox/patches/patch-bu b/www/firefox/patches/patch-bu
new file mode 100644
index 00000000000..6551a2a0929
--- /dev/null
+++ b/www/firefox/patches/patch-bu
@@ -0,0 +1,179 @@
+$NetBSD: patch-bu,v 1.1 2004/06/02 15:09:01 taya Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_unixish_amd64.cpp.orig 2004-05-30 21:38:13.000000000 +0900
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_unixish_amd64.cpp 2004-05-30 21:37:22.000000000 +0900
+@@ -0,0 +1,174 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++// Platform specific code to invoke XPCOM methods on native objects
++
++#include "xptcprivate.h"
++
++// 6 integral parameters are passed in registers
++const PRUint32 GPR_COUNT = 6;
++
++// 8 floating point parameters are passed in SSE registers
++const PRUint32 FPR_COUNT = 8;
++
++// Remember that these 'words' are 64-bit long
++static inline void
++invoke_count_words(PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint32 & nr_gpr, PRUint32 & nr_fpr, PRUint32 & nr_stack)
++{
++ nr_gpr = 1; // skip one GP register for 'that'
++ nr_fpr = 0;
++ nr_stack = 0;
++
++ /* Compute number of eightbytes of class MEMORY. */
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (!s->IsPtrData()
++ && (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) {
++ if (nr_fpr < FPR_COUNT)
++ nr_fpr++;
++ else
++ nr_stack++;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ nr_gpr++;
++ else
++ nr_stack++;
++ }
++ }
++}
++
++static void
++invoke_copy_to_stack(PRUint64 * d, PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint64 * gpregs, double * fpregs)
++{
++ PRUint32 nr_gpr = 1; // skip one GP register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (s->IsPtrData())
++ value = (PRUint64) s->ptr;
++ else {
++ switch (s->type) {
++ case nsXPTType::T_FLOAT: break;
++ case nsXPTType::T_DOUBLE: break;
++ case nsXPTType::T_I8: value = s->val.i8; break;
++ case nsXPTType::T_I16: value = s->val.i16; break;
++ case nsXPTType::T_I32: value = s->val.i32; break;
++ case nsXPTType::T_I64: value = s->val.i64; break;
++ case nsXPTType::T_U8: value = s->val.u8; break;
++ case nsXPTType::T_U16: value = s->val.u16; break;
++ case nsXPTType::T_U32: value = s->val.u32; break;
++ case nsXPTType::T_U64: value = s->val.u64; break;
++ case nsXPTType::T_BOOL: value = s->val.b; break;
++ case nsXPTType::T_CHAR: value = s->val.c; break;
++ case nsXPTType::T_WCHAR: value = s->val.wc; break;
++ default: value = (PRUint64) s->val.p; break;
++ }
++ }
++
++ if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((double *)d) = s->val.d;
++ d++;
++ }
++ }
++ else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((float *)d) = s->val.f;
++ d++;
++ }
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ gpregs[nr_gpr++] = value;
++ else
++ *d++ = value;
++ }
++ }
++}
++
++extern "C"
++XPTC_PUBLIC_API(nsresult)
++XPTC_InvokeByIndex(nsISupports * that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant * params)
++{
++ PRUint32 nr_gpr, nr_fpr, nr_stack;
++ invoke_count_words(paramCount, params, nr_gpr, nr_fpr, nr_stack);
++
++ // Stack, if used, must be 16-bytes aligned
++ if (nr_stack)
++ nr_stack = (nr_stack + 1) & ~1;
++
++ // Load parameters to stack, if necessary
++ PRUint64 *stack = (PRUint64 *) __builtin_alloca(nr_stack * 8);
++ PRUint64 gpregs[GPR_COUNT];
++ double fpregs[FPR_COUNT];
++ invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs);
++
++ // Load FPR registers from fpregs[]
++ register double d0 asm("xmm0");
++ register double d1 asm("xmm1");
++ register double d2 asm("xmm2");
++ register double d3 asm("xmm3");
++ register double d4 asm("xmm4");
++ register double d5 asm("xmm5");
++ register double d6 asm("xmm6");
++ register double d7 asm("xmm7");
++
++ switch (nr_fpr) {
++#define ARG_FPR(N) \
++ case N+1: d##N = fpregs[N];
++ ARG_FPR(7);
++ ARG_FPR(6);
++ ARG_FPR(5);
++ ARG_FPR(4);
++ ARG_FPR(3);
++ ARG_FPR(2);
++ ARG_FPR(1);
++ ARG_FPR(0);
++ case 0:;
++#undef ARG_FPR
++ }
++
++ // Load GPR registers from gpregs[]
++ register PRUint64 a0 asm("rdi");
++ register PRUint64 a1 asm("rsi");
++ register PRUint64 a2 asm("rdx");
++ register PRUint64 a3 asm("rcx");
++ register PRUint64 a4 asm("r8");
++ register PRUint64 a5 asm("r9");
++
++ switch (nr_gpr) {
++#define ARG_GPR(N) \
++ case N+1: a##N = gpregs[N];
++ ARG_GPR(5);
++ ARG_GPR(4);
++ ARG_GPR(3);
++ ARG_GPR(2);
++ ARG_GPR(1);
++ case 1: a0 = (PRUint64) that;
++ case 0:;
++#undef ARG_GPR
++ }
++
++ // Ensure that assignments to SSE registers won't be optimized away
++ asm("" ::
++ "x" (d0), "x" (d1), "x" (d2), "x" (d3),
++ "x" (d4), "x" (d5), "x" (d6), "x" (d7));
++
++ // Get pointer to method
++ PRUint64 methodAddress = *((PRUint64 *)that);
++ methodAddress += 8 * methodIndex;
++ methodAddress = *((PRUint64 *)methodAddress);
++
++ typedef PRUint32 (*Method)(PRUint64, PRUint64, PRUint64, PRUint64, PRUint64, PRUint64);
++ PRUint32 result = ((Method)methodAddress)(a0, a1, a2, a3, a4, a5);
++ return result;
++}
diff --git a/www/firefox/patches/patch-bv b/www/firefox/patches/patch-bv
new file mode 100644
index 00000000000..6a047bba410
--- /dev/null
+++ b/www/firefox/patches/patch-bv
@@ -0,0 +1,211 @@
+$NetBSD: patch-bv,v 1.1 2004/06/02 15:09:01 taya Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_unixish_amd64.cpp.orig 2004-05-30 21:38:22.000000000 +0900
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_unixish_amd64.cpp 2004-05-30 21:37:22.000000000 +0900
+@@ -0,0 +1,206 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++
++// Implement shared vtbl methods.
++
++#include "xptcprivate.h"
++
++// The Linux/x86-64 ABI passes the first 6 integral parameters and the
++// first 8 floating point parameters in registers (rdi, rsi, rdx, rcx,
++// r8, r9 and xmm0-xmm7), no stack space is allocated for these by the
++// caller. The rest of the parameters are passed in the callers stack
++// area.
++
++const PRUint32 PARAM_BUFFER_COUNT = 16;
++const PRUint32 GPR_COUNT = 6;
++const PRUint32 FPR_COUNT = 8;
++
++// PrepareAndDispatch() is called by SharedStub() and calls the actual method.
++//
++// - 'args[]' contains the arguments passed on stack
++// - 'gpregs[]' contains the arguments passed in integer registers
++// - 'fpregs[]' contains the arguments passed in floating point registers
++//
++// The parameters are mapped into an array of type 'nsXPTCMiniVariant'
++// and then the method gets called.
++
++extern "C" nsresult
++PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex,
++ PRUint64 * args, PRUint64 * gpregs, double *fpregs)
++{
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint32 paramCount;
++ PRUint32 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++ if (! iface_info)
++ return NS_ERROR_UNEXPECTED;
++
++ iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
++ NS_ASSERTION(info,"no method info");
++ if (! info)
++ return NS_ERROR_UNEXPECTED;
++
++ paramCount = info->GetParamCount();
++
++ // setup variant array pointer
++ if(paramCount > PARAM_BUFFER_COUNT)
++ dispatchParams = new nsXPTCMiniVariant[paramCount];
++ else
++ dispatchParams = paramBuffer;
++
++ NS_ASSERTION(dispatchParams,"no place for params");
++ if (! dispatchParams)
++ return NS_ERROR_OUT_OF_MEMORY;
++
++ PRUint64* ap = args;
++ PRUint32 nr_gpr = 1; // skip one GPR register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for(i = 0; i < paramCount; i++) {
++ const nsXPTParamInfo& param = info->GetParam(i);
++ const nsXPTType& type = param.GetType();
++ nsXPTCMiniVariant* dp = &dispatchParams[i];
++
++ if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ dp->val.d = fpregs[nr_fpr++];
++ else
++ dp->val.d = *(double*) ap++;
++ continue;
++ }
++ else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ dp->val.d = *(double*) ap++;
++ else
++ dp->val.f = *(float*) ap++;
++ continue;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ value = gpregs[nr_gpr++];
++ else
++ value = *ap++;
++ }
++
++ if (param.IsOut() || !type.IsArithmetic()) {
++ dp->val.p = (void*) value;
++ continue;
++ }
++
++ switch (type) {
++ case nsXPTType::T_I8: dp->val.i8 = (PRInt8) value; break;
++ case nsXPTType::T_I16: dp->val.i16 = (PRInt16) value; break;
++ case nsXPTType::T_I32: dp->val.i32 = (PRInt32) value; break;
++ case nsXPTType::T_I64: dp->val.i64 = (PRInt64) value; break;
++ case nsXPTType::T_U8: dp->val.u8 = (PRUint8) value; break;
++ case nsXPTType::T_U16: dp->val.u16 = (PRUint16) value; break;
++ case nsXPTType::T_U32: dp->val.u32 = (PRUint32) value; break;
++ case nsXPTType::T_U64: dp->val.u64 = (PRUint64) value; break;
++ case nsXPTType::T_BOOL: dp->val.b = (PRBool) value; break;
++ case nsXPTType::T_CHAR: dp->val.c = (char) value; break;
++ case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break;
++
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16) methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ if (dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
++// Linux/x86-64 uses gcc >= 3.1
++#define STUB_ENTRY(n) \
++asm(".section \".text\"\n\t" \
++ ".align 2\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase5Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase5Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase6Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase6Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 1000\n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase7Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase7Stub" #n "Ev:\n\t" \
++ ".else\n\t" \
++ ".err \"stub number " #n " >= 1000 not yet supported\"\n\t" \
++ ".endif\n\t" \
++ "movl $" #n ", %eax\n\t" \
++ "jmp SharedStub\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".size _ZN14nsXPTCStubBase5Stub" #n "Ev,.-_ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".size _ZN14nsXPTCStubBase6Stub" #n "Ev,.-_ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".else\n\t" \
++ ".size _ZN14nsXPTCStubBase7Stub" #n "Ev,.-_ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".endif");
++
++// static nsresult SharedStub(PRUint32 methodIndex)
++asm(".section \".text\"\n\t"
++ ".align 2\n\t"
++ ".type SharedStub,@function\n\t"
++ "SharedStub:\n\t"
++ // make room for gpregs (48), fpregs (64)
++ "pushq %rbp\n\t"
++ "movq %rsp,%rbp\n\t"
++ "subq $112,%rsp\n\t"
++ // save GP registers
++ "movq %rdi,-112(%rbp)\n\t"
++ "movq %rsi,-104(%rbp)\n\t"
++ "movq %rdx, -96(%rbp)\n\t"
++ "movq %rcx, -88(%rbp)\n\t"
++ "movq %r8 , -80(%rbp)\n\t"
++ "movq %r9 , -72(%rbp)\n\t"
++ "leaq -112(%rbp),%rcx\n\t"
++ // save FP registers
++ "movsd %xmm0,-64(%rbp)\n\t"
++ "movsd %xmm1,-56(%rbp)\n\t"
++ "movsd %xmm2,-48(%rbp)\n\t"
++ "movsd %xmm3,-40(%rbp)\n\t"
++ "movsd %xmm4,-32(%rbp)\n\t"
++ "movsd %xmm5,-24(%rbp)\n\t"
++ "movsd %xmm6,-16(%rbp)\n\t"
++ "movsd %xmm7, -8(%rbp)\n\t"
++ "leaq -64(%rbp),%r8\n\t"
++ // rdi has the 'self' pointer already
++ "movl %eax,%esi\n\t"
++ "leaq 16(%rbp),%rdx\n\t"
++ "call PrepareAndDispatch\n\t"
++ "leave\n\t"
++ "ret\n\t"
++ ".size SharedStub,.-SharedStub");
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
++
++#else
++#error "can't find a compiler to use"
++#endif /* __GNUC__ */
diff --git a/www/firefox/patches/patch-bw b/www/firefox/patches/patch-bw
new file mode 100644
index 00000000000..d8de6ceffb8
--- /dev/null
+++ b/www/firefox/patches/patch-bw
@@ -0,0 +1,64 @@
+$NetBSD: patch-bw,v 1.1 2004/06/02 15:09:01 taya Exp $
+
+diff -ru ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp ./xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp
+--- ../Orig/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp 2001-09-29 05:12:52.000000000 +0900
++++ ./xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp 2004-05-11 16:29:31.000000000 +0900
+@@ -188,6 +188,50 @@
+ * nsresult nsXPTCStubBase::Stub##n()
+ * Sets register $1 to "methodIndex" and jumps to SharedStub.
+ */
++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
++#define STUB_ENTRY(n) \
++__asm__( \
++"#### Stub"#n" ####\n" \
++".text\n" \
++" .align 5\n" \
++" .if "#n" < 10 \n" \
++" .globl _ZN14nsXPTCStubBase5Stub"#n"Ev\n" \
++" .ent _ZN14nsXPTCStubBase5Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase5Stub"#n"Ev:\n" \
++" .frame $30,0,$26,0\n" \
++" ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase5Stub"#n"Ev..ng:\n" \
++" .prologue 1\n" \
++" lda $1,"#n"\n" \
++" br $31,$SharedStub..ng\n" \
++" .end _ZN14nsXPTCStubBase5Stub"#n"Ev" \
++" .elseif "#n" < 100 \n" \
++" .globl _ZN14nsXPTCStubBase6Stub"#n"Ev\n" \
++" .ent _ZN14nsXPTCStubBase6Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase6Stub"#n"Ev:\n" \
++" .frame $30,0,$26,0\n" \
++" ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase6Stub"#n"Ev..ng:\n" \
++" .prologue 1\n" \
++" lda $1,"#n"\n" \
++" br $31,$SharedStub..ng\n" \
++" .end _ZN14nsXPTCStubBase6Stub"#n"Ev" \
++" .elseif "#n" < 1000 \n" \
++" .globl _ZN14nsXPTCStubBase7Stub"#n"Ev\n" \
++" .ent _ZN14nsXPTCStubBase7Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase7Stub"#n"Ev:\n" \
++" .frame $30,0,$26,0\n" \
++" ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase7Stub"#n"Ev..ng:\n" \
++" .prologue 1\n" \
++" lda $1,"#n"\n" \
++" br $31,$SharedStub..ng\n" \
++" .end _ZN14nsXPTCStubBase7Stub"#n"Ev" \
++" .else\n" \
++" .err \"stub number "#n"> 1000 not yet supported\"\n" \
++" .endif\n" \
++ );
++#else /* G++2.95 ABI */
+ #define STUB_ENTRY(n) \
+ __asm__( \
+ "#### Stub"#n" ####\n" \
+@@ -204,6 +248,7 @@
+ "br $31,$SharedStub..ng\n\t" \
+ ".end Stub"#n"__14nsXPTCStubBase" \
+ );
++#endif
+
+ #define SENTINEL_ENTRY(n) \
+ nsresult nsXPTCStubBase::Sentinel##n() \