Hello community, here is the log from the commit of package seamonkey for openSUSE:Factory checked in at 2014-05-01 07:52:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/seamonkey (Old) and /work/SRC/openSUSE:Factory/.seamonkey.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "seamonkey" Changes: -------- --- /work/SRC/openSUSE:Factory/seamonkey/seamonkey.changes 2014-03-21 13:51:31.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.seamonkey.new/seamonkey.changes 2014-05-01 07:52:32.000000000 +0200 @@ -1,0 +2,39 @@ +Tue Apr 29 06:43:16 UTC 2014 - wr@rosenauer.org + +- update to SeaMonkey 2.26 (bnc#875378) + * MFSA 2014-34/CVE-2014-1518/CVE-2014-1519 + Miscellaneous memory safety hazards + * MFSA 2014-36/CVE-2014-1522 (bmo#995289) + Web Audio memory corruption issues + * MFSA 2014-37/CVE-2014-1523 (bmo#969226) + Out of bounds read while decoding JPG images + * MFSA 2014-38/CVE-2014-1524 (bmo#989183) + Buffer overflow when using non-XBL object as XBL + * MFSA 2014-39/CVE-2014-1525 (bmo#989210) + Use-after-free in the Text Track Manager for HTML video + * MFSA 2014-41/CVE-2014-1528 (bmo#963962) + Out-of-bounds write in Cairo + * MFSA 2014-42/CVE-2014-1529 (bmo#987003) + Privilege escalation through Web Notification API + * MFSA 2014-43/CVE-2014-1530 (bmo#895557) + Cross-site scripting (XSS) using history navigations + * MFSA 2014-44/CVE-2014-1531 (bmo#987140) + Use-after-free in imgLoader while resizing images + * MFSA 2014-45/CVE-2014-1492 (bmo#903885) + Incorrect IDNA domain name matching for wildcard certificates + (fixed by NSS 3.16) + * MFSA 2014-46/CVE-2014-1532 (bmo#966006) + Use-after-free in nsHostResolver + * MFSA 2014-47/CVE-2014-1526 (bmo#988106) + Debugger can bypass XrayWrappers with JavaScript +- rebased patches +- added aarch64 porting patches + * mozilla-aarch64-bmo-810631.patch + * mozilla-aarch64-bmo-962488.patch + * mozilla-aarch64-bmo-963023.patch + * mozilla-aarch64-bmo-963024.patch + * mozilla-aarch64-bmo-963027.patch +- requires NSPR 4.10.3 and NSS 3.16 +- added mozilla-icu-strncat.patch to fix post build checks + +------------------------------------------------------------------- Old: ---- l10n-2.25.tar.bz2 seamonkey-2.25-source.tar.bz2 New: ---- l10n-2.26.tar.bz2 mozilla-aarch64-bmo-810631.patch mozilla-aarch64-bmo-962488.patch mozilla-aarch64-bmo-963023.patch mozilla-aarch64-bmo-963024.patch mozilla-aarch64-bmo-963027.patch mozilla-icu-strncat.patch seamonkey-2.26-source.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ seamonkey.spec ++++++ --- /var/tmp/diff_new_pack.YRgqjk/_old 2014-05-01 07:52:38.000000000 +0200 +++ /var/tmp/diff_new_pack.YRgqjk/_new 2014-05-01 07:52:38.000000000 +0200 @@ -55,9 +55,9 @@ %endif Provides: web_browser Provides: browser(npapi) -Version: 2.25 +Version: 2.26 Release: 0 -%define releasedate 2014031800 +%define releasedate 2014042800 Summary: The successor of the Mozilla Application Suite License: MPL-2.0 Group: Productivity/Networking/Web/Browsers @@ -81,6 +81,7 @@ Patch7: mozilla-ntlm-full-path.patch Patch8: mozilla-ua-locale.patch Patch9: mozilla-ppc.patch +Patch11: mozilla-icu-strncat.patch Patch12: mozilla-libproxy-compat.patch Patch13: mozilla-ppc64le-build.patch Patch14: mozilla-ppc64le-javascript.patch @@ -88,7 +89,13 @@ Patch16: mozilla-ppc64le-mfbt.patch Patch17: mozilla-ppc64le-webrtc.patch Patch18: mozilla-ppc64le-xpcom.patch -Patch20: seamonkey-ua-locale.patch +# Gecko/Toolkit AArch64 Porting +Patch30: mozilla-aarch64-bmo-810631.patch +Patch31: mozilla-aarch64-bmo-962488.patch +Patch32: mozilla-aarch64-bmo-963027.patch +Patch33: mozilla-aarch64-bmo-963023.patch +Patch34: mozilla-aarch64-bmo-963024.patch +Patch100: seamonkey-ua-locale.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: /bin/sh coreutils Provides: seamonkey-mail = %{version} @@ -111,9 +118,9 @@ %global __find_provides %provfind # the following conditions are always met in Factory by definition # so using %opensuse_bs is secure for now -BuildRequires: mozilla-nspr-devel >= 4.10.2 +BuildRequires: mozilla-nspr-devel >= 4.10.3 PreReq: mozilla-nspr >= %(rpm -q --queryformat '%{VERSION}' mozilla-nspr) -BuildRequires: mozilla-nss-devel >= 3.15.5 +BuildRequires: mozilla-nss-devel >= 3.16 PreReq: mozilla-nss >= %(rpm -q --queryformat '%{VERSION}' mozilla-nss) %description @@ -193,6 +200,7 @@ %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch11 -p1 %patch12 -p1 %patch13 -p1 %patch14 -p1 @@ -200,9 +208,14 @@ %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 popd # comm patches -%patch20 -p1 +%patch100 -p1 %build # no need to add build time to binaries @@ -227,7 +240,7 @@ mk_add_options BUILD_OFFICIAL=1 mk_add_options MOZ_MILESTONE_RELEASE=1 mk_add_options MOZ_MAKE_FLAGS=%{?jobs:-j%jobs} -mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj +#mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj ac_add_options --enable-application=suite ac_add_options --libdir=%{progdir} ac_add_options --prefix=%{prefix} @@ -266,11 +279,11 @@ # %install -cd ../obj +cd obj* make -C suite/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0 # copy tree into RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{progdir} -cp -rf $RPM_BUILD_DIR/obj/mozilla/dist/seamonkey/* $RPM_BUILD_ROOT%{progdir} +cp -rf $RPM_BUILD_DIR/seamonkey/obj*/mozilla/dist/seamonkey/* $RPM_BUILD_ROOT%{progdir} # remove some executable permissions find $RPM_BUILD_ROOT%{progdir} \ -name "*.js" -o \ ++++++ compare-locales.tar.bz2 ++++++ ++++++ create-tar.sh ++++++ --- /var/tmp/diff_new_pack.YRgqjk/_old 2014-05-01 07:52:38.000000000 +0200 +++ /var/tmp/diff_new_pack.YRgqjk/_new 2014-05-01 07:52:38.000000000 +0200 @@ -2,8 +2,8 @@ CHANNEL="release" BRANCH="releases/comm-$CHANNEL" -RELEASE_TAG="SEAMONKEY_2_25_RELEASE" -VERSION="2.25" +RELEASE_TAG="SEAMONKEY_2_26_RELEASE" +VERSION="2.26" echo "cloning $BRANCH..." hg clone http://hg.mozilla.org/$BRANCH seamonkey ++++++ l10n-2.25.tar.bz2 -> l10n-2.26.tar.bz2 ++++++ /work/SRC/openSUSE:Factory/seamonkey/l10n-2.25.tar.bz2 /work/SRC/openSUSE:Factory/.seamonkey.new/l10n-2.26.tar.bz2 differ: char 11, line 1 ++++++ mozilla-aarch64-bmo-810631.patch ++++++ ++++ 100372 lines (skipped) ++++++ mozilla-aarch64-bmo-962488.patch ++++++ # HG changeset patch # User Marcin Juszkiewicz <mjuszkiewicz@redhat.com> # Date 1393440196 18000 # Node ID 6a46f53ad944b44385398822d7bcf7621a785d91 # Parent 0aa56e2a5f816a30da48701f73d03060ee9692b2 Bug 962488 - Update double-conversion for proper AArch64 support. r=froydnj Fix imported from upstream repository: https://code.google.com/p/double-conversion/source/detail?r=4e24bb31bcc76d6d... diff --git a/mfbt/double-conversion/fix-aarch64-macro.patch b/mfbt/double-conversion/fix-aarch64-macro.patch new file mode 100644 --- /dev/null +++ b/mfbt/double-conversion/fix-aarch64-macro.patch @@ -0,0 +1,23 @@ +Backport from upstream. + +https://code.google.com/p/double-conversion/source/detail?r=4e24bb31bcc76d6d... + +--- + mfbt/double-conversion/utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/mfbt/double-conversion/utils.h ++++ b/mfbt/double-conversion/utils.h +@@ -58,11 +58,11 @@ + defined(__mips__) || \ + defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \ + defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ + defined(__SH4__) || defined(__alpha__) || \ + defined(_MIPS_ARCH_MIPS32R2) || \ +- defined(_AARCH64EL_) ++ defined(__AARCH64EL__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) + #if defined(_WIN32) + // Windows uses a 64bit wide floating point stack. + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 diff --git a/mfbt/double-conversion/update.sh b/mfbt/double-conversion/update.sh --- a/mfbt/double-conversion/update.sh +++ b/mfbt/double-conversion/update.sh @@ -15,9 +15,12 @@ cp $1/src/*.h ./ # Source cp $1/src/*.cc ./ patch -p3 < add-mfbt-api-markers.patch patch -p3 < use-StandardInteger.patch patch -p3 < use-mozilla-assertions.patch patch -p3 < use-static_assert.patch -patch -p3 < ToPrecision-exponential.patch \ No newline at end of file +patch -p3 < ToPrecision-exponential.patch + +# Merged upstream, part of 2.0.1 version +patch -p3 < fix-aarch64-macro.patch diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h --- a/mfbt/double-conversion/utils.h +++ b/mfbt/double-conversion/utils.h @@ -55,17 +55,17 @@ #if defined(_M_X64) || defined(__x86_64__) || \ defined(__ARMEL__) || defined(__avr32__) || \ defined(__hppa__) || defined(__ia64__) || \ defined(__mips__) || \ defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \ defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ defined(__SH4__) || defined(__alpha__) || \ defined(_MIPS_ARCH_MIPS32R2) || \ - defined(_AARCH64EL_) + defined(__AARCH64EL__) #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) #if defined(_WIN32) // Windows uses a 64bit wide floating point stack. #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 #else #undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS #endif // _WIN32 ++++++ mozilla-aarch64-bmo-963023.patch ++++++ # HG changeset patch # User Marcin Juszkiewicz <mjuszkiewicz@redhat.com> # Date 1392217668 18000 # Node ID 4e9b713f435ade266a68a8d7ba08aad65c3fa6c5 # Parent 282b6e88f9d4c2367a72836f6f9efeab2aadaa58 Bug 963023 - AArch64 support for libevent. r=froydnj diff --git a/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch b/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch new file mode 100644 --- /dev/null +++ b/ipc/chromium/src/third_party/libevent-use-non-deprecated-syscalls.patch @@ -0,0 +1,43 @@ +--- + ipc/chromium/src/third_party/libevent/epoll_sub.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +--- mozilla-central.orig/ipc/chromium/src/third_party/libevent/epoll_sub.c ++++ mozilla-central/ipc/chromium/src/third_party/libevent/epoll_sub.c +@@ -29,15 +29,24 @@ + #include <sys/param.h> + #include <sys/types.h> + #include <sys/syscall.h> + #include <sys/epoll.h> + #include <unistd.h> ++#include <errno.h> + + int + epoll_create(int size) + { ++#if !defined(__NR_epoll_create) && defined(__NR_epoll_create1) ++ if (size <= 0) { ++ errno = EINVAL; ++ return -1; ++ } ++ return (syscall(__NR_epoll_create1, 0)); ++#else + return (syscall(__NR_epoll_create, size)); ++#endif + } + + int + epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) + { +@@ -46,7 +55,11 @@ epoll_ctl(int epfd, int op, int fd, stru + } + + int + epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) + { ++#if !defined(__NR_epoll_wait) && defined(__NR_epoll_pwait) ++ return (syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, NULL, 0)); ++#else + return (syscall(__NR_epoll_wait, epfd, events, maxevents, timeout)); ++#endif + } diff --git a/ipc/chromium/src/third_party/libevent/README.mozilla b/ipc/chromium/src/third_party/libevent/README.mozilla --- a/ipc/chromium/src/third_party/libevent/README.mozilla +++ b/ipc/chromium/src/third_party/libevent/README.mozilla @@ -8,8 +8,10 @@ android/event2/event-config.h These files are taken from libevent-2.0.21-stable built on the development environment indicated by the first path component. You have to run "./configure" and "make" to get all of the pre-processing done. The file can then be found in "include/event2/". 2. This is ugly, prepare yourself. OS X has a weird problem with how the "TAILQ_END(head)" is used, causing a linking error. Just replace all use of the "TAILQ_END(head)" macro with "NULL". 3. Apply "add mac-arc4random-buf.patch", which removes some bad OS X compatibility code. This will allow libevent to compile on all supported versions of OS X. 4. Apply "openbsd-no-arc4random_addrandom.patch", which fixes the build on OpenBSD (which doesnt provide arc4random_addrandom anymore, see #931354) + +5. Apply "libevent-use-non-deprecated-syscalls.patch", which fixes the build on AArch64 architecture (which does not provide deprecated syscalls) diff --git a/ipc/chromium/src/third_party/libevent/epoll_sub.c b/ipc/chromium/src/third_party/libevent/epoll_sub.c --- a/ipc/chromium/src/third_party/libevent/epoll_sub.c +++ b/ipc/chromium/src/third_party/libevent/epoll_sub.c @@ -26,27 +26,40 @@ */ #include <stdint.h> #include <sys/param.h> #include <sys/types.h> #include <sys/syscall.h> #include <sys/epoll.h> #include <unistd.h> +#include <errno.h> int epoll_create(int size) { +#if !defined(__NR_epoll_create) && defined(__NR_epoll_create1) + if (size <= 0) { + errno = EINVAL; + return -1; + } + return (syscall(__NR_epoll_create1, 0)); +#else return (syscall(__NR_epoll_create, size)); +#endif } int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) { return (syscall(__NR_epoll_ctl, epfd, op, fd, event)); } int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) { +#if !defined(__NR_epoll_wait) && defined(__NR_epoll_pwait) + return (syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, NULL, 0)); +#else return (syscall(__NR_epoll_wait, epfd, events, maxevents, timeout)); +#endif } ++++++ mozilla-aarch64-bmo-963024.patch ++++++ # HG changeset patch # User Marcin Juszkiewicz <mjuszkiewicz@redhat.com> # Date 1393440196 18000 # Node ID d56b5c1a557348d4ac14a4d1ea7a5b5d240e3647 # Parent 6a46f53ad944b44385398822d7bcf7621a785d91 Bug 963024 - AArch64 support for XPCOM. r=froydnj diff --git a/xpcom/reflect/xptcall/src/md/unix/moz.build b/xpcom/reflect/xptcall/src/md/unix/moz.build --- a/xpcom/reflect/xptcall/src/md/unix/moz.build +++ b/xpcom/reflect/xptcall/src/md/unix/moz.build @@ -144,16 +144,23 @@ if CONFIG['OS_ARCH'] == 'NetBSD': if CONFIG['OS_TEST'] in ('amiga', 'atari', 'hp300', 'mac68k', 'mvme68k', 'next68k', 'sun3', 'sun3x', 'x68k'): SOURCES += [ 'xptcinvoke_netbsd_m68k.cpp', 'xptcstubs_netbsd_m68k.cpp' ] if CONFIG['OS_ARCH'] == 'Linux': + if CONFIG['OS_TEST'] == 'aarch64': + SOURCES += [ + 'xptcinvoke_aarch64.cpp', + 'xptcinvoke_asm_aarch64.s', + 'xptcstubs_aarch64.cpp', + 'xptcstubs_asm_aarch64.s', + ] if CONFIG['OS_TEST'] == 'm68k': SOURCES += [ 'xptcinvoke_linux_m68k.cpp', 'xptcstubs_linux_m68k.cpp', ] if CONFIG['OS_TEST'].find('mips') != -1: if CONFIG['OS_TEST'].find('mips64') != -1: SOURCES += [ diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp new file mode 100644 --- /dev/null +++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_aarch64.cpp @@ -0,0 +1,136 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* Platform specific code to invoke XPCOM methods on native objects */ + +#include "xptcprivate.h" + +#if !defined(__aarch64__) +#error "This code is for Linux AArch64 only." +#endif + + +/* "Procedure Call Standard for the ARM 64-bit Architecture" document, sections + * "5.4 Parameter Passing" and "6.1.2 Procedure Calling" contain all the + * needed information. + * + * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf + */ + +#ifndef __AARCH64EL__ +#error "Only little endian compatibility was tested" +#endif + +/* + * Allocation of integer function arguments initially to registers r1-r7 + * and then to stack. Handling of 'that' argument which goes to register r0 + * is handled separately and does not belong here. + * + * 'ireg_args' - pointer to the current position in the buffer, + * corresponding to the register arguments + * 'stack_args' - pointer to the current position in the buffer, + * corresponding to the arguments on stack + * 'end' - pointer to the end of the registers argument + * buffer. + */ +static inline void alloc_word(uint64_t* &ireg_args, + uint64_t* &stack_args, + uint64_t* end, + uint64_t data) +{ + if (ireg_args < end) { + *ireg_args = data; + ireg_args++; + } else { + *stack_args = data; + stack_args++; + } +} + +static inline void alloc_double(double* &freg_args, + uint64_t* &stack_args, + double* end, + double data) +{ + if (freg_args < end) { + *freg_args = data; + freg_args++; + } else { + memcpy(stack_args, &data, sizeof(data)); + stack_args++; + } +} + +static inline void alloc_float(double* &freg_args, + uint64_t* &stack_args, + double* end, + float data) +{ + if (freg_args < end) { + memcpy(freg_args, &data, sizeof(data)); + freg_args++; + } else { + memcpy(stack_args, &data, sizeof(data)); + stack_args++; + } +} + + +extern "C" void +invoke_copy_to_stack(uint64_t* stk, uint64_t *end, + uint32_t paramCount, nsXPTCVariant* s) +{ + uint64_t *ireg_args = stk; + uint64_t *ireg_end = ireg_args + 8; + double *freg_args = (double *)ireg_end; + double *freg_end = freg_args + 8; + uint64_t *stack_args = (uint64_t *)freg_end; + + // leave room for 'that' argument in x0 + ++ireg_args; + + for (uint32_t i = 0; i < paramCount; i++, s++) { + if (s->IsPtrData()) { + alloc_word(ireg_args, stack_args, ireg_end, (uint64_t)s->ptr); + continue; + } + // According to the ABI, integral types that are smaller than 8 bytes + // are to be passed in 8-byte registers or 8-byte stack slots. + switch (s->type) { + case nsXPTType::T_FLOAT: + alloc_float(freg_args, stack_args, freg_end, s->val.f); + break; + case nsXPTType::T_DOUBLE: + alloc_double(freg_args, stack_args, freg_end, s->val.d); + break; + case nsXPTType::T_I8: alloc_word(ireg_args, stk, end, s->val.i8); break; + case nsXPTType::T_I16: alloc_word(ireg_args, stk, end, s->val.i16); break; + case nsXPTType::T_I32: alloc_word(ireg_args, stk, end, s->val.i32); break; + case nsXPTType::T_I64: alloc_word(ireg_args, stk, end, s->val.i64); break; + case nsXPTType::T_U8: alloc_word(ireg_args, stk, end, s->val.u8); break; + case nsXPTType::T_U16: alloc_word(ireg_args, stk, end, s->val.u16); break; + case nsXPTType::T_U32: alloc_word(ireg_args, stk, end, s->val.u32); break; + case nsXPTType::T_U64: alloc_word(ireg_args, stk, end, s->val.u64); break; + case nsXPTType::T_BOOL: alloc_word(ireg_args, stk, end, s->val.b); break; + case nsXPTType::T_CHAR: alloc_word(ireg_args, stk, end, s->val.c); break; + case nsXPTType::T_WCHAR: alloc_word(ireg_args, stk, end, s->val.wc); break; + default: + // all the others are plain pointer types + alloc_word(ireg_args, stack_args, ireg_end, + reinterpret_cast<uint64_t>(s->val.p)); + break; + } + } +} + +extern "C" nsresult _NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, + uint32_t paramCount, nsXPTCVariant* params); + +EXPORT_XPCOM_API(nsresult) +NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, + uint32_t paramCount, nsXPTCVariant* params) +{ + return _NS_InvokeByIndex(that, methodIndex, paramCount, params); +} diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s new file mode 100644 --- /dev/null +++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_aarch64.s @@ -0,0 +1,67 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + .section ".text" + .globl _NS_InvokeByIndex + .type _NS_InvokeByIndex,@function + +/* + * _NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, + * uint32_t paramCount, nsXPTCVariant* params) + */ + +_NS_InvokeByIndex: + # set up frame + stp x29, x30, [sp,#-32]! + mov x29, sp + stp x19, x20, [sp,#16] + + # save methodIndex across function calls + mov w20, w1 + + # end of stack area passed to invoke_copy_to_stack + mov x1, sp + + # assume 8 bytes of stack for each argument with 16-byte alignment + add w19, w2, #1 + and w19, w19, #0xfffffffe + sub sp, sp, w19, uxth #3 + + # temporary place to store args passed in r0-r7,v0-v7 + sub sp, sp, #128 + + # save 'that' on stack + str x0, [sp] + + # start of stack area passed to invoke_copy_to_stack + mov x0, sp + bl invoke_copy_to_stack + + # load arguments passed in r0-r7 + ldp x6, x7, [sp, #48] + ldp x4, x5, [sp, #32] + ldp x2, x3, [sp, #16] + ldp x0, x1, [sp],#64 + + # load arguments passed in v0-v7 + ldp d6, d7, [sp, #48] + ldp d4, d5, [sp, #32] + ldp d2, d3, [sp, #16] + ldp d0, d1, [sp],#64 + + # call the method + ldr x16, [x0] + add x16, x16, w20, uxth #3 + ldr x16, [x16] + blr x16 + + add sp, sp, w19, uxth #3 + ldp x19, x20, [sp,#16] + ldp x29, x30, [sp],#32 + ret + + .size _NS_InvokeByIndex, . - _NS_InvokeByIndex + + diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp new file mode 100644 --- /dev/null +++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_aarch64.cpp @@ -0,0 +1,219 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "xptcprivate.h" +#include "xptiprivate.h" + +#ifndef __AARCH64EL__ +#error "Only little endian compatibility was tested" +#endif + +/* + * This is for AArch64 ABI + * + * When we're called, the "gp" registers are stored in gprData and + * the "fp" registers are stored in fprData. Each array has 8 regs + * but first reg in gprData is a placeholder for 'self'. + */ +extern "C" nsresult +PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, uint64_t* args, + uint64_t *gprData, double *fprData) +{ +#define PARAM_BUFFER_COUNT 16 +#define PARAM_GPR_COUNT 8 +#define PARAM_FPR_COUNT 8 + + nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; + nsXPTCMiniVariant* dispatchParams = NULL; + const nsXPTMethodInfo* info; + nsresult result = NS_ERROR_FAILURE; + + NS_ASSERTION(self,"no self"); + + self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); + NS_ASSERTION(info,"no method info"); + + uint32_t paramCount = info->GetParamCount(); + + // setup variant array pointer + if (paramCount > PARAM_BUFFER_COUNT) { + dispatchParams = new nsXPTCMiniVariant[paramCount]; + } else { + dispatchParams = paramBuffer; + } + NS_ASSERTION(dispatchParams,"no place for params"); + + uint64_t* ap = args; + uint32_t next_gpr = 1; // skip first arg which is 'self' + uint32_t next_fpr = 0; + for (uint32_t i = 0; i < paramCount; i++) { + const nsXPTParamInfo& param = info->GetParam(i); + const nsXPTType& type = param.GetType(); + nsXPTCMiniVariant* dp = &dispatchParams[i]; + + if (param.IsOut() || !type.IsArithmetic()) { + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.p = (void*)gprData[next_gpr++]; + } else { + dp->val.p = (void*)*ap++; + } + continue; + } + + switch (type) { + case nsXPTType::T_I8: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.i8 = (int8_t)gprData[next_gpr++]; + } else { + dp->val.i8 = (int8_t)*ap++; + } + break; + + case nsXPTType::T_I16: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.i16 = (int16_t)gprData[next_gpr++]; + } else { + dp->val.i16 = (int16_t)*ap++; + } + break; + + case nsXPTType::T_I32: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.i32 = (int32_t)gprData[next_gpr++]; + } else { + dp->val.i32 = (int32_t)*ap++; + } + break; + + case nsXPTType::T_I64: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.i64 = (int64_t)gprData[next_gpr++]; + } else { + dp->val.i64 = (int64_t)*ap++; + } + break; + + case nsXPTType::T_U8: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.u8 = (uint8_t)gprData[next_gpr++]; + } else { + dp->val.u8 = (uint8_t)*ap++; + } + break; + + case nsXPTType::T_U16: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.u16 = (uint16_t)gprData[next_gpr++]; + } else { + dp->val.u16 = (uint16_t)*ap++; + } + break; + + case nsXPTType::T_U32: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.u32 = (uint32_t)gprData[next_gpr++]; + } else { + dp->val.u32 = (uint32_t)*ap++; + } + break; + + case nsXPTType::T_U64: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.u64 = (uint64_t)gprData[next_gpr++]; + } else { + dp->val.u64 = (uint64_t)*ap++; + } + break; + + case nsXPTType::T_FLOAT: + if (next_fpr < PARAM_FPR_COUNT) { + memcpy(&dp->val.f, &fprData[next_fpr++], sizeof(dp->val.f)); + } else { + memcpy(&dp->val.f, ap++, sizeof(dp->val.f)); + } + break; + + case nsXPTType::T_DOUBLE: + if (next_fpr < PARAM_FPR_COUNT) { + memcpy(&dp->val.d, &fprData[next_fpr++], sizeof(dp->val.d)); + } else { + memcpy(&dp->val.d, ap++, sizeof(dp->val.d)); + } + break; + + case nsXPTType::T_BOOL: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.b = (bool)gprData[next_gpr++]; + } else { + dp->val.b = (bool)*ap++; + } + break; + + case nsXPTType::T_CHAR: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.c = (char)gprData[next_gpr++]; + } else { + dp->val.c = (char)*ap++; + } + break; + + case nsXPTType::T_WCHAR: + if (next_gpr < PARAM_GPR_COUNT) { + dp->val.wc = (wchar_t)gprData[next_gpr++]; + } else { + dp->val.wc = (wchar_t)*ap++; + } + break; + + default: + NS_ASSERTION(0, "bad type"); + break; + } + } + + result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams); + + if (dispatchParams != paramBuffer) { + delete [] dispatchParams; + } + + return result; +} + +// Load w17 with the constant 'n' and branch to SharedStub(). +# define STUB_ENTRY(n) \ + __asm__ ( \ + ".section \".text\" \n\t" \ + ".align 2\n\t" \ + ".if "#n" < 10 \n\t" \ + ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \ + ".hidden _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \ + ".type _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n" \ + "_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t" \ + ".elseif "#n" < 100 \n\t" \ + ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \ + ".hidden _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \ + ".type _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n" \ + "_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t" \ + ".elseif "#n" < 1000 \n\t" \ + ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \ + ".hidden _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \ + ".type _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n" \ + "_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t" \ + ".else \n\t" \ + ".err \"stub number "#n" >= 1000 not yet supported\"\n" \ + ".endif \n\t" \ + "mov w17,#"#n" \n\t" \ + "b SharedStub \n" \ +); + +#define SENTINEL_ENTRY(n) \ + nsresult nsXPTCStubBase::Sentinel##n() \ +{ \ + NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \ + return NS_ERROR_NOT_IMPLEMENTED; \ +} + +#include "xptcstubsdef.inc" diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s new file mode 100644 --- /dev/null +++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_aarch64.s @@ -0,0 +1,39 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + .set NGPREGS,8 + .set NFPREGS,8 + + .section ".text" + .globl SharedStub + .hidden SharedStub + .type SharedStub,@function +SharedStub: + stp x29, x30, [sp,#-16]! + mov x29, sp + + sub sp, sp, #8*(NGPREGS+NFPREGS) + stp x0, x1, [sp, #64+(0*8)] + stp x2, x3, [sp, #64+(2*8)] + stp x4, x5, [sp, #64+(4*8)] + stp x6, x7, [sp, #64+(6*8)] + stp d0, d1, [sp, #(0*8)] + stp d2, d3, [sp, #(2*8)] + stp d4, d5, [sp, #(4*8)] + stp d6, d7, [sp, #(6*8)] + + # methodIndex passed from stub + mov w1, w17 + + add x2, sp, #16+(8*(NGPREGS+NFPREGS)) + add x3, sp, #8*NFPREGS + add x4, sp, #0 + + bl PrepareAndDispatch + + add sp, sp, #8*(NGPREGS+NFPREGS) + ldp x29, x30, [sp],#16 + ret + + .size SharedStub, . - SharedStub ++++++ mozilla-aarch64-bmo-963027.patch ++++++ # HG changeset patch # User Marcin Juszkiewicz <mjuszkiewicz@redhat.com> # Date 1392218661 18000 # Node ID 38fca44b6b86e2f12535900e2084f0378217570f # Parent 8858624d813a6200b059590c146cf774fc16ff38 Bug 963027 - AArch64 support for WebRTC. r=derf Index: mozilla/media/webrtc/trunk/webrtc/typedefs.h =================================================================== --- mozilla.orig/media/webrtc/trunk/webrtc/typedefs.h +++ mozilla/media/webrtc/trunk/webrtc/typedefs.h @@ -113,6 +113,16 @@ #define WEBRTC_ARCH_32_BITS 1 #define WEBRTC_ARCH_BIG_ENDIAN #define WEBRTC_BIG_ENDIAN +#elif defined(__aarch64__) +#define WEBRTC_ARCH_AARCH64 1 +#define WEBRTC_ARCH_64_BITS 1 +#if defined(__AARCH64EL__) +#define WEBRTC_ARCH_LITTLE_ENDIAN +#define WEBRTC_LITTLE_ENDIAN +#elif defined(__AARCH64EB__) +#define WEBRTC_ARCH_BIG_ENDIAN +#define WEBRTC_BIG_ENDIAN +#endif #elif defined(__alpha__) #define WEBRTC_ARCH_ALPHA 1 #define WEBRTC_ARCH_64_BITS 1 ++++++ mozilla-icu-strncat.patch ++++++ # HG changeset patch # Parent 29be2a4daa0f512d22bde85b97b5460839026571 # User Wolfgang Rosenauer <wr@rosenauer.org> From: Jan Engelhardt <jengelh@inai.de> Reference: http://bugs.icu-project.org/trac/ticket/7808 diff --git a/intl/icu/source/tools/pkgdata/pkgdata.cpp b/intl/icu/source/tools/pkgdata/pkgdata.cpp --- a/intl/icu/source/tools/pkgdata/pkgdata.cpp +++ b/intl/icu/source/tools/pkgdata/pkgdata.cpp @@ -1975,22 +1975,22 @@ static void loadLists(UPKGOptions *o, UE FILE *p = NULL; size_t n; static char buf[512] = ""; char cmdBuf[1024]; UErrorCode status = U_ZERO_ERROR; const char cmd[] = "icu-config --incpkgdatafile"; /* #1 try the same path where pkgdata was called from. */ - findDirname(progname, cmdBuf, 1024, &status); + findDirname(progname, cmdBuf, sizeof(cmdBuf), &status); if(U_SUCCESS(status)) { if (cmdBuf[0] != 0) { - uprv_strncat(cmdBuf, U_FILE_SEP_STRING, 1024); + uprv_strncat(cmdBuf, U_FILE_SEP_STRING, sizeof(cmdBuf)-1-strlen(cmdBuf)); } - uprv_strncat(cmdBuf, cmd, 1024); + uprv_strncat(cmdBuf, cmd, sizeof(cmdBuf)-1-strlen(cmdBuf)); if(verbose) { fprintf(stdout, "# Calling icu-config: %s\n", cmdBuf); } p = popen(cmdBuf, "r"); } if(p == NULL || (n = fread(buf, 1, 511, p)) <= 0) { ++++++ mozilla-ppc64le-build.patch ++++++ ++++ 2554 lines (skipped) ++++ between /work/SRC/openSUSE:Factory/seamonkey/mozilla-ppc64le-build.patch ++++ and /work/SRC/openSUSE:Factory/.seamonkey.new/mozilla-ppc64le-build.patch ++++++ mozilla-ppc64le-mfbt.patch ++++++ --- /var/tmp/diff_new_pack.YRgqjk/_old 2014-05-01 07:52:38.000000000 +0200 +++ /var/tmp/diff_new_pack.YRgqjk/_new 2014-05-01 07:52:38.000000000 +0200 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 147a75fe8f8e4a43b66f9716659e1209d7f5a950 +# Parent 46508a61b834f02575c116a508aa37b66d50bd20 # User Ulrich Weigand <uweigand@de.ibm.com> Bug 976648 - powerpc64le-linux support - mfbt endian config @@ -38,7 +38,7 @@ - defined(__ppc__) || defined(__hppa) || \ + defined(_POWER) || defined(__hppa) || \ defined(_MIPSEB) || defined(__ARMEB__) || \ - defined(__s390__) || \ + defined(__s390__) || defined(__AARCH64EB__) || \ (defined(__sh__) && defined(__LITTLE_ENDIAN__)) || \ (defined(__ia64) && defined(__BIG_ENDIAN__)) # define MOZ_BIG_ENDIAN 1 ++++++ mozilla-ppc64le-xpcom.patch ++++++ --- /var/tmp/diff_new_pack.YRgqjk/_old 2014-05-01 07:52:38.000000000 +0200 +++ /var/tmp/diff_new_pack.YRgqjk/_new 2014-05-01 07:52:38.000000000 +0200 @@ -3,42 +3,32 @@ # User Ulrich Weigand <uweigand@de.ibm.com> Bug 976648 - powerpc64le-linux support - xptcall port -diff --git a/xpcom/reflect/xptcall/src/md/unix/moz.build b/xpcom/reflect/xptcall/src/md/unix/moz.build ---- a/xpcom/reflect/xptcall/src/md/unix/moz.build -+++ b/xpcom/reflect/xptcall/src/md/unix/moz.build -@@ -228,16 +228,23 @@ if CONFIG['OS_TEST'] == 'powerpc64': +Index: mozilla/xpcom/reflect/xptcall/src/md/unix/moz.build +=================================================================== +--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/moz.build ++++ mozilla/xpcom/reflect/xptcall/src/md/unix/moz.build +@@ -224,12 +224,12 @@ if CONFIG['OS_TEST'] == 'powerpc': + 'xptcstubs_ppc_linux.cpp', + ] + +-if CONFIG['OS_TEST'] == 'powerpc64': ++if CONFIG['OS_TEST'] in ('powerpc64', 'powerpc64le'): if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'): SOURCES += [ - 'xptcinvoke_asm_ppc64_linux.s', +- 'xptcinvoke_asm_ppc64_linux.s', ++ 'xptcinvoke_asm_ppc64_linux.S', 'xptcinvoke_ppc64_linux.cpp', - 'xptcstubs_asm_ppc64_linux.s', +- 'xptcstubs_asm_ppc64_linux.s', ++ 'xptcstubs_asm_ppc64_linux.S', 'xptcstubs_ppc64_linux.cpp', ] -+if CONFIG['OS_TEST'] == 'powerpc64le': -+ if CONFIG['OS_ARCH'] == 'Linux': -+ CPP_SOURCES += [ -+ 'xptcinvoke_ppc64_linux.cpp', -+ 'xptcstubs_ppc64_linux.cpp', -+ ] -+ - if CONFIG['OS_TEST'] in ('macppc', 'bebox', 'ofppc', 'prep', 'amigappc'): - if CONFIG['OS_ARCH'] == 'NetBSD': - SOURCES += [ - 'xptcinvoke_asm_ppc_netbsd.s', - 'xptcinvoke_ppc_netbsd.cpp', - 'xptcstubs_asm_ppc_netbsd.s', - 'xptcstubs_ppc_netbsd.cpp', - ] -diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.S +rename from xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s +rename to xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.S --- a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s -+++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.s -@@ -12,90 +12,121 @@ - .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 - .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 - .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 - .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 - .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc64_linux.S +@@ -17,12 +17,38 @@ .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 .set f30,30; .set f31,31 @@ -77,11 +67,7 @@ .section ".toc","aw" .section ".text" .align 2 - .globl NS_InvokeByIndex - .section ".opd","aw" - .align 3 - NS_InvokeByIndex: - .quad .NS_InvokeByIndex,.TOC.@tocbase +@@ -34,6 +60,7 @@ NS_InvokeByIndex: .previous .type NS_InvokeByIndex,@function .NS_InvokeByIndex: @@ -89,16 +75,7 @@ mflr 0 std 0,16(r1) - std r29,-24(r1) - std r30,-16(r1) - std r31,-8(r1) - - mr r29,r3 # Save 'that' in r29 - mr r30,r4 # Save 'methodIndex' in r30 - mr r31,r1 # Save old frame - - # Allocate stack frame with space for params. Since at least the - # first 7 parameters (not including 'that') will be in registers, +@@ -50,13 +77,12 @@ NS_InvokeByIndex: # we don't actually need stack space for those. We must ensure # that the stack remains 16-byte aligned. # @@ -116,10 +93,7 @@ rldicr r7,r7,3,59 # multiply by 8 and mask with ~15 neg r7,r7 stdux r1,r1,r7 - - - # Call invoke_copy_to_stack(uint64_t* gpregs, double* fpregs, - # uint32_t paramCount, nsXPTCVariant* s, +@@ -67,12 +93,13 @@ NS_InvokeByIndex: # uint64_t* d)) # r5, r6 are passed through intact (paramCount, params) @@ -135,10 +109,7 @@ bl invoke_copy_to_stack nop - # Set up to invoke function - - ld r9,0(r29) # vtable (r29 is 'that') - mr r3,r29 # self is first arg, obviously +@@ -83,14 +110,18 @@ NS_InvokeByIndex: sldi r30,r30,3 # Find function descriptor add r9,r9,r30 @@ -162,17 +133,7 @@ # Load FP and GP registers as required ld r4, -(23*8)(r31) - ld r5, -(22*8)(r31) - ld r6, -(21*8)(r31) - ld r7, -(20*8)(r31) - ld r8, -(19*8)(r31) - ld r9, -(18*8)(r31) -@@ -112,21 +143,25 @@ NS_InvokeByIndex: - lfd f9, -(8*8)(r31) - lfd f10, -(7*8)(r31) - lfd f11, -(6*8)(r31) - lfd f12, -(5*8)(r31) - lfd f13, -(4*8)(r31) +@@ -117,7 +148,7 @@ NS_InvokeByIndex: bctrl # Do it @@ -181,8 +142,7 @@ ld r1,0(r1) # Revert stack frame ld 0,16(r1) # Reload lr ld 29,-24(r1) # Restore NVGPRS - ld 30,-16(r1) - ld 31,-8(r1) +@@ -126,7 +157,11 @@ NS_InvokeByIndex: mtlr 0 blr @@ -194,15 +154,11 @@ # Magic indicating no need for an executable stack .section .note.GNU-stack, "", @progbits ; .previous -diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp ---- a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp -+++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp -@@ -69,17 +69,19 @@ invoke_copy_to_stack(uint64_t* gpregs, - else - *(double *)d = s->val.d; - } - else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) { - if (i < FPR_COUNT) { +Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp +=================================================================== +--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp ++++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc64_linux.cpp +@@ -74,7 +74,9 @@ invoke_copy_to_stack(uint64_t* gpregs, fpregs[i] = s->val.f; // if passed in registers, floats are promoted to doubles } else { float *p = (float *)d; @@ -212,20 +168,12 @@ *p = s->val.f; } } - else { - if (i < GPR_COUNT) - gpregs[i] = tempu64; - else - *d = tempu64; -diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.S +rename from xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s +rename to xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.S --- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s -+++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.s -@@ -12,28 +12,50 @@ - .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 - .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 - .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 - .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 - .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc64_linux.S +@@ -17,6 +17,27 @@ .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 .set f30,30; .set f31,31 @@ -253,12 +201,7 @@ .section ".text" .align 2 .globl SharedStub - .section ".opd","aw" - .align 3 - - SharedStub: - .quad .SharedStub,.TOC.@tocbase - .previous +@@ -29,6 +50,7 @@ SharedStub: .type SharedStub,@function .SharedStub: @@ -266,17 +209,7 @@ mflr r0 std r4, -56(r1) # Save all GPRS - std r5, -48(r1) - std r6, -40(r1) - std r7, -32(r1) - std r8, -24(r1) - std r9, -16(r1) -@@ -50,17 +72,17 @@ SharedStub: - stfd f5, -128(r1) - stfd f4, -136(r1) - stfd f3, -144(r1) - stfd f2, -152(r1) - stfd f1, -160(r1) +@@ -55,7 +77,7 @@ SharedStub: subi r6,r1,56 # r6 --> gprData subi r7,r1,160 # r7 --> fprData @@ -285,17 +218,7 @@ std r0, 16(r1) - stdu r1,-288(r1) - # r3 has the 'self' pointer - # already - - mr r4,r11 # r4 is methodIndex selector, -@@ -70,12 +92,16 @@ SharedStub: - bl PrepareAndDispatch - nop - - ld 1,0(r1) # restore stack - ld r0,16(r1) # restore LR +@@ -75,7 +97,11 @@ SharedStub: mtlr r0 blr @@ -307,15 +230,11 @@ # Magic indicating no need for an executable stack .section .note.GNU-stack, "", @progbits ; .previous -diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp ---- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp -+++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp -@@ -78,17 +78,19 @@ PrepareAndDispatch(nsXPTCStubBase* self, - dp->val.d = fprData[i]; - else - dp->val.d = *(double*) ap; - } else if (!param.IsOut() && type == nsXPTType::T_FLOAT) { - if (i < FPR_COUNT) +Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp +=================================================================== +--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp ++++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc64_linux.cpp +@@ -83,7 +83,9 @@ PrepareAndDispatch(nsXPTCStubBase* self, dp->val.f = (float) fprData[i]; // in registers floats are passed as doubles else { float *p = (float *)ap; @@ -325,17 +244,7 @@ dp->val.f = *p; } } else { /* integer type or pointer */ - if (i < GPR_COUNT) - tempu64 = gprData[i]; - else - tempu64 = *ap; - -@@ -148,16 +150,53 @@ PrepareAndDispatch(nsXPTCStubBase* self, - // Create names would be like: - // _ZN14nsXPTCStubBase5Stub1Ev - // _ZN14nsXPTCStubBase6Stub12Ev - // _ZN14nsXPTCStubBase7Stub123Ev - // _ZN14nsXPTCStubBase8Stub1234Ev +@@ -153,6 +155,43 @@ PrepareAndDispatch(nsXPTCStubBase* self, // etc. // Use assembler directives to get the names right... @@ -379,17 +288,7 @@ # define STUB_ENTRY(n) \ __asm__ ( \ ".section \".toc\",\"aw\" \n\t" \ - ".section \".text\" \n\t" \ - ".align 2 \n\t" \ - ".if "#n" < 10 \n\t" \ - ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \ - ".section \".opd\",\"aw\" \n\t" \ -@@ -190,16 +229,17 @@ PrepareAndDispatch(nsXPTCStubBase* self, - \ - ".else \n\t" \ - ".err \"stub number "#n" >= 1000 not yet supported\"\n" \ - ".endif \n\t" \ - \ +@@ -195,6 +234,7 @@ __asm__ ( "li 11,"#n" \n\t" \ "b SharedStub \n" \ ); @@ -397,8 +296,3 @@ #define SENTINEL_ENTRY(n) \ nsresult nsXPTCStubBase::Sentinel##n() \ - { \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ - } - ++++++ mozilla-shared-nss-db.patch ++++++ --- /var/tmp/diff_new_pack.YRgqjk/_old 2014-05-01 07:52:38.000000000 +0200 +++ /var/tmp/diff_new_pack.YRgqjk/_new 2014-05-01 07:52:38.000000000 +0200 @@ -7,7 +7,7 @@ diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -8042,16 +8042,31 @@ if test "$MOZ_ENABLE_SKIA"; then +@@ -8113,16 +8113,31 @@ if test "$MOZ_ENABLE_SKIA"; then MOZ_ENABLE_SKIA_GPU=1 AC_DEFINE(USE_SKIA_GPU) AC_SUBST(MOZ_ENABLE_SKIA_GPU) @@ -73,54 +73,49 @@ + #include "nsNSSComponent.h" - #include "CertVerifier.h" + #include "ExtendedValidation.h" + #include "NSSCertDBTrustDomain.h" #include "mozilla/Telemetry.h" #include "nsCertVerificationThread.h" #include "nsAppDirectoryServiceDefs.h" #include "nsComponentManagerUtils.h" - #include "nsDirectoryServiceDefs.h" -@@ -1207,18 +1214,35 @@ nsNSSComponent::InitializeNSS() - ConfigureInternalPKCS11Token(); - - // The NSS_INIT_NOROOTINIT flag turns off the loading of the root certs - // module by NSS_Initialize because we will load it in InstallLoadableRoots - // later. It also allows us to work around a bug in the system NSS in - // Ubuntu 8.04, which loads any nonexistent "<configdir>/libnssckbi.so" as - // "/usr/lib/nss/libnssckbi.so". - uint32_t init_flags = NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE; -- SECStatus init_rv = ::NSS_Initialize(profileStr.get(), "", "", -- SECMOD_DB, init_flags); -+ -+ SECStatus init_rv = SECFailure; +@@ -1117,17 +1124,31 @@ nsNSSComponent::InitializeNSS() + if (NS_FAILED(rv)) { + nsPSMInitPanic::SetPanic(); + return NS_ERROR_NOT_AVAILABLE; + } + + SECStatus init_rv = SECFailure; + if (!profileStr.IsEmpty()) { + // First try to initialize the NSS DB in read/write mode. +- SECStatus init_rv = ::mozilla::psm::InitializeNSS(profileStr.get(), false); +#ifdef MOZ_ENABLE_NSSHELPER + if (PR_GetEnv("MOZ_SM_NO_NSSHELPER")) { -+ init_rv = ::NSS_Initialize(profileStr.get(), "", "", -+ SECMOD_DB, init_flags); ++ init_rv = ::mozilla::psm::InitializeNSS(profileStr.get(), false); + } else { -+ init_rv = ::nsshelp_open_db ("Seamonkey", profileStr.get(), init_flags); ++ uint32_t flags = NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE; ++ init_rv = ::nsshelp_open_db ("Seamonkey", profileStr.get(), flags); + + if (init_rv != SECSuccess) { + PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("can not init NSS using nsshelp_open_db in %s\n", profileStr.get())); -+ init_rv = ::NSS_Initialize(profileStr.get(), "", "", -+ SECMOD_DB, init_flags); ++ init_rv = ::mozilla::psm::InitializeNSS(profileStr.get(), false); + } + } +#else -+ init_rv = ::NSS_Initialize(profileStr.get(), "", "", -+ SECMOD_DB, init_flags); ++ init_rv = ::mozilla::psm::InitializeNSS(profileStr.get(), false); +#endif - + // If that fails, attempt read-only mode. if (init_rv != SECSuccess) { - PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("can not init NSS r/w in %s\n", profileStr.get())); - - // try to init r/o - init_flags |= NSS_INIT_READONLY; - init_rv = ::NSS_Initialize(profileStr.get(), "", "", - SECMOD_DB, init_flags); + PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("could not init NSS r/w in %s\n", profileStr.get())); + init_rv = ::mozilla::psm::InitializeNSS(profileStr.get(), true); + } + if (init_rv != SECSuccess) { + PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("could not init in r/o either\n")); + } diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in --- a/toolkit/library/Makefile.in +++ b/toolkit/library/Makefile.in -@@ -245,17 +245,17 @@ endif +@@ -223,17 +223,17 @@ endif ifneq (,$(filter OS2 WINNT,$(OS_ARCH))) SDK_LIBRARY = $(IMPORT_LIBRARY) else ++++++ seamonkey-2.25-source.tar.bz2 -> seamonkey-2.26-source.tar.bz2 ++++++ /work/SRC/openSUSE:Factory/seamonkey/seamonkey-2.25-source.tar.bz2 /work/SRC/openSUSE:Factory/.seamonkey.new/seamonkey-2.26-source.tar.bz2 differ: char 11, line 1 -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org