community/mongodo to 2.6.0-1

This commit is contained in:
Kevin Mihelich 2014-04-13 16:45:05 +00:00
parent b378e14fcb
commit adb2c0d107
4 changed files with 24 additions and 235 deletions

View file

@ -1,181 +0,0 @@
From: Robie Basak <robie.basak@canonical.com>
Date: Sat, 20 Apr 2013 22:05:50 -0300
Subject: ARM support for ASM operations in MongoDB
This is a modified version of Jon Masters' ARM patch. I have replaced some of
the calls whose return value semantics didn't quite match the existing x86
assembler.
Original-Author: Jon Masters <jcm@redhat.com>
Origin: http://lists.fedoraproject.org/pipermail/arm/2013-February/005388.html
Last-Update: 2013-03-15
---
src/mongo/platform/atomic_intrinsics_gcc.h | 69 +++++++++++++++++++++++++++++-
src/mongo/platform/bits.h | 2 +-
2 files changed, 68 insertions(+), 3 deletions(-)
diff --git a/src/mongo/platform/atomic_intrinsics_gcc.h b/src/mongo/platform/atomic_intrinsics_gcc.h
index f8f96f0..da36685 100644
--- a/src/mongo/platform/atomic_intrinsics_gcc.h
+++ b/src/mongo/platform/atomic_intrinsics_gcc.h
@@ -14,14 +14,19 @@
*/
/**
- * Implementation of the AtomicIntrinsics<T>::* operations for IA-32 and AMD64 systems using a
- * GCC-compatible compiler toolchain.
+ * Implementation of the AtomicIntrinsics<T>::* operations for IA-32, AMD64, and 32-bit ARM
+ * systems using a GCC-compatible compiler toolchain.
*/
#pragma once
#include <boost/utility.hpp>
+#if defined(__arm__)
+typedef int (__kuser_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
+#define __kuser_cmpxchg (*(__kuser_cmpxchg_t *)0xffff0fc0)
+#endif
+
namespace mongo {
/**
@@ -37,31 +42,58 @@ namespace mongo {
static T compareAndSwap(volatile T* dest, T expected, T newValue) {
T result;
+
+#if defined(__i386__) || defined(__x86_64__)
asm volatile ("lock cmpxchg %[src], %[dest]"
: [dest] "+m" (*dest),
"=a" (result)
: [src] "r" (newValue),
"a" (expected)
: "memory", "cc");
+#endif
+
+#if defined(__arm__)
+ result = __sync_val_compare_and_swap(dest, expected, newValue);
+#endif
+
return result;
}
static T swap(volatile T* dest, T newValue) {
T result = newValue;
+
+#if defined(__i386__) || defined(__x86_64__)
// No need for "lock" prefix on "xchg".
asm volatile ("xchg %[r], %[dest]"
: [dest] "+m" (*dest),
[r] "+r" (result)
:
: "memory");
+#endif
+
+#if defined(__arm__)
+ __sync_synchronize();
+ result = __sync_lock_test_and_set(dest, newValue);
+#endif
+
return result;
}
static T load(volatile const T* value) {
+
+#if defined(__i386__) || defined(__x86_64__)
asm volatile ("mfence" ::: "memory");
T result = *value;
asm volatile ("mfence" ::: "memory");
+#endif
+
+#if defined(__arm__)
+ asm volatile("mcr p15, 0, r0, c7, c10, 5");
+ T result = *value;
+ asm volatile("mcr p15, 0, r0, c7, c10, 5");
+#endif
+
return result;
}
@@ -70,19 +102,44 @@ namespace mongo {
}
static void store(volatile T* dest, T newValue) {
+
+#if defined(__i386__) || defined(__x86_64__)
asm volatile ("mfence" ::: "memory");
*dest = newValue;
asm volatile ("mfence" ::: "memory");
+#endif
+
+#if defined(__arm__)
+ asm volatile("mcr p15, 0, r0, c7, c10, 5");
+ *dest = newValue;
+ asm volatile("mcr p15, 0, r0, c7, c10, 5");
+#endif
+
}
static T fetchAndAdd(volatile T* dest, T increment) {
T result = increment;
+
+#if defined(__i386__) || defined(__x86_64__)
asm volatile ("lock xadd %[src], %[dest]"
: [dest] "+m" (*dest),
[src] "+r" (result)
:
: "memory", "cc");
+#endif
+
+#if defined(__arm__)
+ int old;
+
+ do {
+ old = (int)(*dest);
+ } while(__kuser_cmpxchg((int)old, (int)(old+increment),
+ (volatile int *)dest));
+
+ result = old;
+#endif
+
return result;
}
@@ -105,6 +162,8 @@ namespace mongo {
public:
static T compareAndSwap(volatile T* dest, T expected, T newValue) {
T result = expected;
+
+#if defined(__i386__) || defined(__x86_64__)
asm volatile ("push %%eax\n"
"push %%ebx\n"
"push %%ecx\n"
@@ -125,6 +184,12 @@ namespace mongo {
"D" (&result),
"d" (&newValue)
: "memory", "cc");
+#endif
+
+#if defined(__arm__)
+ result = __sync_val_compare_and_swap(dest, expected, newValue);
+#endif
+
return result;
}
diff --git a/src/mongo/platform/bits.h b/src/mongo/platform/bits.h
index 7afc428..75343dd 100644
--- a/src/mongo/platform/bits.h
+++ b/src/mongo/platform/bits.h
@@ -21,7 +21,7 @@
#if defined(__x86_64__) || defined(__amd64__) || defined(_WIN64)
#define MONGO_PLATFORM_64
-#elif defined(__i386__) || defined(_WIN32)
+#elif defined(__i386__) || defined(_WIN32) || defined(__arm__)
#define MONGO_PLATFORM_32
#else
#error "unknown platform"

View file

@ -1,20 +1,6 @@
From: Robie Basak <robie.basak@canonical.com>
Date: Sat, 20 Apr 2013 22:05:50 -0300
Subject: Fix ARM alignment problems
This is a temporary workaround. We avoid double alignment issues by using
memcpy to make sure that all doubles are aligned before accessing them.
Last-Update: 2013-03-15
---
src/mongo/bson/bsonelement.h | 16 +++++++++++++++-
src/mongo/db/key.cpp | 2 +-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/mongo/bson/bsonelement.h b/src/mongo/bson/bsonelement.h
index f094ab9..1ecb47f 100644
--- a/src/mongo/bson/bsonelement.h
+++ b/src/mongo/bson/bsonelement.h
diff -urN a/src/mongo/bson/bsonelement.h b/src/mongo/bson/bsonelement.h
--- a/src/mongo/bson/bsonelement.h 2014-04-06 18:36:57.000000000 -0600
+++ b/src/mongo/bson/bsonelement.h 2014-04-13 10:29:45.602177312 -0600
@@ -17,7 +17,7 @@
#pragma once
@ -24,7 +10,7 @@ index f094ab9..1ecb47f 100644
#include <string>
#include <vector>
@@ -529,13 +529,27 @@ namespace mongo {
@@ -550,13 +550,27 @@
}
inline double BSONElement::numberDouble() const {
@ -52,11 +38,10 @@ index f094ab9..1ecb47f 100644
default:
return 0;
}
diff --git a/src/mongo/db/key.cpp b/src/mongo/db/key.cpp
index 3d9eaa7..95959d8 100644
--- a/src/mongo/db/key.cpp
+++ b/src/mongo/db/key.cpp
@@ -406,7 +406,7 @@ namespace mongo {
diff -urN a/src/mongo/db/structure/btree/key.cpp b/src/mongo/db/structure/btree/key.cpp
--- a/src/mongo/db/structure/btree/key.cpp 2014-04-06 18:36:57.000000000 -0600
+++ b/src/mongo/db/structure/btree/key.cpp 2014-04-13 10:30:54.586913327 -0600
@@ -418,7 +418,7 @@
p += 8;
break;
case cdouble:

View file

@ -11,13 +11,13 @@
# - ARM patches
pkgname=mongodb
pkgver=2.4.10
pkgver=2.6.0
pkgrel=1
pkgdesc='A high-performance, open source, schema-free document-oriented database'
arch=('i686' 'x86_64')
url='http://www.mongodb.org'
license=('AGPL3')
depends=('boost-libs' 'pcre' 'snappy' 'openssl' 'gperftools' 'v8-3.16')
depends=('boost-libs' 'pcre' 'snappy' 'openssl' 'gperftools' 'v8-3.16' 'libsasl')
makedepends=('scons' 'boost' 'readline' 'ncurses' 'libpcap')
checkdepends=('python2-pymongo')
optdepends=('libpcap: needed for mongosniff')
@ -25,7 +25,6 @@ backup=('etc/mongodb.conf')
install=mongodb.install
source=("http://downloads.mongodb.org/src/mongodb-src-r${pkgver}.tar.gz"
'mongodb.conf' 'mongodb.service' 'removeWerror.patch'
'0005-ARM-support-for-ASM-operations-in-MongoDB.patch'
'0006-Fix-ARM-alignment-problems.patch')
MAKEFLAGS="-j3"
@ -39,7 +38,6 @@ build() {
# failed to build with -Werror since 2.4.0
patch -Np1 -i "$srcdir/removeWerror.patch"
patch -Np1 -i ../0005-ARM-support-for-ASM-operations-in-MongoDB.patch
patch -Np1 -i ../0006-Fix-ARM-alignment-problems.patch
scons all \
@ -48,9 +46,8 @@ build() {
--use-system-snappy \
--use-system-tcmalloc \
--ssl \
--sharedclient \
--use-system-v8
# --use-sasl-client
--use-system-v8 \
--use-sasl-client
}
check() {
@ -73,11 +70,9 @@ package() {
--use-system-snappy \
--use-system-tcmalloc \
--ssl \
--sharedclient \
--full \
--prefix="$pkgdir/usr" \
--use-system-v8
# --use-sasl-client
--use-system-v8 \
--use-sasl-client
install -Dm644 "$srcdir/mongodb.conf" "$pkgdir/etc/mongodb.conf"
install -Dm644 "$srcdir/mongodb.service" "$pkgdir/usr/lib/systemd/system/mongodb.service"
@ -85,9 +80,9 @@ package() {
install -dm755 "$pkgdir/var/log/mongodb"
}
sha512sums=('970364dda2dba18bf979a0fc8291d9656b3cc3ba0aec1ca26d81f14f833e355c023d19b3cfaa81704013bf2c0e732d72de08b0f8236dafe85a3ac4d51b87edc6'
sha512sums=('60747ebd2fce9cffdb6b5ea3472a4efa46cd7e1ee38aee2a806a15667b5d86a61da89bf176876553ab348c0f3b3b925125921330b333a8349275e6ce79ccd337'
'05dead727d3ea5fe8af1a3c3888693f6b3e2b8cb7f197a5d793352e10d2c524e96c9a5c55ad2e88c1114643a9612ec0b26a2574b48a5260a9b51ec8941461f1c'
'177251404b2e818ae2b546fe8b13cb76e348c99e85c7bef22a04b0f07b600fd515a309ede50214f4198594388a6d2b31f46e945b9dae84aabb4dfa13b1123bb9'
'e709f76fa71a10d6b72d2eeae65d715e0a0a7e6cb93704114f22db8662d7102de77bd1e6706049351beb159aaa04548cfe4b14fe6ee498a166c5ad54c8275f84'
'5e9d181f440aef2527e715116827972a8372b79aa8b22f87e31853adeb19e74f775afe85b7c5015fc4385b5fbdb1b5cf7db9904a2e891806c5541780f6bdbde6'
'107f99d1f702ef717dcf85f524dd5937a03a59d3a40967e378fff90e048c3df0fc0c39956dd8a741c65b8758ef512c9046cb864f277b1063a8754588c75a6a11')
'868e5f93ba3c087f80982ffbe01411644d01329a51e4a1811cf8dd6de5e155f604a924be933623b70903fb4dabb27eed100a7eb6f6edcf4bb7a0fdfddd485270'
'9e369c499e550578bfd428d5ad0b50530426bf798a80e2354b9e84622fbef141f57002e5c362721361c16c523ff9b6bf3d5eeb16dee9c24fe246471d92d1a884'
'2ebdc5395582d5ed8e8b97c95dedfbd279230aaf7a3da317ccdd2ef6603124e64152c738006d9bca846a44012fdacda8fab0617275f49f8696d1c3e4104fbf6e')

View file

@ -1,21 +1,11 @@
--- a/SConstruct 2013-03-16 02:59:55.000000000 +0800
+++ b/SConstruct 2013-03-20 10:55:20.009645869 +0800
@@ -692,7 +692,7 @@
--- a/SConstruct 2014-04-08 22:55:57.206075327 +0800
+++ b/SConstruct 2014-04-08 22:57:58.692240224 +0800
@@ -819,7 +819,7 @@
"-Winvalid-pch"] )
# env.Append( " -Wconversion" ) TODO: this doesn't really work yet
if linux:
if linux or darwin:
- env.Append( CCFLAGS=["-Werror", "-pipe"] )
+ env.Append( CCFLAGS=["-pipe"] )
if not has_option('clang'):
env.Append( CCFLAGS=["-fno-builtin-memcmp"] ) # glibc's memcmp is faster than gcc's
--- a/src/third_party/v8/SConscript 2013-04-17 03:21:23.000000000 +0800
+++ b/src/third_party/v8/SConscript 2013-04-18 17:41:29.878618892 +0800
@@ -47,7 +47,6 @@
'gcc': {
'all': {
'CCFLAGS': ['-Wall',
- '-Werror',
'-W',
'-Wno-unused-parameter',
'-Woverloaded-virtual',
env.Append( CPPDEFINES=["_FILE_OFFSET_BITS=64"] )
env.Append( CXXFLAGS=["-Wnon-virtual-dtor", "-Woverloaded-virtual"] )