diff options
author | joerg <joerg@pkgsrc.org> | 2015-04-28 12:06:34 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2015-04-28 12:06:34 +0000 |
commit | f179ebf90dc8cafc74a6efe05c3e177d4e1f98f2 (patch) | |
tree | 730944770d3bcad4ecb0674c0974eba5a8d1c36e /www/firefox31 | |
parent | 0ccf541112eca482c0b8e4440c4d151400d52838 (diff) | |
download | pkgsrc-f179ebf90dc8cafc74a6efe05c3e177d4e1f98f2.tar.gz |
Allow building Firefox 31 with Clang and on NetBSD/ARM.
Diffstat (limited to 'www/firefox31')
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. |