summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoerg <joerg>2015-04-28 12:06:34 +0000
committerjoerg <joerg>2015-04-28 12:06:34 +0000
commite9f3208381ec38174b842b1377af5e267ccafed9 (patch)
tree730944770d3bcad4ecb0674c0974eba5a8d1c36e
parentd6394f6bc5724e5c86ccf822de4b91f655873718 (diff)
downloadpkgsrc-e9f3208381ec38174b842b1377af5e267ccafed9.tar.gz
Allow building Firefox 31 with Clang and on NetBSD/ARM.
-rw-r--r--www/firefox31/Makefile5
-rw-r--r--www/firefox31/distinfo22
-rw-r--r--www/firefox31/patches/patch-gfx_ycbcr_moz.build13
-rw-r--r--www/firefox31/patches/patch-gfx_ycbcr_yuv__row__arm.S26
-rw-r--r--www/firefox31/patches/patch-ipc_chromium_src_base_atomicops.h16
-rw-r--r--www/firefox31/patches/patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h90
-rw-r--r--www/firefox31/patches/patch-js_src_assembler_jit_ExecutableAllocator.h17
-rw-r--r--www/firefox31/patches/patch-js_src_jit_AsmJSModule.cpp17
-rw-r--r--www/firefox31/patches/patch-js_src_jit_arm_Architecture-arm.cpp23
-rw-r--r--www/firefox31/patches/patch-js_src_jit_arm_BaselineIC-arm.cpp13
-rw-r--r--www/firefox31/patches/patch-js_src_jit_arm_CodeGenerator-arm.cpp15
-rw-r--r--www/firefox31/patches/patch-js_src_vm_NumericConversions.h13
-rw-r--r--www/firefox31/patches/patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s74
-rw-r--r--www/firefox31/patches/patch-media_libtheora_lib_arm_armbits.s83
-rw-r--r--www/firefox31/patches/patch-media_libtheora_lib_arm_armcpu.c33
-rw-r--r--www/firefox31/patches/patch-media_libtheora_lib_arm_armfrag.s125
-rw-r--r--www/firefox31/patches/patch-media_libtheora_lib_arm_armidct.s265
-rw-r--r--www/firefox31/patches/patch-media_libyuv_include_libyuv_scale__row.h17
-rw-r--r--www/firefox31/patches/patch-mozglue_build_Makefile.in18
-rw-r--r--www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_moz.build15
-rw-r--r--www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp39
21 files changed, 934 insertions, 5 deletions
diff --git a/www/firefox31/Makefile b/www/firefox31/Makefile
index 41d71aa7c69..eefa7ab9b3c 100644
--- a/www/firefox31/Makefile
+++ b/www/firefox31/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.12 2015/04/25 14:25:01 tnn Exp $
+# $NetBSD: Makefile,v 1.13 2015/04/28 12:06:34 joerg Exp $
FIREFOX_VER= ${MOZ_BRANCH}${MOZ_BRANCH_MINOR}esr
# Also update MOZ_BRANCH= in devel/xulrunner31/Makefile
@@ -68,6 +68,9 @@ SUBST_MESSAGE.sys-dic= Reference to system hunspell dictionaries.
SUBST_FILES.sys-dic= extensions/spellcheck/hunspell/src/mozHunspell.cpp
SUBST_VARS.sys-dic= PREFIX
+post-extract:
+ mv ${WRKSRC}/gfx/ycbcr/yuv_row_arm.s ${WRKSRC}/gfx/ycbcr/yuv_row_arm.S
+
pre-configure:
cd ${WRKSRC} && mkdir ${OBJDIR}
cd ${WRKSRC} && autoconf
diff --git a/www/firefox31/distinfo b/www/firefox31/distinfo
index d8cfb7632c9..0d0b4ce9cc3 100644
--- a/www/firefox31/distinfo
+++ b/www/firefox31/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.10 2015/04/05 12:58:07 ryoon Exp $
+$NetBSD: distinfo,v 1.11 2015/04/28 12:06:34 joerg Exp $
SHA1 (firefox-31.6.0esr.source.tar.bz2) = 9c13012fec260c672e0e97ffb29f36fe360b02ad
RMD160 (firefox-31.6.0esr.source.tar.bz2) = 76f216cc87609081efaa7b5de837952d06a5f2fb
@@ -48,11 +48,15 @@ SHA1 (patch-gfx_graphite2_src_Bidi.cpp) = 5e80b4a32a47ae44d237fec69ea87bdd612a76
SHA1 (patch-gfx_moz.build) = a98bda4727538f4a0f09a20b84f9dd883edaf7d9
SHA1 (patch-gfx_skia_Makefile.in) = 03349db0ff9b14c2012c36d746adf2ee6cb87e62
SHA1 (patch-gfx_thebes_Makefile.in) = 16b63bc42870aa8c042416c6e04b3513981ca6f0
+SHA1 (patch-gfx_ycbcr_moz.build) = b11c2c15957861eefa33af554aee58e4403e9cfc
+SHA1 (patch-gfx_ycbcr_yuv__row__arm.S) = d3a5437507e3d0fcf64e506c9c5cb5b7dce87970
SHA1 (patch-image_decoders_nsJPEGDecoder.cpp) = e5df11499b1ec14e1d4c9a1408c0611d1c4e0574
SHA1 (patch-intl_hyphenation_src_hnjalloc.h) = 7fcc7b0fcf5a33486214197e925fbc8e6e22e2ee
SHA1 (patch-intl_unicharutil_util_Makefile.in) = c8f37cc420ba26b63c66fbbf69b13a8b4fea43fc
SHA1 (patch-ipc_chromium_Makefile.in) = edd85b79cd3879f7595b932442bb0e93505d5506
SHA1 (patch-ipc_chromium_moz.build) = de12255865e45cfdf0f7dc57ce101be75ac8ad54
+SHA1 (patch-ipc_chromium_src_base_atomicops.h) = b0c8b432d7f1ee4724c76ec10299ea0863a87cee
+SHA1 (patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h) = ffbca34e1411d3d98bc06c75b51a0881170865bb
SHA1 (patch-ipc_chromium_src_base_base__paths.h) = 7bc83577a9678542db4dff7dda19d751ff6d78c1
SHA1 (patch-ipc_chromium_src_base_debug__util__posix.cc) = 677f0b5ccdcde7a8551f2d07d2a472361a5da03f
SHA1 (patch-ipc_chromium_src_base_file__util.h) = 9d6d074b1692c6b4e722bfac8d67c66040a6fa76
@@ -77,21 +81,33 @@ SHA1 (patch-ipc_ipdl_ipdl_cxx_cgen.py) = d7f7dc85b1ff26c6d7e902f94c0ac09f0449710
SHA1 (patch-ipc_ipdl_ipdl_lower.py) = 2ef9504e462d0e3db16f9b0a6303ea5971b9c2a2
SHA1 (patch-js__src__vm__SPSProfiler.cpp) = 989ba25e4c5308d21d07baa802decce13609a475
SHA1 (patch-js_src_Makefile.in) = 780e408dfddfd90c6013b316e2e52800c62eee5e
+SHA1 (patch-js_src_assembler_jit_ExecutableAllocator.h) = 819180c7ba72dc2641fe6cdce373f492e73cb5ff
SHA1 (patch-js_src_builtin_TypedObject.cpp) = d44063579a0e36349d4c370a2e2cf09ebe6071e6
SHA1 (patch-js_src_ctypes_CTypes.h) = 768a084239f92a424c1c7dc9eaaf9be9456ca9f0
SHA1 (patch-js_src_frontend_BytecodeCompiler.cpp) = add5dee91325ee76df84beaf6b66eb7b7fed4aca
SHA1 (patch-js_src_frontend_ParseMaps.cpp) = c00117d79b78904bc50a1d664a8fc0e4e339bfbc
SHA1 (patch-js_src_gc_Memory.cpp) = 3db31553ec6f7b1fac4fd4ce11b77be1ea4208b8
+SHA1 (patch-js_src_jit_AsmJSModule.cpp) = 7e1876ef605f783889ae811c96bbf31d766aee6e
+SHA1 (patch-js_src_jit_arm_Architecture-arm.cpp) = 4e75d8a03c2372a3f2ccdd9e06caee11789b3acd
+SHA1 (patch-js_src_jit_arm_BaselineIC-arm.cpp) = 57ed2516904c17b7a037bb39e2d2ac2be403e313
+SHA1 (patch-js_src_jit_arm_CodeGenerator-arm.cpp) = 57c98ed86ec1544f9476138b9c1a6ef0064e69cf
SHA1 (patch-js_src_jsmath.cpp) = 7d4993ae91e9b5e6820358165603819aefb586f9
+SHA1 (patch-js_src_vm_NumericConversions.h) = 6c2fcc21f3bf90a9305d15339442c3ed3ad8a60b
SHA1 (patch-mb) = b661abce429a88554fca6c930b4dbf71ba6bb5cb
SHA1 (patch-media_libcubeb_src_Makefile.in) = fe880774789b0be54dec6fd83b89457fc8c2cabc
SHA1 (patch-media_libcubeb_src_cubeb__alsa.c) = 5ef0de0ac875334e959ff0d4bfa43a2e5ab087b9
SHA1 (patch-media_libcubeb_src_moz.build) = 822833bc0fd60cd4936550dc43af3294ebac40cd
+SHA1 (patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s) = 44b99a82323d7f6e549c5f2dbc539984ae5ea3de
SHA1 (patch-media_libpng_pngpriv.h) = c9cefd1b5dd85fbd0c875c3f9bc108975398fe3a
SHA1 (patch-media_libsoundtouch_src_cpu__detect__x86.cpp) = db61737afa7773e8cbd82976de3a02c917174696
SHA1 (patch-media_libtheora_Makefile.in) = 80ac9cb20760fe4d94047f7cb1c6a16bbdd6b505
+SHA1 (patch-media_libtheora_lib_arm_armbits.s) = 26fed6cf160adcb3bb8cafac9fb1a5722a9b620f
+SHA1 (patch-media_libtheora_lib_arm_armcpu.c) = c9a14ab4b34caf718ba0a35388b2cb1c31ddc733
+SHA1 (patch-media_libtheora_lib_arm_armfrag.s) = 7458ac02d891920cd40201a242c4603afae01509
+SHA1 (patch-media_libtheora_lib_arm_armidct.s) = d0a2c53431c79a705427bc92219e09d76dd83097
SHA1 (patch-media_libtremor_Makefile.in) = 497d03646caa721bdd129de365aadea8466043af
SHA1 (patch-media_libvorbis_Makefile.in) = fd1ce15268eed9c97dd0774398d559cdbed63e53
+SHA1 (patch-media_libyuv_include_libyuv_scale__row.h) = 9872b6f34f672165bb84413c76f7d3698b892600
SHA1 (patch-media_mtransport_third__party_nICEr_src_util_mbslen.c) = 087e8788c72b96d2059ca82ce4282d78aed546da
SHA1 (patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = de7055f891387f96f8fd32366c7189d480354e9e
SHA1 (patch-media_webrtc_signaling_signaling.gyp) = 91d5fcc2409b1398c84dedc9697107f815de48fc
@@ -110,6 +126,7 @@ SHA1 (patch-mfbt_Poison.cpp) = b582943c02f57835451c9eecd004c9912d42ce84
SHA1 (patch-mobile_android_installer_Makefile.in) = b2ea844a0145f4c15ef1b350dde6b000bd231fa5
SHA1 (patch-mobile_android_installer_package-manifest.in) = 9664858fe3b4593eb29dd0180d5a2df3cd245bb2
SHA1 (patch-modules_libjar_nsZipArchive.cpp) = 6aff0f8ed42575d8ca36a524e12e9a1f7351004a
+SHA1 (patch-mozglue_build_Makefile.in) = 2383acdb12470dc4166ff433d5f121ac5dd2b6fc
SHA1 (patch-netwerk_dns_Makefile.in) = b6bd9814d909dd6f7cff10dbeac3bedd79c2508e
SHA1 (patch-pb) = 97c9b2e4cefd524dc6ba825f71c3da2a761aa1f4
SHA1 (patch-pc) = 8b2baa88f0983a2fef4f801cf6b1ae425f6c813a
@@ -138,9 +155,10 @@ SHA1 (patch-xpcom_base_nscore.h) = f4fe66cc9e714a2101a4d1287359d1c300574438
SHA1 (patch-xpcom_build_PoisonIOInterposer.h) = fdb961a615e5c66a1d0a3c724cf124a2b47f2ed6
SHA1 (patch-xpcom_build_nsXPComInit.cpp) = 727fd1ce934f129de5fcc5e6059d3cb8c30b1e17
SHA1 (patch-xpcom_ds_TimeStamp.h) = a1fb060f91720eb330f102b28d9373bbdbe96e30
-SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_moz.build) = 954b60998c5621b896fae372fe067df693574ea4
+SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_moz.build) = 663cfd325cd063ad3498804d4a601a7c3737cc35
SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__asm__mips.S) = b2b81fcdf6591089fcc5de4c8f820e96c0a50256
SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 8cd42915cd32756b55894a773a1e6d7c012b4467
+SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp) = fd2477de3491003fec54067336ff66c23a6f5517
SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__asm__mips.S) = 1bb4baf0baa223cd87a8cb85b16b37c368c45b94
SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = e9e336817c172187f3e15ddf539a8a2176e3e952
SHA1 (patch-xulrunner_installer_Makefile.in) = 9d32ff87d0962c0406ed38de995c0350dd372e49
diff --git a/www/firefox31/patches/patch-gfx_ycbcr_moz.build b/www/firefox31/patches/patch-gfx_ycbcr_moz.build
new file mode 100644
index 00000000000..4996ac534bf
--- /dev/null
+++ b/www/firefox31/patches/patch-gfx_ycbcr_moz.build
@@ -0,0 +1,13 @@
+$NetBSD: patch-gfx_ycbcr_moz.build,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- gfx/ycbcr/moz.build.orig 2015-04-26 10:44:35.000000000 +0000
++++ gfx/ycbcr/moz.build
+@@ -63,7 +63,7 @@ else:
+
+ if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['HAVE_ARM_NEON']:
+ SOURCES += [
+- 'yuv_row_arm.s',
++ 'yuv_row_arm.S',
+ ]
+ SOURCES += [
+ 'yuv_convert_arm.cpp',
diff --git a/www/firefox31/patches/patch-gfx_ycbcr_yuv__row__arm.S b/www/firefox31/patches/patch-gfx_ycbcr_yuv__row__arm.S
new file mode 100644
index 00000000000..50b62bfe75c
--- /dev/null
+++ b/www/firefox31/patches/patch-gfx_ycbcr_yuv__row__arm.S
@@ -0,0 +1,26 @@
+$NetBSD: patch-gfx_ycbcr_yuv__row__arm.S,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- gfx/ycbcr/yuv_row_arm.S.orig 2015-04-25 13:25:04.000000000 +0000
++++ gfx/ycbcr/yuv_row_arm.S
+@@ -74,7 +74,10 @@ YCbCr42xToRGB565_DITHER30_CONSTS_NEON:
+ .global ScaleYCbCr42xToRGB565_BilinearY_Row_NEON
+ .type ScaleYCbCr42xToRGB565_BilinearY_Row_NEON, %function
+ .balign 64
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
+ .fnstart
++#endif
++ .cfi_startproc
+ ScaleYCbCr42xToRGB565_BilinearY_Row_NEON:
+ STMFD r13!,{r4-r9,r14} @ 8 words.
+ ADR r14,YCbCr42xToRGB565_DITHER03_CONSTS_NEON
+@@ -296,7 +299,10 @@ s42xbily_neon_tail:
+ s42xbily_neon_done:
+ VPOP {Q4-Q7} @ 16 words.
+ LDMFD r13!,{r4-r9,PC} @ 8 words.
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
+ .fnend
++#endif
++ .cfi_endproc
+ .size ScaleYCbCr42xToRGB565_BilinearY_Row_NEON, .-ScaleYCbCr42xToRGB565_BilinearY_Row_NEON
+
+ #if defined(__ELF__)&&defined(__linux__)
diff --git a/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops.h b/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops.h
new file mode 100644
index 00000000000..39612b492ed
--- /dev/null
+++ b/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-ipc_chromium_src_base_atomicops.h,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- ipc/chromium/src/base/atomicops.h.orig 2015-04-10 17:59:48.000000000 +0000
++++ ipc/chromium/src/base/atomicops.h
+@@ -52,7 +52,11 @@ typedef Atomic64 AtomicWord;
+ typedef Atomic32 AtomicWord;
+ #endif // ARCH_CPU_64_BITS
+ #else
++#ifdef __arm__
++typedef Atomic32 AtomicWord;
++#else
+ typedef intptr_t AtomicWord;
++#endif
+ #endif // OS_OPENBSD
+
+ // Atomically execute:
diff --git a/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h b/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h
new file mode 100644
index 00000000000..9359545ff7a
--- /dev/null
+++ b/www/firefox31/patches/patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h
@@ -0,0 +1,90 @@
+$NetBSD: patch-ipc_chromium_src_base_atomicops__internals__arm__gcc.h,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- ipc/chromium/src/base/atomicops_internals_arm_gcc.h.orig 2015-03-21 03:27:18.000000000 +0000
++++ ipc/chromium/src/base/atomicops_internals_arm_gcc.h
+@@ -12,44 +12,19 @@
+ namespace base {
+ namespace subtle {
+
+-// 0xffff0fc0 is the hard coded address of a function provided by
+-// the kernel which implements an atomic compare-exchange. On older
+-// ARM architecture revisions (pre-v6) this may be implemented using
+-// a syscall. This address is stable, and in active use (hard coded)
+-// by at least glibc-2.7 and the Android C library.
+-typedef Atomic32 (*LinuxKernelCmpxchgFunc)(Atomic32 old_value,
+- Atomic32 new_value,
+- volatile Atomic32* ptr);
+-LinuxKernelCmpxchgFunc pLinuxKernelCmpxchg __attribute__((weak)) =
+- (LinuxKernelCmpxchgFunc) 0xffff0fc0;
+-
+-typedef void (*LinuxKernelMemoryBarrierFunc)(void);
+-LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier __attribute__((weak)) =
+- (LinuxKernelMemoryBarrierFunc) 0xffff0fa0;
+-
+-
+ inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
+ Atomic32 old_value,
+ Atomic32 new_value) {
+- Atomic32 prev_value = *ptr;
+- do {
+- if (!pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr))) {
+- return old_value;
+- }
+- prev_value = *ptr;
+- } while (prev_value == old_value);
+- return prev_value;
++ return __sync_val_compare_and_swap(ptr, old_value, new_value);
+ }
+
+ inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
+ Atomic32 new_value) {
+- Atomic32 old_value;
++ Atomic32 prev_value;
+ do {
+- old_value = *ptr;
+- } while (pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr)));
+- return old_value;
++ prev_value = *ptr;
++ } while (!__sync_bool_compare_and_swap(ptr, prev_value, new_value));
++ return prev_value;
+ }
+
+ inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,
+@@ -59,18 +34,14 @@ inline Atomic32 NoBarrier_AtomicIncremen
+
+ inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
+ Atomic32 increment) {
+- for (;;) {
+- // Atomic exchange the old value with an incremented one.
+- Atomic32 old_value = *ptr;
+- Atomic32 new_value = old_value + increment;
+- if (pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr)) == 0) {
+- // The exchange took place as expected.
+- return new_value;
+- }
+- // Otherwise, *ptr changed mid-loop and we need to retry.
+- }
+-
++ Atomic32 old_value;
++ Atomic32 new_value;
++ do {
++ // Atomic exchange the old value with an incremented one.
++ old_value = *ptr;
++ new_value = old_value + increment;
++ } while (!__sync_bool_compare_and_swap(ptr, old_value, new_value));
++ return new_value;
+ }
+
+ inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
+@@ -90,7 +61,7 @@ inline void NoBarrier_Store(volatile Ato
+ }
+
+ inline void MemoryBarrier() {
+- pLinuxKernelMemoryBarrier();
++ __sync_synchronize();
+ }
+
+ inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
diff --git a/www/firefox31/patches/patch-js_src_assembler_jit_ExecutableAllocator.h b/www/firefox31/patches/patch-js_src_assembler_jit_ExecutableAllocator.h
new file mode 100644
index 00000000000..23f4b7b2bd2
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_assembler_jit_ExecutableAllocator.h
@@ -0,0 +1,17 @@
+$NetBSD: patch-js_src_assembler_jit_ExecutableAllocator.h,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/assembler/jit/ExecutableAllocator.h.orig 2015-04-10 13:30:05.000000000 +0000
++++ js/src/assembler/jit/ExecutableAllocator.h
+@@ -471,6 +471,12 @@ public:
+ : "r" (code), "r" (reinterpret_cast<char*>(code) + size)
+ : "r0", "r1", "r2");
+ }
++#elif WTF_CPU_ARM && defined(__NetBSD__)
++ static void cacheFlush(void* code, size_t size)
++ {
++ intptr_t end = reinterpret_cast<intptr_t>(code) + size;
++ __builtin___clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(end));
++ }
+ #elif WTF_OS_SYMBIAN
+ static void cacheFlush(void* code, size_t size)
+ {
diff --git a/www/firefox31/patches/patch-js_src_jit_AsmJSModule.cpp b/www/firefox31/patches/patch-js_src_jit_AsmJSModule.cpp
new file mode 100644
index 00000000000..7992f49b93c
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_jit_AsmJSModule.cpp
@@ -0,0 +1,17 @@
+$NetBSD: patch-js_src_jit_AsmJSModule.cpp,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/jit/AsmJSModule.cpp.orig 2015-04-20 23:47:34.000000000 +0000
++++ js/src/jit/AsmJSModule.cpp
+@@ -165,10 +165,10 @@ InvokeFromAsmJS_ToNumber(JSContext *cx,
+ extern "C" {
+
+ extern int64_t
+-__aeabi_idivmod(int, int);
++__aeabi_idivmod(int, int) MOZ_EXPORT;
+
+ extern int64_t
+-__aeabi_uidivmod(int, int);
++__aeabi_uidivmod(int, int) MOZ_EXPORT;
+
+ }
+ #endif
diff --git a/www/firefox31/patches/patch-js_src_jit_arm_Architecture-arm.cpp b/www/firefox31/patches/patch-js_src_jit_arm_Architecture-arm.cpp
new file mode 100644
index 00000000000..15aa80152c0
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_jit_arm_Architecture-arm.cpp
@@ -0,0 +1,23 @@
+$NetBSD: patch-js_src_jit_arm_Architecture-arm.cpp,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/jit/arm/Architecture-arm.cpp.orig 2015-04-10 17:17:56.000000000 +0000
++++ js/src/jit/arm/Architecture-arm.cpp
+@@ -17,7 +17,7 @@
+
+ #define HWCAP_USE_HARDFP_ABI (1 << 28)
+
+-#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR)
++#if defined(__linux__) && !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR)
+ #define HWCAP_ARMv7 (1 << 29)
+ #include <asm/hwcap.h>
+ #else
+@@ -212,6 +212,9 @@ uint32_t GetARMFlags()
+
+ isSet = true;
+ return flags;
++#elif defined(__NetBSD__)
++ /* XXX */
++ return 0;
+ #endif
+
+ return 0;
diff --git a/www/firefox31/patches/patch-js_src_jit_arm_BaselineIC-arm.cpp b/www/firefox31/patches/patch-js_src_jit_arm_BaselineIC-arm.cpp
new file mode 100644
index 00000000000..c2958739b5a
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_jit_arm_BaselineIC-arm.cpp
@@ -0,0 +1,13 @@
+$NetBSD: patch-js_src_jit_arm_BaselineIC-arm.cpp,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/jit/arm/BaselineIC-arm.cpp.orig 2015-04-20 23:58:14.000000000 +0000
++++ js/src/jit/arm/BaselineIC-arm.cpp
+@@ -71,7 +71,7 @@ ICCompare_Double::Compiler::generateStub
+ // ICBinaryArith_Int32
+
+ extern "C" {
+- extern int64_t __aeabi_idivmod(int,int);
++ extern int64_t __aeabi_idivmod(int,int) MOZ_EXPORT;
+ }
+
+ bool
diff --git a/www/firefox31/patches/patch-js_src_jit_arm_CodeGenerator-arm.cpp b/www/firefox31/patches/patch-js_src_jit_arm_CodeGenerator-arm.cpp
new file mode 100644
index 00000000000..da8e2e26052
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_jit_arm_CodeGenerator-arm.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-js_src_jit_arm_CodeGenerator-arm.cpp,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/jit/arm/CodeGenerator-arm.cpp.orig 2015-04-20 23:29:04.000000000 +0000
++++ js/src/jit/arm/CodeGenerator-arm.cpp
+@@ -619,8 +619,8 @@ CodeGeneratorARM::visitDivI(LDivI *ins)
+ }
+
+ extern "C" {
+- extern int64_t __aeabi_idivmod(int,int);
+- extern int64_t __aeabi_uidivmod(int,int);
++ extern int64_t __aeabi_idivmod(int,int) MOZ_EXPORT;
++ extern int64_t __aeabi_uidivmod(int,int) MOZ_EXPORT;
+ }
+
+ bool
diff --git a/www/firefox31/patches/patch-js_src_vm_NumericConversions.h b/www/firefox31/patches/patch-js_src_vm_NumericConversions.h
new file mode 100644
index 00000000000..ffdc7d3bc44
--- /dev/null
+++ b/www/firefox31/patches/patch-js_src_vm_NumericConversions.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-js_src_vm_NumericConversions.h,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- js/src/vm/NumericConversions.h.orig 2015-04-10 16:14:14.000000000 +0000
++++ js/src/vm/NumericConversions.h
+@@ -130,7 +130,7 @@ ToIntWidth(double d)
+ inline int32_t
+ ToInt32(double d)
+ {
+-#if defined (__arm__) && defined (__GNUC__)
++#if defined (__arm__) && defined (__GNUC__) && !defined(__clang__)
+ int32_t i;
+ uint32_t tmp0;
+ uint32_t tmp1;
diff --git a/www/firefox31/patches/patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s b/www/firefox31/patches/patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s
new file mode 100644
index 00000000000..f10bf826a0e
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s
@@ -0,0 +1,74 @@
+$NetBSD: patch-media_libopus_celt_arm_celt__pitch__xcorr__arm.s,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libopus/celt/arm/celt_pitch_xcorr_arm.s.orig 2015-04-10 12:53:15.000000000 +0000
++++ media/libopus/celt/arm/celt_pitch_xcorr_arm.s
+@@ -26,6 +26,7 @@
+ ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
++ .syntax unified
+ AREA |.text|, CODE, READONLY
+
+ GET celt/arm/armopts.s
+@@ -309,7 +310,7 @@ xcorr_kernel_edsp_process4_done
+ SUBS r2, r2, #1 ; j--
+ ; Stall
+ SMLABB r6, r12, r10, r6 ; sum[0] = MAC16_16(sum[0],x,y_0)
+- LDRGTH r14, [r4], #2 ; r14 = *x++
++ LDRHGT r14, [r4], #2 ; r14 = *x++
+ SMLABT r7, r12, r10, r7 ; sum[1] = MAC16_16(sum[1],x,y_1)
+ SMLABB r8, r12, r11, r8 ; sum[2] = MAC16_16(sum[2],x,y_2)
+ SMLABT r9, r12, r11, r9 ; sum[3] = MAC16_16(sum[3],x,y_3)
+@@ -319,7 +320,7 @@ xcorr_kernel_edsp_process4_done
+ SMLABB r7, r14, r11, r7 ; sum[1] = MAC16_16(sum[1],x,y_2)
+ LDRH r10, [r5], #2 ; r10 = y_4 = *y++
+ SMLABT r8, r14, r11, r8 ; sum[2] = MAC16_16(sum[2],x,y_3)
+- LDRGTH r12, [r4], #2 ; r12 = *x++
++ LDRHGT r12, [r4], #2 ; r12 = *x++
+ SMLABB r9, r14, r10, r9 ; sum[3] = MAC16_16(sum[3],x,y_4)
+ BLE xcorr_kernel_edsp_done
+ SMLABB r6, r12, r11, r6 ; sum[0] = MAC16_16(sum[0],tmp,y_2)
+@@ -327,7 +328,7 @@ xcorr_kernel_edsp_process4_done
+ SMLABT r7, r12, r11, r7 ; sum[1] = MAC16_16(sum[1],tmp,y_3)
+ LDRH r2, [r5], #2 ; r2 = y_5 = *y++
+ SMLABB r8, r12, r10, r8 ; sum[2] = MAC16_16(sum[2],tmp,y_4)
+- LDRGTH r14, [r4] ; r14 = *x
++ LDRHGT r14, [r4] ; r14 = *x
+ SMLABB r9, r12, r2, r9 ; sum[3] = MAC16_16(sum[3],tmp,y_5)
+ BLE xcorr_kernel_edsp_done
+ SMLABT r6, r14, r11, r6 ; sum[0] = MAC16_16(sum[0],tmp,y_3)
+@@ -387,11 +388,11 @@ celt_pitch_xcorr_edsp_process1u_loop4
+ celt_pitch_xcorr_edsp_process1u_loop4_done
+ ADDS r12, r12, #4
+ celt_pitch_xcorr_edsp_process1u_loop1
+- LDRGEH r6, [r4], #2
++ LDRHGE r6, [r4], #2
+ ; Stall
+ SMLABBGE r14, r6, r8, r14 ; sum = MAC16_16(sum, *x, *y)
+- SUBGES r12, r12, #1
+- LDRGTH r8, [r5], #2
++ SUBSGE r12, r12, #1
++ LDRHGT r8, [r5], #2
+ BGT celt_pitch_xcorr_edsp_process1u_loop1
+ ; Restore _x
+ SUB r4, r4, r3, LSL #1
+@@ -474,7 +475,7 @@ celt_pitch_xcorr_edsp_process2_1
+ ADDS r12, r12, #1
+ ; Stall
+ SMLABB r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_0, y_0)
+- LDRGTH r7, [r4], #2
++ LDRHGT r7, [r4], #2
+ SMLABT r11, r6, r8, r11 ; sum1 = MAC16_16(sum1, x_0, y_1)
+ BLE celt_pitch_xcorr_edsp_process2_done
+ LDRH r9, [r5], #2
+@@ -527,8 +528,8 @@ celt_pitch_xcorr_edsp_process1a_loop_don
+ SUBGE r12, r12, #2
+ SMLATTGE r14, r6, r8, r14 ; sum = MAC16_16(sum, x_1, y_1)
+ ADDS r12, r12, #1
+- LDRGEH r6, [r4], #2
+- LDRGEH r8, [r5], #2
++ LDRHGE r6, [r4], #2
++ LDRHGE r8, [r5], #2
+ ; Stall
+ SMLABBGE r14, r6, r8, r14 ; sum = MAC16_16(sum, *x, *y)
+ ; maxcorr = max(maxcorr, sum)
diff --git a/www/firefox31/patches/patch-media_libtheora_lib_arm_armbits.s b/www/firefox31/patches/patch-media_libtheora_lib_arm_armbits.s
new file mode 100644
index 00000000000..dc7b3dde9d6
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libtheora_lib_arm_armbits.s
@@ -0,0 +1,83 @@
+$NetBSD: patch-media_libtheora_lib_arm_armbits.s,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libtheora/lib/arm/armbits.s.orig 2015-04-10 13:06:36.000000000 +0000
++++ media/libtheora/lib/arm/armbits.s
+@@ -15,6 +15,7 @@
+ ;
+ ;********************************************************************
+
++ .syntax unified
+ AREA |.text|, CODE, READONLY
+
+ ; Explicitly specifying alignment here because some versions of
+@@ -73,25 +74,25 @@ oc_pack_read_refill
+ ; negative.
+ CMP r10,r11 ; ptr<stop => HI
+ CMPHI r3,#7 ; available<=24 => HI
+- LDRHIB r14,[r11],#1 ; r14 = *ptr++
++ LDRBHI r14,[r11],#1 ; r14 = *ptr++
+ SUBHI r3,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r2,r14,LSL r3 ; r2 = window|=r14<<32-available
+ CMPHI r10,r11 ; ptr<stop => HI
+ CMPHI r3,#7 ; available<=24 => HI
+- LDRHIB r14,[r11],#1 ; r14 = *ptr++
++ LDRBHI r14,[r11],#1 ; r14 = *ptr++
+ SUBHI r3,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r2,r14,LSL r3 ; r2 = window|=r14<<32-available
+ CMPHI r10,r11 ; ptr<stop => HI
+ CMPHI r3,#7 ; available<=24 => HI
+- LDRHIB r14,[r11],#1 ; r14 = *ptr++
++ LDRBHI r14,[r11],#1 ; r14 = *ptr++
+ SUBHI r3,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r2,r14,LSL r3 ; r2 = window|=r14<<32-available
+ CMPHI r10,r11 ; ptr<stop => HI
+ CMPHI r3,#7 ; available<=24 => HI
+- LDRHIB r14,[r11],#1 ; r14 = *ptr++
++ LDRBHI r14,[r11],#1 ; r14 = *ptr++
+ SUBHI r3,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r2,r14,LSL r3 ; r2 = window|=r14<<32-available
+@@ -110,7 +111,7 @@ oc_pack_read_refill_last
+ CMP r11,r10 ; ptr<stop => LO
+ ; If we didn't hit the end of the packet, then pull enough of the next byte to
+ ; to fill up the window.
+- LDRLOB r14,[r11] ; (LO) r14 = *ptr
++ LDRBLO r14,[r11] ; (LO) r14 = *ptr
+ ; Otherwise, set the EOF flag and pretend we have lots of available bits.
+ MOVHS r14,#1 ; (HS) r14 = 1
+ ADDLO r10,r3,r1 ; (LO) r10 = available
+@@ -189,12 +190,12 @@ oc_huff_token_decode_refill
+ ; We can't possibly need more than 15 bits, so available must be <= 15.
+ ; Therefore we can load at least two bytes without checking it.
+ CMP r2,r3 ; ptr<stop => HI
+- LDRHIB r14,[r3],#1 ; r14 = *ptr++
++ LDRBHI r14,[r3],#1 ; r14 = *ptr++
+ RSBHI r5,r5,#24 ; (HI) available = 32-(available+=8)
+ RSBLS r5,r5,#32 ; (LS) r5 = 32-available
+ ORRHI r4,r14,LSL r5 ; r4 = window|=r14<<32-available
+ CMPHI r2,r3 ; ptr<stop => HI
+- LDRHIB r14,[r3],#1 ; r14 = *ptr++
++ LDRBHI r14,[r3],#1 ; r14 = *ptr++
+ SUBHI r5,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r4,r14,LSL r5 ; r4 = window|=r14<<32-available
+@@ -204,14 +205,14 @@ oc_huff_token_decode_refill
+ ; negative.
+ CMPHI r2,r3 ; ptr<stop => HI
+ CMPHI r5,#7 ; available<=24 => HI
+- LDRHIB r14,[r3],#1 ; r14 = *ptr++
++ LDRBHI r14,[r3],#1 ; r14 = *ptr++
+ SUBHI r5,#8 ; available += 8
+ ; (HI) Stall...
+ ORRHI r4,r14,LSL r5 ; r4 = window|=r14<<32-available
+ CMP r2,r3 ; ptr<stop => HI
+ MOVLS r5,#-1<<30 ; (LS) available = OC_LOTS_OF_BITS+32
+ CMPHI r5,#7 ; (HI) available<=24 => HI
+- LDRHIB r14,[r3],#1 ; (HI) r14 = *ptr++
++ LDRBHI r14,[r3],#1 ; (HI) r14 = *ptr++
+ SUBHI r5,#8 ; (HI) available += 8
+ ; (HI) Stall...
+ ORRHI r4,r14,LSL r5 ; (HI) r4 = window|=r14<<32-available
diff --git a/www/firefox31/patches/patch-media_libtheora_lib_arm_armcpu.c b/www/firefox31/patches/patch-media_libtheora_lib_arm_armcpu.c
new file mode 100644
index 00000000000..a40b759c411
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libtheora_lib_arm_armcpu.c
@@ -0,0 +1,33 @@
+$NetBSD: patch-media_libtheora_lib_arm_armcpu.c,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libtheora/lib/arm/armcpu.c.orig 2015-04-10 12:39:09.000000000 +0000
++++ media/libtheora/lib/arm/armcpu.c
+@@ -106,6 +106,28 @@ ogg_uint32_t oc_cpu_flags_get(void){
+ }
+ return flags;
+ }
++#elif defined(__NetBSD__)
++#include <sys/sysctl.h>
++#include <stdlib.h>
++
++ogg_uint32_t oc_cpu_flags_get(void){
++ ogg_uint32_t flags = 0;
++ int val = 0;
++ char arch_buf[16];
++ size_t lenp;
++ /* XXX EDSP? */
++ lenp = sizeof(val);
++ if (sysctlbyname("machdep.neon_present", &val, &lenp, NULL, 0) == 0 && val)
++ flags|=OC_CPU_ARM_NEON;
++ lenp = sizeof(arch_buf) - 1;
++ if (sysctlbyname("machdep.cpu_arch", arch_buf, &lenp, NULL, 0) == 0) {
++ arch_buf[lenp] = '\0';
++ val = atoi(arch_buf);
++ if (val >= 6)
++ flags |= OC_CPU_ARM_MEDIA;
++ }
++ return flags;
++}
+
+ #else
+ /*The feature registers which can tell us what the processor supports are
diff --git a/www/firefox31/patches/patch-media_libtheora_lib_arm_armfrag.s b/www/firefox31/patches/patch-media_libtheora_lib_arm_armfrag.s
new file mode 100644
index 00000000000..f656fa2f509
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libtheora_lib_arm_armfrag.s
@@ -0,0 +1,125 @@
+$NetBSD: patch-media_libtheora_lib_arm_armfrag.s,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libtheora/lib/arm/armfrag.s.orig 2015-04-10 13:13:44.000000000 +0000
++++ media/libtheora/lib/arm/armfrag.s
+@@ -305,26 +305,26 @@ ofcl_edsp_lp
+ LDR r5, [r14,r5, LSL #2] ; r5 = _frag_buf_offs[_fragis[fragii]]
+ SUBS r12, r12, #1
+ ; Stall (on XScale)
+- LDRD r6, [r4, r5]! ; r4 = _src_frame+frag_buf_off
+- LDRD r8, [r4, r2]!
++ LDRD r6, r7, [r4, r5]! ; r4 = _src_frame+frag_buf_off
++ LDRD r8, r9, [r4, r2]!
+ ; Stall
+- STRD r6, [r5, r0]! ; r5 = _dst_frame+frag_buf_off
+- STRD r8, [r5, r2]!
++ STRD r6, r7, [r5, r0]! ; r5 = _dst_frame+frag_buf_off
++ STRD r8, r9, [r5, r2]!
+ ; Stall
+- LDRD r6, [r4, r2]! ; On Xscale at least, doing 3 consecutive
+- LDRD r8, [r4, r2]! ; loads causes a stall, but that's no worse
+- LDRD r10,[r4, r2]! ; than us only doing 2, and having to do
++ LDRD r6, r7, [r4, r2]! ; On Xscale at least, doing 3 consecutive
++ LDRD r8, r9, [r4, r2]! ; loads causes a stall, but that's no worse
++ LDRD r10,r11,[r4, r2]! ; than us only doing 2, and having to do
+ ; another pair of LDRD/STRD later on.
+ ; Stall
+- STRD r6, [r5, r2]!
+- STRD r8, [r5, r2]!
+- STRD r10,[r5, r2]!
+- LDRD r6, [r4, r2]!
+- LDRD r8, [r4, r2]!
+- LDRD r10,[r4, r2]!
+- STRD r6, [r5, r2]!
+- STRD r8, [r5, r2]!
+- STRD r10,[r5, r2]!
++ STRD r6, r7, [r5, r2]!
++ STRD r8, r9, [r5, r2]!
++ STRD r10,r11,[r5, r2]!
++ LDRD r6, r7, [r4, r2]!
++ LDRD r8, r9, [r4, r2]!
++ LDRD r10,r11,[r4, r2]!
++ STRD r6, r7, [r5, r2]!
++ STRD r8, r9, [r5, r2]!
++ STRD r10,r11,[r5, r2]!
+ LDRGE r5, [r3],#4 ; r5 = _fragis[fragii]
+ BGE ofcl_edsp_lp
+ ofcl_edsp_end
+@@ -346,8 +346,8 @@ oc_frag_recon_intra_v6 PROC
+ MOV r12,r2
+ LDR r6, =0x00800080
+ ofrintra_v6_lp
+- LDRD r2, [r12],#8 ; r2 = 11110000 r3 = 33332222
+- LDRD r4, [r12],#8 ; r4 = 55554444 r5 = 77776666
++ LDRD r2, r3, [r12],#8 ; r2 = 11110000 r3 = 33332222
++ LDRD r4, r5, [r12],#8 ; r4 = 55554444 r5 = 77776666
+ SUBS r14,r14,#1
+ QADD16 r2, r2, r6
+ QADD16 r3, r3, r6
+@@ -363,7 +363,7 @@ ofrintra_v6_lp
+ ORR r5, r5, r5, LSR #8 ; r5 = __777766
+ PKHBT r2, r2, r3, LSL #16 ; r2 = 33221100
+ PKHBT r3, r4, r5, LSL #16 ; r3 = 77665544
+- STRD r2, [r0], r1
++ STRD r2, r3, [r0], r1
+ BGT ofrintra_v6_lp
+ LDMFD r13!,{r4-r6,PC}
+ ENDP
+@@ -376,10 +376,10 @@ oc_frag_recon_inter_v6 PROC
+ STMFD r13!,{r4-r7,r14}
+ MOV r14,#8
+ ofrinter_v6_lp
+- LDRD r6, [r3], #8 ; r6 = 11110000 r7 = 33332222
++ LDRD r6, r7, [r3], #8 ; r6 = 11110000 r7 = 33332222
+ SUBS r14,r14,#1
+ [ OC_ARM_CAN_UNALIGN_LDRD
+- LDRD r4, [r1], r2 ; Unaligned ; r4 = 33221100 r5 = 77665544
++ LDRD r4, r5, [r1], r2 ; Unaligned ; r4 = 33221100 r5 = 77665544
+ |
+ LDR r5, [r1, #4]
+ LDR r4, [r1], r2
+@@ -390,7 +390,7 @@ ofrinter_v6_lp
+ UXTB16 r4,r4, ROR #8 ; r4 = __33__11
+ QADD16 r12,r12,r6 ; r12= xx22xx00
+ QADD16 r4, r7, r4 ; r4 = xx33xx11
+- LDRD r6, [r3], #8 ; r6 = 55554444 r7 = 77776666
++ LDRD r6, r7, [r3], #8 ; r6 = 55554444 r7 = 77776666
+ USAT16 r4, #8, r4 ; r4 = __33__11
+ USAT16 r12,#8,r12 ; r12= __22__00
+ ORR r4, r12,r4, LSL #8 ; r4 = 33221100
+@@ -403,7 +403,7 @@ ofrinter_v6_lp
+ USAT16 r12,#8, r12 ; r12= __66__44
+ USAT16 r5, #8, r5 ; r4 = __77__55
+ ORR r5, r12,r5, LSL #8 ; r5 = 33221100
+- STRD r4, [r0], r2
++ STRD r4, r5, [r0], r2
+ BGT ofrinter_v6_lp
+ LDMFD r13!,{r4-r7,PC}
+ ENDP
+@@ -418,7 +418,7 @@ oc_frag_recon_inter2_v6 PROC
+ STMFD r13!,{r4-r9,r14}
+ MOV r14,#8
+ ofrinter2_v6_lp
+- LDRD r6, [r12,#8] ; r6 = 55554444 r7 = 77776666
++ LDRD r6, r7, [r12,#8] ; r6 = 55554444 r7 = 77776666
+ SUBS r14,r14,#1
+ LDR r4, [r1, #4] ; Unaligned ; r4 = src1[1] = 77665544
+ LDR r5, [r2, #4] ; Unaligned ; r5 = src2[1] = 77665544
+@@ -429,7 +429,7 @@ ofrinter2_v6_lp
+ UXTB16 r4, r4, ROR #8 ; r4 = __77__55
+ QADD16 r8, r8, r5 ; r8 = xx66xx44
+ QADD16 r9, r9, r4 ; r9 = xx77xx55
+- LDRD r6,[r12],#16 ; r6 = 33332222 r7 = 11110000
++ LDRD r6, r7, [r12],#16 ; r6 = 33332222 r7 = 11110000
+ USAT16 r8, #8, r8 ; r8 = __66__44
+ LDR r4, [r1], r3 ; Unaligned ; r4 = src1[0] = 33221100
+ USAT16 r9, #8, r9 ; r9 = __77__55
+@@ -445,7 +445,7 @@ ofrinter2_v6_lp
+ USAT16 r8, #8, r8 ; r8 = __22__00
+ USAT16 r7, #8, r7 ; r7 = __33__11
+ ORR r8, r8, r7, LSL #8 ; r8 = 33221100
+- STRD r8, [r0], r3
++ STRD r8, r9, [r0], r3
+ BGT ofrinter2_v6_lp
+ LDMFD r13!,{r4-r9,PC}
+ ENDP
diff --git a/www/firefox31/patches/patch-media_libtheora_lib_arm_armidct.s b/www/firefox31/patches/patch-media_libtheora_lib_arm_armidct.s
new file mode 100644
index 00000000000..a98db0d3c80
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libtheora_lib_arm_armidct.s
@@ -0,0 +1,265 @@
+$NetBSD: patch-media_libtheora_lib_arm_armidct.s,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libtheora/lib/arm/armidct.s.orig 2015-04-10 13:12:08.000000000 +0000
++++ media/libtheora/lib/arm/armidct.s
+@@ -765,22 +765,22 @@ oc_idct8x8_1_v6 PROC
+ ; r1 = ogg_uint16_t _dc
+ ORR r2, r1, r1, LSL #16
+ ORR r3, r1, r1, LSL #16
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
+- STRD r2, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
++ STRD r2, r3, [r0], #8
+ MOV PC, r14
+ ENDP
+
+@@ -812,22 +812,22 @@ oc_idct8x8_slow_v6
+ BEQ oc_idct8x8_slow_v6_cols
+ MOV r4, #0
+ MOV r5, #0
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
+- STRD r4, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
++ STRD r4, r5, [r2], #8
+ oc_idct8x8_slow_v6_cols
+ ; Column transforms
+ BL idct8_8core_down_v6
+@@ -856,8 +856,8 @@ oc_idct8x8_10_v6 PROC
+ BEQ oc_idct8x8_10_v6_cols
+ MOV r4, #0
+ MOV r5, #0
+- STRD r4, [r2]
+- STRD r4, [r2,#16]
++ STRD r4, r5, [r2]
++ STRD r4, r5, [r2,#16]
+ STR r4, [r2,#32]
+ STR r4, [r2,#48]
+ oc_idct8x8_10_v6_cols
+@@ -903,7 +903,7 @@ idct2_1core_v6 PROC
+ LDR r3, OC_C4S4
+ LDRSH r6, [r1], #16 ; r6 = x[1,0]
+ SMULWB r12,r3, r2 ; r12= t[0,0]=OC_C4S4*x[0,0]>>16
+- LDRD r4, OC_C7S1 ; r4 = OC_C7S1; r5 = OC_C1S7
++ LDRD r4, r5, OC_C7S1 ; r4 = OC_C7S1; r5 = OC_C1S7
+ SMULWB r6, r3, r6 ; r6 = t[1,0]=OC_C4S4*x[1,0]>>16
+ SMULWT r4, r4, r2 ; r4 = t[0,4]=OC_C7S1*x[0,1]>>16
+ SMULWT r7, r5, r2 ; r7 = t[0,7]=OC_C1S7*x[0,1]>>16
+@@ -965,7 +965,7 @@ idct2_2core_down_v6 PROC
+ MOV r7 ,#8 ; r7 = 8
+ LDR r6, [r1], #16 ; r6 = <x[1,1]|x[1,0]>
+ SMLAWB r12,r3, r2, r7 ; r12= (t[0,0]=OC_C4S4*x[0,0]>>16)+8
+- LDRD r4, OC_C7S1 ; r4 = OC_C7S1; r5 = OC_C1S7
++ LDRD r4, r5, OC_C7S1 ; r4 = OC_C7S1; r5 = OC_C1S7
+ SMLAWB r7, r3, r6, r7 ; r7 = (t[1,0]=OC_C4S4*x[1,0]>>16)+8
+ SMULWT r5, r5, r2 ; r2 = t[0,7]=OC_C1S7*x[0,1]>>16
+ PKHBT r12,r12,r7, LSL #16 ; r12= <t[1,0]+8|t[0,0]+8>
+@@ -1048,7 +1048,7 @@ oc_idct8x8_6_v6 PROC
+ BEQ oc_idct8x8_6_v6_cols
+ MOV r4, #0
+ MOV r5, #0
+- STRD r4, [r0]
++ STRD r4, r5, [r0]
+ STR r4, [r0,#16]
+ STR r4, [r0,#32]
+ MOV r0, r8 ; Write to the final destination.
+@@ -1084,15 +1084,15 @@ idct3_2core_v6 PROC
+ ; r0 = ogg_int16_t *_y (destination)
+ ; r1 = const ogg_int16_t *_x (source)
+ ; Stage 1:
+- LDRD r4, [r1], #16 ; r4 = <x[0,1]|x[0,0]>; r5 = <*|x[0,2]>
+- LDRD r10,OC_C6S2_3_v6 ; r10= OC_C6S2; r11= OC_C2S6
++ LDRD r4, r5, [r1], #16 ; r4 = <x[0,1]|x[0,0]>; r5 = <*|x[0,2]>
++ LDRD r10,r11, OC_C6S2_3_v6 ; r10= OC_C6S2; r11= OC_C2S6
+ ; Stall
+ SMULWB r3, r11,r5 ; r3 = t[0,3]=OC_C2S6*x[0,2]>>16
+ LDR r11,OC_C4S4
+ SMULWB r2, r10,r5 ; r2 = t[0,2]=OC_C6S2*x[0,2]>>16
+ LDR r5, [r1], #16 ; r5 = <x[1,1]|x[1,0]>
+ SMULWB r12,r11,r4 ; r12= (t[0,0]=OC_C4S4*x[0,0]>>16)
+- LDRD r6, OC_C7S1_3_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
++ LDRD r6, r7, OC_C7S1_3_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
+ SMULWB r10,r11,r5 ; r10= (t[1,0]=OC_C4S4*x[1,0]>>16)
+ PKHBT r12,r12,r10,LSL #16 ; r12= <t[1,0]|t[0,0]>
+ SMULWT r10,r7, r5 ; r10= t[1,7]=OC_C1S7*x[1,1]>>16
+@@ -1128,8 +1128,8 @@ idct3_3core_down_v6 PROC
+ ; r0 = ogg_int16_t *_y (destination)
+ ; r1 = const ogg_int16_t *_x (source)
+ ; Stage 1:
+- LDRD r10,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <??|x[0,2]>
+- LDRD r6, OC_C6S2_3_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
++ LDRD r10,r11,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <??|x[0,2]>
++ LDRD r6, r7, OC_C6S2_3_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
+ LDR r4, [r1], #16 ; r4 = <x[1,1]|x[1,0]>
+ SMULWB r3, r7, r11 ; r3 = t[0,3]=OC_C2S6*x[0,2]>>16
+ MOV r7,#8
+@@ -1140,7 +1140,7 @@ idct3_3core_down_v6 PROC
+ PKHBT r3, r3, r3, LSL #16 ; r3 = <t[0,3]|t[0,3]>
+ SMLAWB r5, r11,r4, r7 ; r5 = t[1,0]+8=(OC_C4S4*x[1,0]>>16)+8
+ PKHBT r2, r2, r2, LSL #16 ; r2 = <t[0,2]|t[0,2]>
+- LDRD r6, OC_C7S1_3_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
++ LDRD r6, r7, OC_C7S1_3_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
+ PKHBT r12,r12,r5, LSL #16 ; r12= <t[1,0]+8|t[0,0]+8>
+ SMULWT r5, r7, r4 ; r5 = t[1,7]=OC_C1S7*x[1,1]>>16
+ SMULWT r7, r7, r10 ; r7 = t[0,7]=OC_C1S7*x[0,1]>>16
+@@ -1163,13 +1163,13 @@ idct4_3core_v6 PROC
+ ; r0 = ogg_int16_t *_y (destination)
+ ; r1 = const ogg_int16_t *_x (source)
+ ; Stage 1:
+- LDRD r10,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <x[0,3]|x[0,2]>
+- LDRD r2, OC_C5S3_4_v6 ; r2 = OC_C5S3; r3 = OC_C3S5
+- LDRD r4, [r1], #16 ; r4 = <x[1,1]|x[1,0]>; r5 = <??|x[1,2]>
++ LDRD r10,r11,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <x[0,3]|x[0,2]>
++ LDRD r2, r3, OC_C5S3_4_v6 ; r2 = OC_C5S3; r3 = OC_C3S5
++ LDRD r4, r5, [r1], #16 ; r4 = <x[1,1]|x[1,0]>; r5 = <??|x[1,2]>
+ SMULWT r9, r3, r11 ; r9 = t[0,6]=OC_C3S5*x[0,3]>>16
+ SMULWT r8, r2, r11 ; r8 = -t[0,5]=OC_C5S3*x[0,3]>>16
+ PKHBT r9, r9, r2 ; r9 = <0|t[0,6]>
+- LDRD r6, OC_C6S2_4_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
++ LDRD r6, r7, OC_C6S2_4_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
+ PKHBT r8, r8, r2 ; r9 = <0|-t[0,5]>
+ SMULWB r3, r7, r11 ; r3 = t[0,3]=OC_C2S6*x[0,2]>>16
+ SMULWB r2, r6, r11 ; r2 = t[0,2]=OC_C6S2*x[0,2]>>16
+@@ -1180,7 +1180,7 @@ idct4_3core_v6 PROC
+ SMULWB r12,r11,r10 ; r12= t[0,0]=OC_C4S4*x[0,0]>>16
+ PKHBT r2, r2, r5, LSL #16 ; r2 = <t[1,2]|t[0,2]>
+ SMULWB r5, r11,r4 ; r5 = t[1,0]=OC_C4S4*x[1,0]>>16
+- LDRD r6, OC_C7S1_4_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
++ LDRD r6, r7, OC_C7S1_4_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
+ PKHBT r12,r12,r5, LSL #16 ; r12= <t[1,0]|t[0,0]>
+ SMULWT r5, r7, r4 ; r5 = t[1,7]=OC_C1S7*x[1,1]>>16
+ SMULWT r7, r7, r10 ; r7 = t[0,7]=OC_C1S7*x[0,1]>>16
+@@ -1247,11 +1247,11 @@ idct4_4core_down_v6 PROC
+ ; r0 = ogg_int16_t *_y (destination)
+ ; r1 = const ogg_int16_t *_x (source)
+ ; Stage 1:
+- LDRD r10,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <x[0,3]|x[0,2]>
+- LDRD r2, OC_C5S3_4_v6 ; r2 = OC_C5S3; r3 = OC_C3S5
+- LDRD r4, [r1], #16 ; r4 = <x[1,1]|x[1,0]>; r5 = <x[1,3]|x[1,2]>
++ LDRD r10,r11,[r1], #16 ; r10= <x[0,1]|x[0,0]>; r11= <x[0,3]|x[0,2]>
++ LDRD r2, r3, OC_C5S3_4_v6 ; r2 = OC_C5S3; r3 = OC_C3S5
++ LDRD r4, r5, [r1], #16 ; r4 = <x[1,1]|x[1,0]>; r5 = <x[1,3]|x[1,2]>
+ SMULWT r9, r3, r11 ; r9 = t[0,6]=OC_C3S5*x[0,3]>>16
+- LDRD r6, OC_C6S2_4_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
++ LDRD r6, r7, OC_C6S2_4_v6 ; r6 = OC_C6S2; r7 = OC_C2S6
+ SMULWT r8, r2, r11 ; r8 = -t[0,5]=OC_C5S3*x[0,3]>>16
+ ; Here we cheat: row 3 had just a DC, so x[0,3]==x[1,3] by definition.
+ PKHBT r9, r9, r9, LSL #16 ; r9 = <t[0,6]|t[0,6]>
+@@ -1266,7 +1266,7 @@ idct4_4core_down_v6 PROC
+ SMLAWB r12,r11,r10,r7 ; r12= t[0,0]+8=(OC_C4S4*x[0,0]>>16)+8
+ PKHBT r2, r2, r5, LSL #16 ; r2 = <t[1,2]|t[0,2]>
+ SMLAWB r5, r11,r4 ,r7 ; r5 = t[1,0]+8=(OC_C4S4*x[1,0]>>16)+8
+- LDRD r6, OC_C7S1_4_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
++ LDRD r6, r7, OC_C7S1_4_v6 ; r6 = OC_C7S1; r7 = OC_C1S7
+ PKHBT r12,r12,r5, LSL #16 ; r12= <t[1,0]+8|t[0,0]+8>
+ SMULWT r5, r7, r4 ; r5 = t[1,7]=OC_C1S7*x[1,1]>>16
+ SMULWT r7, r7, r10 ; r7 = t[0,7]=OC_C1S7*x[0,1]>>16
+@@ -1296,7 +1296,7 @@ idct8_8core_v6 PROC
+ STMFD r13!,{r0,r14}
+ ; Stage 1:
+ ;5-6 rotation by 3pi/16
+- LDRD r10,OC_C5S3_4_v6 ; r10= OC_C5S3, r11= OC_C3S5
++ LDRD r10,r11,OC_C5S3_4_v6 ; r10= OC_C5S3, r11= OC_C3S5
+ LDR r4, [r1,#8] ; r4 = <x[0,5]|x[0,4]>
+ LDR r7, [r1,#24] ; r7 = <x[1,5]|x[1,4]>
+ SMULWT r5, r11,r4 ; r5 = OC_C3S5*x[0,5]>>16
+@@ -1313,7 +1313,7 @@ idct8_8core_v6 PROC
+ PKHBT r6, r6, r11,LSL #16 ; r6 = <t[1,6]|t[0,6]>
+ SMULWT r8, r10,r12 ; r8 = OC_C5S3*x[1,3]>>16
+ ;2-3 rotation by 6pi/16
+- LDRD r10,OC_C6S2_4_v6 ; r10= OC_C6S2, r11= OC_C2S6
++ LDRD r10,r11,OC_C6S2_4_v6 ; r10= OC_C6S2, r11= OC_C2S6
+ PKHBT r3, r3, r8, LSL #16 ; r3 = <r8|r3>
+ LDR r8, [r1,#12] ; r8 = <x[0,7]|x[0,6]>
+ SMULWB r2, r10,r0 ; r2 = OC_C6S2*x[0,2]>>16
+@@ -1329,7 +1329,7 @@ idct8_8core_v6 PROC
+ PKHBT r3, r3, r10,LSL #16 ; r3 = <t[1,6]|t[0,6]>
+ SMULWB r12,r11,r7 ; r12= OC_C2S6*x[1,6]>>16
+ ;4-7 rotation by 7pi/16
+- LDRD r10,OC_C7S1_8_v6 ; r10= OC_C7S1, r11= OC_C1S7
++ LDRD r10,r11,OC_C7S1_8_v6 ; r10= OC_C7S1, r11= OC_C1S7
+ PKHBT r9, r9, r12,LSL #16 ; r9 = <r9|r12>
+ LDR r0, [r1],#16 ; r0 = <x[0,1]|x[0,0]>
+ PKHTB r7, r7, r8, ASR #16 ; r7 = <x[1,7]|x[0,7]>
+@@ -1395,7 +1395,7 @@ idct8_8core_down_v6 PROC
+ STMFD r13!,{r0,r14}
+ ; Stage 1:
+ ;5-6 rotation by 3pi/16
+- LDRD r10,OC_C5S3_8_v6 ; r10= OC_C5S3, r11= OC_C3S5
++ LDRD r10,r11,OC_C5S3_8_v6 ; r10= OC_C5S3, r11= OC_C3S5
+ LDR r4, [r1,#8] ; r4 = <x[0,5]|x[0,4]>
+ LDR r7, [r1,#24] ; r7 = <x[1,5]|x[1,4]>
+ SMULWT r5, r11,r4 ; r5 = OC_C3S5*x[0,5]>>16
+@@ -1412,7 +1412,7 @@ idct8_8core_down_v6 PROC
+ PKHBT r6, r6, r11,LSL #16 ; r6 = <t[1,6]|t[0,6]>
+ SMULWT r8, r10,r12 ; r8 = OC_C5S3*x[1,3]>>16
+ ;2-3 rotation by 6pi/16
+- LDRD r10,OC_C6S2_8_v6 ; r10= OC_C6S2, r11= OC_C2S6
++ LDRD r10,r11,OC_C6S2_8_v6 ; r10= OC_C6S2, r11= OC_C2S6
+ PKHBT r3, r3, r8, LSL #16 ; r3 = <r8|r3>
+ LDR r8, [r1,#12] ; r8 = <x[0,7]|x[0,6]>
+ SMULWB r2, r10,r0 ; r2 = OC_C6S2*x[0,2]>>16
+@@ -1428,7 +1428,7 @@ idct8_8core_down_v6 PROC
+ PKHBT r3, r3, r10,LSL #16 ; r3 = <t[1,6]|t[0,6]>
+ SMULWB r12,r11,r7 ; r12= OC_C2S6*x[1,6]>>16
+ ;4-7 rotation by 7pi/16
+- LDRD r10,OC_C7S1_8_v6 ; r10= OC_C7S1, r11= OC_C1S7
++ LDRD r10,r11,OC_C7S1_8_v6 ; r10= OC_C7S1, r11= OC_C1S7
+ PKHBT r9, r9, r12,LSL #16 ; r9 = <r9|r12>
+ LDR r0, [r1],#16 ; r0 = <x[0,1]|x[0,0]>
+ PKHTB r7, r7, r8, ASR #16 ; r7 = <x[1,7]|x[0,7]>
diff --git a/www/firefox31/patches/patch-media_libyuv_include_libyuv_scale__row.h b/www/firefox31/patches/patch-media_libyuv_include_libyuv_scale__row.h
new file mode 100644
index 00000000000..dd81ae248c1
--- /dev/null
+++ b/www/firefox31/patches/patch-media_libyuv_include_libyuv_scale__row.h
@@ -0,0 +1,17 @@
+$NetBSD: patch-media_libyuv_include_libyuv_scale__row.h,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- media/libyuv/include/libyuv/scale_row.h.orig 2015-04-10 18:40:37.000000000 +0000
++++ media/libyuv/include/libyuv/scale_row.h
+@@ -219,10 +219,10 @@ void ScaleARGBFilterCols_SSSE3(uint8* ds
+ void ScaleARGBColsUp2_SSE2(uint8* dst_argb, const uint8* src_argb,
+ int dst_width, int x, int dx);
+ // Row functions.
+-void ScaleARGBRowDownEven_NEON(const uint8* src_argb, int src_stride,
++void ScaleARGBRowDownEven_NEON(const uint8* src_argb, ptrdiff_t src_stride,
+ int src_stepx,
+ uint8* dst_argb, int dst_width);
+-void ScaleARGBRowDownEvenBox_NEON(const uint8* src_argb, int src_stride,
++void ScaleARGBRowDownEvenBox_NEON(const uint8* src_argb, ptrdiff_t src_stride,
+ int src_stepx,
+ uint8* dst_argb, int dst_width);
+ void ScaleARGBRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,
diff --git a/www/firefox31/patches/patch-mozglue_build_Makefile.in b/www/firefox31/patches/patch-mozglue_build_Makefile.in
new file mode 100644
index 00000000000..9df6117760f
--- /dev/null
+++ b/www/firefox31/patches/patch-mozglue_build_Makefile.in
@@ -0,0 +1,18 @@
+$NetBSD: patch-mozglue_build_Makefile.in,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- mozglue/build/Makefile.in.orig 2015-04-11 09:28:37.000000000 +0000
++++ mozglue/build/Makefile.in
+@@ -83,13 +83,6 @@ ifeq (android, $(MOZ_WIDGET_TOOLKIT))
+ EXTRA_DSO_LDOPTS += -Wl,--wrap=pthread_atfork
+ endif
+
+-ifdef MOZ_LINKER
+-ifeq (arm, $(TARGET_CPU))
+-EXTRA_DSO_LDOPTS += -Wl,-version-script,$(srcdir)/arm-eabi-filter
+-endif
+-
+-endif
+-
+ ifeq (Android, $(OS_TARGET))
+ WRAP_LDFLAGS := $(filter -Wl%,$(WRAP_LDFLAGS))
+ endif
diff --git a/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_moz.build b/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_moz.build
index 63426ab7d8c..0f435d71e72 100644
--- a/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_moz.build
+++ b/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_moz.build
@@ -1,10 +1,10 @@
-$NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_moz.build,v 1.1 2014/11/03 12:18:32 ryoon Exp $
+$NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_moz.build,v 1.2 2015/04/28 12:06:34 joerg Exp $
* Support NetBSD/amd64 and DragonFly/amd64.
* OS_TEST can never be powerpc.
---- xpcom/reflect/xptcall/src/md/unix/moz.build.orig 2014-05-06 22:56:39.000000000 +0000
+--- xpcom/reflect/xptcall/src/md/unix/moz.build.orig 2015-03-21 03:27:27.000000000 +0000
+++ xpcom/reflect/xptcall/src/md/unix/moz.build
@@ -9,7 +9,7 @@ if CONFIG['OS_ARCH'] == 'Darwin':
'xptcinvoke_darwin.cpp',
@@ -32,3 +32,14 @@ $NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_moz.build,v 1.1 2014/11/03 12:1
CONFIG['OS_ARCH'].startswith('GNU_'):
if CONFIG['OS_TEST'] == 'x86_64':
SOURCES += [
+@@ -102,8 +102,8 @@ if CONFIG['CPU_ARCH'] == 'arm' or CONFIG
+ CXXFLAGS += ['-O2']
+ elif CONFIG['OS_ARCH'] == 'NetBSD':
+ SOURCES += [
+- 'xptcinvoke_arm_netbsd.cpp',
+- 'xptcstubs_arm_netbsd.cpp',
++ 'xptcinvoke_arm.cpp',
++ 'xptcstubs_arm.cpp',
+ ]
+
+ if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['OS_ARCH'] == 'OpenBSD':
diff --git a/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp b/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp
new file mode 100644
index 00000000000..5a1cad4b786
--- /dev/null
+++ b/www/firefox31/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp
@@ -0,0 +1,39 @@
+$NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__arm.cpp,v 1.1 2015/04/28 12:06:34 joerg Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp.orig 2015-04-25 16:42:42.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp
+@@ -130,24 +130,33 @@ __asm__ ("\n"
+ ".text\n"
+ ".align 2\n"
+ "SharedStub:\n"
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
+ ".fnstart\n"
++#endif
+ CFI(".cfi_startproc\n")
+ "stmfd sp!, {r1, r2, r3}\n"
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
+ ".save {r1, r2, r3}\n"
++#endif
+ CFI(".cfi_def_cfa_offset 12\n")
+ CFI(".cfi_offset r3, -4\n")
+ CFI(".cfi_offset r2, -8\n")
+ CFI(".cfi_offset r1, -12\n")
+ "mov r2, sp\n"
+ "str lr, [sp, #-4]!\n"
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
+ ".save {lr}\n"
++#endif
+ CFI(".cfi_def_cfa_offset 16\n")
+ CFI(".cfi_offset lr, -16\n")
+ "mov r1, ip\n"
+ "bl _PrepareAndDispatch\n"
+ "ldr pc, [sp], #16\n"
+ CFI(".cfi_endproc\n")
+- ".fnend");
++#if defined(__ARM_EABI__) && !defined(__ARM_DWARF_EH__)
++ ".fnend"
++#endif
++ );
+
+ /*
+ * Create sets of stubs to call the SharedStub.