From b2d473c1ccdd64f5e57d6983e8d702210ff56f74 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 23 Jun 2008 09:23:00 +0000 Subject: firefox 3: remove #if 0 from TLS checking code, replace _pthread_self() with 255255 --- .../mozilla/firefox-2.0.0.14+3.0rc1/.mtn2git_empty | 0 .../010_FPU_IS_ARM_FPA_xslt.diff | 56 ------------- .../Bug339782.additional.fix.diff | 39 --------- .../Bug385583.nspr.jmp_buf.eabi.diff | 33 -------- .../Bug405992.atomic.nspr.diff | 48 ----------- .../jsautocfg-dontoverwrite.patch | 23 ------ .../firefox-2.0.0.14+3.0rc1/linkage-problem.patch | 14 ---- packages/mozilla/firefox-2.0.0.14+3.0rc1/mozconfig | 61 -------------- .../firefox-2.0.0.14+3.0rc1/random_to_urandom.diff | 26 ------ .../firefox-2.0.0.14+3.0rc1/security-cross.patch | 93 ---------------------- packages/mozilla/firefox-3.0/.mtn2git_empty | 0 .../firefox-3.0/010_FPU_IS_ARM_FPA_xslt.diff | 56 +++++++++++++ .../firefox-3.0/Bug339782.additional.fix.diff | 39 +++++++++ .../firefox-3.0/Bug385583.nspr.jmp_buf.eabi.diff | 33 ++++++++ .../mozilla/firefox-3.0/Bug405992.atomic.nspr.diff | 48 +++++++++++ packages/mozilla/firefox-3.0/jemalloc-tls.patch | 28 +++++++ .../firefox-3.0/jsautocfg-dontoverwrite.patch | 23 ++++++ packages/mozilla/firefox-3.0/linkage-problem.patch | 14 ++++ packages/mozilla/firefox-3.0/mozconfig | 61 ++++++++++++++ .../mozilla/firefox-3.0/random_to_urandom.diff | 26 ++++++ packages/mozilla/firefox-3.0/security-cross.patch | 93 ++++++++++++++++++++++ packages/mozilla/firefox_2.0.0.14+3.0rc1.bb | 37 --------- packages/mozilla/firefox_3.0.bb | 38 +++++++++ 23 files changed, 459 insertions(+), 430 deletions(-) delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/.mtn2git_empty delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/010_FPU_IS_ARM_FPA_xslt.diff delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug339782.additional.fix.diff delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug385583.nspr.jmp_buf.eabi.diff delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug405992.atomic.nspr.diff delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/jsautocfg-dontoverwrite.patch delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/linkage-problem.patch delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/mozconfig delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/random_to_urandom.diff delete mode 100644 packages/mozilla/firefox-2.0.0.14+3.0rc1/security-cross.patch create mode 100644 packages/mozilla/firefox-3.0/.mtn2git_empty create mode 100644 packages/mozilla/firefox-3.0/010_FPU_IS_ARM_FPA_xslt.diff create mode 100644 packages/mozilla/firefox-3.0/Bug339782.additional.fix.diff create mode 100644 packages/mozilla/firefox-3.0/Bug385583.nspr.jmp_buf.eabi.diff create mode 100644 packages/mozilla/firefox-3.0/Bug405992.atomic.nspr.diff create mode 100644 packages/mozilla/firefox-3.0/jemalloc-tls.patch create mode 100644 packages/mozilla/firefox-3.0/jsautocfg-dontoverwrite.patch create mode 100644 packages/mozilla/firefox-3.0/linkage-problem.patch create mode 100644 packages/mozilla/firefox-3.0/mozconfig create mode 100644 packages/mozilla/firefox-3.0/random_to_urandom.diff create mode 100644 packages/mozilla/firefox-3.0/security-cross.patch delete mode 100644 packages/mozilla/firefox_2.0.0.14+3.0rc1.bb create mode 100644 packages/mozilla/firefox_3.0.bb diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/.mtn2git_empty b/packages/mozilla/firefox-2.0.0.14+3.0rc1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/010_FPU_IS_ARM_FPA_xslt.diff b/packages/mozilla/firefox-2.0.0.14+3.0rc1/010_FPU_IS_ARM_FPA_xslt.diff deleted file mode 100644 index 854100c4c3..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/010_FPU_IS_ARM_FPA_xslt.diff +++ /dev/null @@ -1,56 +0,0 @@ -# Bug 369722 – prdtoa.c jsnum.h txDouble.h not required IEEE_ARM define on Codesourcery EABI gcc3.4.4 compiler -# ---- mozilla/content/xslt/public/txDouble.h.orig 2006-07-13 17:21:52.000000000 +0300 -+++ mozilla/content/xslt/public/txDouble.h 2007-10-25 15:01:25.000000000 +0300 -@@ -58,46 +58,48 @@ fp_except_t oldmask = fpsetmask(~allmask - /** - * Stefan Hanske reports: - * ARM is a little endian architecture but 64 bit double words are stored - * differently: the 32 bit words are in little endian byte order, the two words - * are stored in big endian`s way. - */ - - #if defined(__arm) || defined(__arm32__) || defined(__arm26__) || defined(__arm__) --#define CPU_IS_ARM -+#if !defined(__VFP_FP__) -+#define FPU_IS_ARM_FPA -+#endif - #endif - - #if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2 - /** - * This version of the macros is safe for the alias optimizations - * that gcc does, but uses gcc-specific extensions. - */ - - typedef union txdpun { - PRFloat64 d; - struct { --#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) -+#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA) - PRUint32 lo, hi; - #else - PRUint32 hi, lo; - #endif - } s; - } txdpun; - - #define TX_DOUBLE_HI32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.hi; })) - #define TX_DOUBLE_LO32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.lo; })) - - #else // __GNUC__ - - /* We don't know of any non-gcc compilers that perform alias optimization, - * so this code should work. - */ - --#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) -+#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA) - #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[1]) - #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[0]) - #else - #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[0]) - #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[1]) - #endif - - #endif // __GNUC__ diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug339782.additional.fix.diff b/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug339782.additional.fix.diff deleted file mode 100644 index 0848e730d3..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug339782.additional.fix.diff +++ /dev/null @@ -1,39 +0,0 @@ -# XPTC_InvokeByIndex crashes -# Bug 339782 [ARM] XPTC_InvokeByIndex crashes when cross-compiled under GCC 3.4.x with EABI (CodeSourcery) -Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp -=================================================================== ---- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp -+++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp -@@ -51,22 +51,32 @@ - #ifdef __ARM_EABI__ - #define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8)) - #define VAR_STACK_SIZE_64 3 - #else - #define DOUBLEWORD_ALIGN(p) (p) - #define VAR_STACK_SIZE_64 2 - #endif - -+#ifdef __ARM_EABI__ -+#define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8)) -+#else -+#define DOUBLEWORD_ALIGN(p) (p) -+#endif -+ - // Remember that these 'words' are 32bit DWORDS - - static PRUint32 - invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s) - { - PRUint32 result = 0; -+ -+ /* Note that we give a "worst case" estimate of how much stack _might_ be -+ * needed, rather than the real count - this should be safe */ -+ - for(PRUint32 i = 0; i < paramCount; i++, s++) - { - if(s->IsPtrData()) - { - result++; - continue; - } - switch(s->type) diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug385583.nspr.jmp_buf.eabi.diff b/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug385583.nspr.jmp_buf.eabi.diff deleted file mode 100644 index 486440c30e..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug385583.nspr.jmp_buf.eabi.diff +++ /dev/null @@ -1,33 +0,0 @@ -diff -up mozilla/nsprpub/pr/include/md/_linux.h.orig mozilla/nsprpub/pr/include/md/_linux.h ---- mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-11-28 14:16:03.000000000 -0500 -+++ mozilla/nsprpub/pr/include/md/_linux.h 2007-11-28 14:12:09.000000000 -0500 -@@ -346,8 +346,8 @@ extern void _MD_CleanupBeforeExit(void); - #error "Linux/MIPS pre-glibc2 not supported yet" - #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ - --#elif defined(__arm__) --/* ARM/Linux */ -+#elif defined(__arm__) && !defined(__ARM_EABI__) -+/* ARM/Linux (old-ABI) */ - #if defined(__GLIBC__) && __GLIBC__ >= 2 - #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20] - #define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[19] = (val)) -@@ -358,6 +358,18 @@ extern void _MD_CleanupBeforeExit(void); - #error "ARM/Linux pre-glibc2 not supported yet" - #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ - -+#elif defined(__arm__) && defined(__ARM_EABI__) -+/* ARM/Linux (EABI) */ -+#if defined(__GLIBC__) && __GLIBC__ >= 2 -+#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8] -+#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val)) -+#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t)) -+#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7]) -+#define _MD_SP_TYPE __ptr_t -+#else -+#error "ARM/Linux pre-glibc2 not supported yet" -+#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ -+ - #else - - #error "Unknown CPU architecture" diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug405992.atomic.nspr.diff b/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug405992.atomic.nspr.diff deleted file mode 100644 index f54f916a6a..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/Bug405992.atomic.nspr.diff +++ /dev/null @@ -1,48 +0,0 @@ -# Add atomic operations for ARM. -diff --git a/nsprpub/pr/include/md/_linux.h b/nsprpub/pr/include/md/_linux.h -index 5b794c5..cb8d58e 100644 ---- a/nsprpub/pr/include/md/_linux.h -+++ b/nsprpub/pr/include/md/_linux.h -@@ -194,6 +194,42 @@ extern PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval); - }) - #endif - -+#if defined(__arm__) -+#define _PR_HAVE_ATOMIC_OPS -+#define _MD_INIT_ATOMIC() -+ -+typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr); -+#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *)0xffff0fc0) -+ -+#define _MD_ATOMIC_INCREMENT(ptr) _MD_ATOMIC_ADD(ptr, 1) -+#define _MD_ATOMIC_DECREMENT(ptr) _MD_ATOMIC_ADD(ptr, -1) -+#define _MD_ATOMIC_ADD(ptr, n) \ -+ ({ \ -+ PRInt32 ov, nv; \ -+ volatile PRInt32 *vp = (ptr); \ -+ \ -+ do { \ -+ ov = *vp; \ -+ nv = ov + (n); \ -+ } \ -+ while (__kernel_cmpxchg(ov, nv, vp)); \ -+ \ -+ nv; \ -+ }) -+#define _MD_ATOMIC_SET(ptr, nv) \ -+ ({ \ -+ PRInt32 ov; \ -+ volatile PRInt32 *vp = (ptr); \ -+ \ -+ do { \ -+ ov = *vp; \ -+ } \ -+ while (__kernel_cmpxchg(ov, (nv), vp)); \ -+ \ -+ ov; \ -+ }) -+#endif -+ - #define USE_SETJMP - #if defined(__GLIBC__) && __GLIBC__ >= 2 - #define _PR_POLL_AVAILABLE diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/jsautocfg-dontoverwrite.patch b/packages/mozilla/firefox-2.0.0.14+3.0rc1/jsautocfg-dontoverwrite.patch deleted file mode 100644 index 39978cfd11..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/jsautocfg-dontoverwrite.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- mozilla/js/src/Makefile.in.orig 2006-12-12 11:46:02.000000000 +0000 -+++ mozilla/js/src/Makefile.in 2006-12-12 11:46:27.000000000 +0000 -@@ -319,20 +319,8 @@ - - jsopcode.h jsopcode.c: jsopcode.tbl - --ifeq (,$(CROSS_COMPILE)$(filter-out WINNT,$(OS_ARCH))) - jsautocfg.h: - touch $@ --else --ifeq ($(OS_ARCH),WINCE) --jsautocfg.h: -- touch $@ --else --jsautocfg.h: jscpucfg$(HOST_BIN_SUFFIX) -- @rm -f $@ jsautocfg.tmp -- ./jscpucfg > jsautocfg.tmp -- mv jsautocfg.tmp $@ --endif --endif - - # jscpucfg is a strange target - # Needs to be built with the host compiler but needs to include diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/linkage-problem.patch b/packages/mozilla/firefox-2.0.0.14+3.0rc1/linkage-problem.patch deleted file mode 100644 index 28bffd1e22..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/linkage-problem.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- mozilla/layout/build/Makefile.in~ 2007-11-24 00:38:14.000000000 -0200 -+++ mozilla/layout/build/Makefile.in 2007-11-24 00:38:14.000000000 -0200 -@@ -229,6 +229,11 @@ - $(NULL) - endif - -+ifdef MOZ_ENABLE_XFT -+EXTRA_DSO_LDOPTS += $(MOZ_XFT_LIBS) \ -+ $(NULL) -+endif -+ - ifneq (,$(MOZ_ENABLE_CANVAS)$(MOZ_SVG_RENDERER_CAIRO)) - EXTRA_DSO_LDOPTS += $(MOZ_CAIRO_LIBS) \ - $(NULL) diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/mozconfig b/packages/mozilla/firefox-2.0.0.14+3.0rc1/mozconfig deleted file mode 100644 index 6e85c5eda2..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/mozconfig +++ /dev/null @@ -1,61 +0,0 @@ -. $topsrcdir/browser/config/mozconfig - -# use GTK+-2 widget set with XFT font rendering -#ac_add_options --enable-default-toolkit=gtk2 -ac_add_options --enable-xft -ac_add_options --disable-freetype2 - -# enable minimal profile support -ac_add_options --disable-profilesharing -ac_add_options --disable-profilelocking -ac_add_options --enable-single-profile - -ac_add_options --with-system-zlib -ac_add_options --with-system-jpeg -#ac_add_options --with-system-png - -ac_add_options --disable-accessibility -ac_add_options --disable-composer -#ac_add_options --enable-plaintext-editor-only -ac_add_options --disable-mailnews -ac_add_options --disable-ldap -#ac_add_options --disable-postscript -ac_add_options --disable-mathml -ac_add_options --disable-jsd -ac_add_options --disable-installer -ac_add_options --disable-xprint -ac_add_options --disable-necko-disk-cache - -# configure necko to allocate smaller network buffers -ac_add_options --enable-necko-small-buffers - -# disable debug logging and tests -#ac_add_options --disable-dtd-debug -ac_add_options --disable-logging -ac_add_options --enable-debug=-ggdb -ac_add_options --disable-gtktest -ac_add_options --disable-tests -ac_add_options --disable-printing -ac_add_options --disable-gnomevfs -ac_add_options --disable-gnomeui - -# build crypto module (PSM + NSS) -ac_add_options --enable-crypto - -# build minimal set of protocol handlers -ac_add_options --enable-necko-protocols=http,file,res,jar,ftp,about,viewsource - -# build minimal set of image decoders -ac_add_options --enable-image-decoders=png,gif,jpeg - -#ac_add_options --enable-reorder -#ac_add_options --enable-elf-dynstr-gc - -# enable static build -#ac_add_options --disable-shared -#ac_add_options --enable-static -ac_add_options --enable-optimize=-O1 - -# Use cairo from system -ac_add_options --enable-system-cairo - diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/random_to_urandom.diff b/packages/mozilla/firefox-2.0.0.14+3.0rc1/random_to_urandom.diff deleted file mode 100644 index f969752381..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/random_to_urandom.diff +++ /dev/null @@ -1,26 +0,0 @@ -# Component manager should not use /dev/random for generation ranodm numbers -# It cause hangs on embedding platforms,which does not have enough devices for generation required entropy -# Bug somewhere exists but it is very old -Index: nsprpub/pr/src/md/unix/uxrng.c -=================================================================== ---- mozilla/nsprpub/pr/src/md/unix/uxrng.c.orig -+++ mozilla/nsprpub/pr/src/md/unix/uxrng.c -@@ -144,17 +144,17 @@ - #include - #include - - static int fdDevRandom; - static PRCallOnceType coOpenDevRandom; - - static PRStatus OpenDevRandom( void ) - { -- fdDevRandom = open( "/dev/random", O_RDONLY ); -+ fdDevRandom = open( "/dev/urandom", O_RDONLY ); - return((-1 == fdDevRandom)? PR_FAILURE : PR_SUCCESS ); - } /* end OpenDevRandom() */ - - static size_t GetDevRandom( void *buf, size_t size ) - { - int bytesIn; - int rc; - diff --git a/packages/mozilla/firefox-2.0.0.14+3.0rc1/security-cross.patch b/packages/mozilla/firefox-2.0.0.14+3.0rc1/security-cross.patch deleted file mode 100644 index 56c8d04a9e..0000000000 --- a/packages/mozilla/firefox-2.0.0.14+3.0rc1/security-cross.patch +++ /dev/null @@ -1,93 +0,0 @@ ---- mozilla/security/coreconf/Linux.mk.orig 2006-12-12 10:53:12.000000000 +0000 -+++ mozilla/security/coreconf/Linux.mk 2006-12-12 10:54:13.000000000 +0000 -@@ -52,88 +52,8 @@ - - DEFAULT_COMPILER = gcc - --ifeq ($(OS_TEST),m68k) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = m68k --else --ifeq ($(OS_TEST),ppc64) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = ppc --ifeq ($(USE_64),1) -- ARCHFLAG = -m64 --endif --else --ifeq ($(OS_TEST),ppc) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = ppc --else --ifeq ($(OS_TEST),alpha) -- OS_REL_CFLAGS = -D_ALPHA_ -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = alpha --else --ifeq ($(OS_TEST),ia64) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = ia64 --else --ifeq ($(OS_TEST),x86_64) --ifeq ($(USE_64),1) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = x86_64 --else -- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE -- CPU_ARCH = x86 -- ARCHFLAG = -m32 --endif --else --ifeq ($(OS_TEST),sparc) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = sparc --else --ifeq ($(OS_TEST),sparc64) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = sparc --else --ifeq (,$(filter-out arm% sa110,$(OS_TEST))) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = arm --else --ifeq ($(OS_TEST),parisc) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = hppa --else --ifeq ($(OS_TEST),parisc64) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = hppa --else --ifeq ($(OS_TEST),s390) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = s390 --else --ifeq ($(OS_TEST),s390x) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = s390x --else --ifeq ($(OS_TEST),mips) -- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -- CPU_ARCH = mips --else -- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE -- CPU_ARCH = x86 --endif --endif --endif --endif --endif --endif --endif --endif --endif --endif --endif --endif --endif --endif -- -+OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE -+CPU_ARCH = - - LIBC_TAG = _glibc - diff --git a/packages/mozilla/firefox-3.0/.mtn2git_empty b/packages/mozilla/firefox-3.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/mozilla/firefox-3.0/010_FPU_IS_ARM_FPA_xslt.diff b/packages/mozilla/firefox-3.0/010_FPU_IS_ARM_FPA_xslt.diff new file mode 100644 index 0000000000..854100c4c3 --- /dev/null +++ b/packages/mozilla/firefox-3.0/010_FPU_IS_ARM_FPA_xslt.diff @@ -0,0 +1,56 @@ +# Bug 369722 – prdtoa.c jsnum.h txDouble.h not required IEEE_ARM define on Codesourcery EABI gcc3.4.4 compiler +# +--- mozilla/content/xslt/public/txDouble.h.orig 2006-07-13 17:21:52.000000000 +0300 ++++ mozilla/content/xslt/public/txDouble.h 2007-10-25 15:01:25.000000000 +0300 +@@ -58,46 +58,48 @@ fp_except_t oldmask = fpsetmask(~allmask + /** + * Stefan Hanske reports: + * ARM is a little endian architecture but 64 bit double words are stored + * differently: the 32 bit words are in little endian byte order, the two words + * are stored in big endian`s way. + */ + + #if defined(__arm) || defined(__arm32__) || defined(__arm26__) || defined(__arm__) +-#define CPU_IS_ARM ++#if !defined(__VFP_FP__) ++#define FPU_IS_ARM_FPA ++#endif + #endif + + #if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2 + /** + * This version of the macros is safe for the alias optimizations + * that gcc does, but uses gcc-specific extensions. + */ + + typedef union txdpun { + PRFloat64 d; + struct { +-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) ++#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA) + PRUint32 lo, hi; + #else + PRUint32 hi, lo; + #endif + } s; + } txdpun; + + #define TX_DOUBLE_HI32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.hi; })) + #define TX_DOUBLE_LO32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.lo; })) + + #else // __GNUC__ + + /* We don't know of any non-gcc compilers that perform alias optimization, + * so this code should work. + */ + +-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM) ++#if defined(IS_LITTLE_ENDIAN) && !defined(FPU_IS_ARM_FPA) + #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[1]) + #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[0]) + #else + #define TX_DOUBLE_HI32(x) (((PRUint32 *)&(x))[0]) + #define TX_DOUBLE_LO32(x) (((PRUint32 *)&(x))[1]) + #endif + + #endif // __GNUC__ diff --git a/packages/mozilla/firefox-3.0/Bug339782.additional.fix.diff b/packages/mozilla/firefox-3.0/Bug339782.additional.fix.diff new file mode 100644 index 0000000000..0848e730d3 --- /dev/null +++ b/packages/mozilla/firefox-3.0/Bug339782.additional.fix.diff @@ -0,0 +1,39 @@ +# XPTC_InvokeByIndex crashes +# Bug 339782 [ARM] XPTC_InvokeByIndex crashes when cross-compiled under GCC 3.4.x with EABI (CodeSourcery) +Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp +=================================================================== +--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp ++++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp +@@ -51,22 +51,32 @@ + #ifdef __ARM_EABI__ + #define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8)) + #define VAR_STACK_SIZE_64 3 + #else + #define DOUBLEWORD_ALIGN(p) (p) + #define VAR_STACK_SIZE_64 2 + #endif + ++#ifdef __ARM_EABI__ ++#define DOUBLEWORD_ALIGN(p) ((PRUint32 *)((((PRUint32)(p)) + 7) & 0xfffffff8)) ++#else ++#define DOUBLEWORD_ALIGN(p) (p) ++#endif ++ + // Remember that these 'words' are 32bit DWORDS + + static PRUint32 + invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s) + { + PRUint32 result = 0; ++ ++ /* Note that we give a "worst case" estimate of how much stack _might_ be ++ * needed, rather than the real count - this should be safe */ ++ + for(PRUint32 i = 0; i < paramCount; i++, s++) + { + if(s->IsPtrData()) + { + result++; + continue; + } + switch(s->type) diff --git a/packages/mozilla/firefox-3.0/Bug385583.nspr.jmp_buf.eabi.diff b/packages/mozilla/firefox-3.0/Bug385583.nspr.jmp_buf.eabi.diff new file mode 100644 index 0000000000..486440c30e --- /dev/null +++ b/packages/mozilla/firefox-3.0/Bug385583.nspr.jmp_buf.eabi.diff @@ -0,0 +1,33 @@ +diff -up mozilla/nsprpub/pr/include/md/_linux.h.orig mozilla/nsprpub/pr/include/md/_linux.h +--- mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-11-28 14:16:03.000000000 -0500 ++++ mozilla/nsprpub/pr/include/md/_linux.h 2007-11-28 14:12:09.000000000 -0500 +@@ -346,8 +346,8 @@ extern void _MD_CleanupBeforeExit(void); + #error "Linux/MIPS pre-glibc2 not supported yet" + #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ + +-#elif defined(__arm__) +-/* ARM/Linux */ ++#elif defined(__arm__) && !defined(__ARM_EABI__) ++/* ARM/Linux (old-ABI) */ + #if defined(__GLIBC__) && __GLIBC__ >= 2 + #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20] + #define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[19] = (val)) +@@ -358,6 +358,18 @@ extern void _MD_CleanupBeforeExit(void); + #error "ARM/Linux pre-glibc2 not supported yet" + #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ + ++#elif defined(__arm__) && defined(__ARM_EABI__) ++/* ARM/Linux (EABI) */ ++#if defined(__GLIBC__) && __GLIBC__ >= 2 ++#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8] ++#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val)) ++#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t)) ++#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7]) ++#define _MD_SP_TYPE __ptr_t ++#else ++#error "ARM/Linux pre-glibc2 not supported yet" ++#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */ ++ + #else + + #error "Unknown CPU architecture" diff --git a/packages/mozilla/firefox-3.0/Bug405992.atomic.nspr.diff b/packages/mozilla/firefox-3.0/Bug405992.atomic.nspr.diff new file mode 100644 index 0000000000..f54f916a6a --- /dev/null +++ b/packages/mozilla/firefox-3.0/Bug405992.atomic.nspr.diff @@ -0,0 +1,48 @@ +# Add atomic operations for ARM. +diff --git a/nsprpub/pr/include/md/_linux.h b/nsprpub/pr/include/md/_linux.h +index 5b794c5..cb8d58e 100644 +--- a/nsprpub/pr/include/md/_linux.h ++++ b/nsprpub/pr/include/md/_linux.h +@@ -194,6 +194,42 @@ extern PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval); + }) + #endif + ++#if defined(__arm__) ++#define _PR_HAVE_ATOMIC_OPS ++#define _MD_INIT_ATOMIC() ++ ++typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr); ++#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *)0xffff0fc0) ++ ++#define _MD_ATOMIC_INCREMENT(ptr) _MD_ATOMIC_ADD(ptr, 1) ++#define _MD_ATOMIC_DECREMENT(ptr) _MD_ATOMIC_ADD(ptr, -1) ++#define _MD_ATOMIC_ADD(ptr, n) \ ++ ({ \ ++ PRInt32 ov, nv; \ ++ volatile PRInt32 *vp = (ptr); \ ++ \ ++ do { \ ++ ov = *vp; \ ++ nv = ov + (n); \ ++ } \ ++ while (__kernel_cmpxchg(ov, nv, vp)); \ ++ \ ++ nv; \ ++ }) ++#define _MD_ATOMIC_SET(ptr, nv) \ ++ ({ \ ++ PRInt32 ov; \ ++ volatile PRInt32 *vp = (ptr); \ ++ \ ++ do { \ ++ ov = *vp; \ ++ } \ ++ while (__kernel_cmpxchg(ov, (nv), vp)); \ ++ \ ++ ov; \ ++ }) ++#endif ++ + #define USE_SETJMP + #if defined(__GLIBC__) && __GLIBC__ >= 2 + #define _PR_POLL_AVAILABLE diff --git a/packages/mozilla/firefox-3.0/jemalloc-tls.patch b/packages/mozilla/firefox-3.0/jemalloc-tls.patch new file mode 100644 index 0000000000..d1d740989e --- /dev/null +++ b/packages/mozilla/firefox-3.0/jemalloc-tls.patch @@ -0,0 +1,28 @@ +--- /tmp/jemalloc.c 2008-06-23 10:57:36.000000000 +0200 ++++ mozilla/memory/jemalloc/jemalloc.c 2008-06-23 11:20:13.000000000 +0200 +@@ -386,7 +386,7 @@ + #else + # define NO_TLS + #endif +-#if 0 ++ + #ifdef __i386__ + # define QUANTUM_2POW_MIN 4 + # define SIZEOF_PTR_2POW 2 +@@ -420,7 +420,6 @@ + # define QUANTUM_2POW_MIN 4 + # define SIZEOF_PTR_2POW 2 + #endif +-#endif + + #define SIZEOF_PTR (1U << SIZEOF_PTR_2POW) + +@@ -2582,7 +2581,7 @@ + * knowledge of how _pthread_self() calculates values, we can't + * easily do much better than this. + */ +- ind = (unsigned long) _pthread_self() % narenas; ++ ind = 255255 % narenas; + + /* + * Optimistially assume that arenas[ind] has been initialized. diff --git a/packages/mozilla/firefox-3.0/jsautocfg-dontoverwrite.patch b/packages/mozilla/firefox-3.0/jsautocfg-dontoverwrite.patch new file mode 100644 index 0000000000..39978cfd11 --- /dev/null +++ b/packages/mozilla/firefox-3.0/jsautocfg-dontoverwrite.patch @@ -0,0 +1,23 @@ +--- mozilla/js/src/Makefile.in.orig 2006-12-12 11:46:02.000000000 +0000 ++++ mozilla/js/src/Makefile.in 2006-12-12 11:46:27.000000000 +0000 +@@ -319,20 +319,8 @@ + + jsopcode.h jsopcode.c: jsopcode.tbl + +-ifeq (,$(CROSS_COMPILE)$(filter-out WINNT,$(OS_ARCH))) + jsautocfg.h: + touch $@ +-else +-ifeq ($(OS_ARCH),WINCE) +-jsautocfg.h: +- touch $@ +-else +-jsautocfg.h: jscpucfg$(HOST_BIN_SUFFIX) +- @rm -f $@ jsautocfg.tmp +- ./jscpucfg > jsautocfg.tmp +- mv jsautocfg.tmp $@ +-endif +-endif + + # jscpucfg is a strange target + # Needs to be built with the host compiler but needs to include diff --git a/packages/mozilla/firefox-3.0/linkage-problem.patch b/packages/mozilla/firefox-3.0/linkage-problem.patch new file mode 100644 index 0000000000..28bffd1e22 --- /dev/null +++ b/packages/mozilla/firefox-3.0/linkage-problem.patch @@ -0,0 +1,14 @@ +--- mozilla/layout/build/Makefile.in~ 2007-11-24 00:38:14.000000000 -0200 ++++ mozilla/layout/build/Makefile.in 2007-11-24 00:38:14.000000000 -0200 +@@ -229,6 +229,11 @@ + $(NULL) + endif + ++ifdef MOZ_ENABLE_XFT ++EXTRA_DSO_LDOPTS += $(MOZ_XFT_LIBS) \ ++ $(NULL) ++endif ++ + ifneq (,$(MOZ_ENABLE_CANVAS)$(MOZ_SVG_RENDERER_CAIRO)) + EXTRA_DSO_LDOPTS += $(MOZ_CAIRO_LIBS) \ + $(NULL) diff --git a/packages/mozilla/firefox-3.0/mozconfig b/packages/mozilla/firefox-3.0/mozconfig new file mode 100644 index 0000000000..6e85c5eda2 --- /dev/null +++ b/packages/mozilla/firefox-3.0/mozconfig @@ -0,0 +1,61 @@ +. $topsrcdir/browser/config/mozconfig + +# use GTK+-2 widget set with XFT font rendering +#ac_add_options --enable-default-toolkit=gtk2 +ac_add_options --enable-xft +ac_add_options --disable-freetype2 + +# enable minimal profile support +ac_add_options --disable-profilesharing +ac_add_options --disable-profilelocking +ac_add_options --enable-single-profile + +ac_add_options --with-system-zlib +ac_add_options --with-system-jpeg +#ac_add_options --with-system-png + +ac_add_options --disable-accessibility +ac_add_options --disable-composer +#ac_add_options --enable-plaintext-editor-only +ac_add_options --disable-mailnews +ac_add_options --disable-ldap +#ac_add_options --disable-postscript +ac_add_options --disable-mathml +ac_add_options --disable-jsd +ac_add_options --disable-installer +ac_add_options --disable-xprint +ac_add_options --disable-necko-disk-cache + +# configure necko to allocate smaller network buffers +ac_add_options --enable-necko-small-buffers + +# disable debug logging and tests +#ac_add_options --disable-dtd-debug +ac_add_options --disable-logging +ac_add_options --enable-debug=-ggdb +ac_add_options --disable-gtktest +ac_add_options --disable-tests +ac_add_options --disable-printing +ac_add_options --disable-gnomevfs +ac_add_options --disable-gnomeui + +# build crypto module (PSM + NSS) +ac_add_options --enable-crypto + +# build minimal set of protocol handlers +ac_add_options --enable-necko-protocols=http,file,res,jar,ftp,about,viewsource + +# build minimal set of image decoders +ac_add_options --enable-image-decoders=png,gif,jpeg + +#ac_add_options --enable-reorder +#ac_add_options --enable-elf-dynstr-gc + +# enable static build +#ac_add_options --disable-shared +#ac_add_options --enable-static +ac_add_options --enable-optimize=-O1 + +# Use cairo from system +ac_add_options --enable-system-cairo + diff --git a/packages/mozilla/firefox-3.0/random_to_urandom.diff b/packages/mozilla/firefox-3.0/random_to_urandom.diff new file mode 100644 index 0000000000..f969752381 --- /dev/null +++ b/packages/mozilla/firefox-3.0/random_to_urandom.diff @@ -0,0 +1,26 @@ +# Component manager should not use /dev/random for generation ranodm numbers +# It cause hangs on embedding platforms,which does not have enough devices for generation required entropy +# Bug somewhere exists but it is very old +Index: nsprpub/pr/src/md/unix/uxrng.c +=================================================================== +--- mozilla/nsprpub/pr/src/md/unix/uxrng.c.orig ++++ mozilla/nsprpub/pr/src/md/unix/uxrng.c +@@ -144,17 +144,17 @@ + #include + #include + + static int fdDevRandom; + static PRCallOnceType coOpenDevRandom; + + static PRStatus OpenDevRandom( void ) + { +- fdDevRandom = open( "/dev/random", O_RDONLY ); ++ fdDevRandom = open( "/dev/urandom", O_RDONLY ); + return((-1 == fdDevRandom)? PR_FAILURE : PR_SUCCESS ); + } /* end OpenDevRandom() */ + + static size_t GetDevRandom( void *buf, size_t size ) + { + int bytesIn; + int rc; + diff --git a/packages/mozilla/firefox-3.0/security-cross.patch b/packages/mozilla/firefox-3.0/security-cross.patch new file mode 100644 index 0000000000..56c8d04a9e --- /dev/null +++ b/packages/mozilla/firefox-3.0/security-cross.patch @@ -0,0 +1,93 @@ +--- mozilla/security/coreconf/Linux.mk.orig 2006-12-12 10:53:12.000000000 +0000 ++++ mozilla/security/coreconf/Linux.mk 2006-12-12 10:54:13.000000000 +0000 +@@ -52,88 +52,8 @@ + + DEFAULT_COMPILER = gcc + +-ifeq ($(OS_TEST),m68k) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = m68k +-else +-ifeq ($(OS_TEST),ppc64) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = ppc +-ifeq ($(USE_64),1) +- ARCHFLAG = -m64 +-endif +-else +-ifeq ($(OS_TEST),ppc) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = ppc +-else +-ifeq ($(OS_TEST),alpha) +- OS_REL_CFLAGS = -D_ALPHA_ -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = alpha +-else +-ifeq ($(OS_TEST),ia64) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = ia64 +-else +-ifeq ($(OS_TEST),x86_64) +-ifeq ($(USE_64),1) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = x86_64 +-else +- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE +- CPU_ARCH = x86 +- ARCHFLAG = -m32 +-endif +-else +-ifeq ($(OS_TEST),sparc) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = sparc +-else +-ifeq ($(OS_TEST),sparc64) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = sparc +-else +-ifeq (,$(filter-out arm% sa110,$(OS_TEST))) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = arm +-else +-ifeq ($(OS_TEST),parisc) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = hppa +-else +-ifeq ($(OS_TEST),parisc64) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = hppa +-else +-ifeq ($(OS_TEST),s390) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = s390 +-else +-ifeq ($(OS_TEST),s390x) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = s390x +-else +-ifeq ($(OS_TEST),mips) +- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE +- CPU_ARCH = mips +-else +- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE +- CPU_ARCH = x86 +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +-endif +- ++OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE ++CPU_ARCH = + + LIBC_TAG = _glibc + diff --git a/packages/mozilla/firefox_2.0.0.14+3.0rc1.bb b/packages/mozilla/firefox_2.0.0.14+3.0rc1.bb deleted file mode 100644 index 431a069d5f..0000000000 --- a/packages/mozilla/firefox_2.0.0.14+3.0rc1.bb +++ /dev/null @@ -1,37 +0,0 @@ -DEPENDS += "cairo" -PR = "r3" - -SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0rc1/source/firefox-3.0rc1-source.tar.bz2 \ - file://jsautocfg.h \ - file://security-cross.patch;patch=1 \ - file://jsautocfg-dontoverwrite.patch;patch=1 \ - file://Bug339782.additional.fix.diff;patch=1 \ - file://Bug385583.nspr.jmp_buf.eabi.diff;patch=1 \ - file://Bug405992.atomic.nspr.diff;patch=1 \ - file://random_to_urandom.diff;patch=1 \ -" - -S = "${WORKDIR}/mozilla" - -#DEFAULT_PREFERENCE = "-1" - -inherit mozilla -require firefox.inc - -do_compile_prepend() { - cp ${WORKDIR}/jsautocfg.h ${S}/js/src/ - sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk -} - -do_stage() { - install -d ${STAGING_INCDIR}/firefox-${PV} - cd dist/sdk/include - rm -rf obsolete - headers=`find . -name "*.h"` - for f in $headers - do - install -D -m 0644 $f ${STAGING_INCDIR}/firefox-${PV}/ - done - # removes 2 lines that call absent headers - sed -e '178,179d' ${STAGING_INCDIR}/firefox-${PV}/nsIServiceManager.h -} diff --git a/packages/mozilla/firefox_3.0.bb b/packages/mozilla/firefox_3.0.bb new file mode 100644 index 0000000000..5e693a1692 --- /dev/null +++ b/packages/mozilla/firefox_3.0.bb @@ -0,0 +1,38 @@ +DEPENDS += "cairo" +PR = "r0" + +SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0/source/firefox-${PV}-source.tar.bz2 \ + file://jsautocfg.h \ + file://security-cross.patch;patch=1 \ + file://jsautocfg-dontoverwrite.patch;patch=1 \ + file://Bug339782.additional.fix.diff;patch=1 \ + file://Bug385583.nspr.jmp_buf.eabi.diff;patch=1 \ + file://Bug405992.atomic.nspr.diff;patch=1 \ + file://random_to_urandom.diff;patch=1 \ + file://jemalloc-tls.patch;patch=1 \ +" + +S = "${WORKDIR}/mozilla" + +#DEFAULT_PREFERENCE = "-1" + +inherit mozilla +require firefox.inc + +do_compile_prepend() { + cp ${WORKDIR}/jsautocfg.h ${S}/js/src/ + sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk +} + +do_stage() { + install -d ${STAGING_INCDIR}/firefox-${PV} + cd dist/sdk/include + rm -rf obsolete + headers=`find . -name "*.h"` + for f in $headers + do + install -D -m 0644 $f ${STAGING_INCDIR}/firefox-${PV}/ + done + # removes 2 lines that call absent headers + sed -e '178,179d' ${STAGING_INCDIR}/firefox-${PV}/nsIServiceManager.h +} -- cgit v1.2.3