[Pkg-mongodb-maintainers] [pkg-mongodb] 268/394: debian/patches: Take some patches for ARM from Ubuntu.

Apollon Oikonomopoulos apoikos at moszumanska.debian.org
Wed Sep 21 13:59:38 UTC 2016


This is an automated email from the git hooks/post-receive script.

apoikos pushed a commit to branch master
in repository pkg-mongodb.

commit 02826cb8862324d99c022d48b55d7372dc338fdc
Author: Rogério Brito <rbrito at ime.usp.br>
Date:   Sat Apr 20 22:04:54 2013 -0300

    debian/patches: Take some patches for ARM from Ubuntu.
    
    Some of these patches came from RedHat.
    
    The patch 0007-ARM-support... required manual patching, as the upstream code
    changed slightly.
    
    The patches were also rebuilt from a patch queue branch.
    
    Signed-off-by: Rogério Brito <rbrito at ime.usp.br>
---
 ...script.client-to-use-installAs-instead-of.patch |  21 +++
 ...ARM-support-for-ASM-operations-in-MongoDB.patch | 181 +++++++++++++++++++++
 .../patches/0008-Fix-ARM-alignment-problems.patch  |  67 ++++++++
 debian/patches/series                              |   3 +
 4 files changed, 272 insertions(+)

diff --git a/debian/patches/0006-Update-SConscript.client-to-use-installAs-instead-of.patch b/debian/patches/0006-Update-SConscript.client-to-use-installAs-instead-of.patch
new file mode 100644
index 0000000..4dd515f
--- /dev/null
+++ b/debian/patches/0006-Update-SConscript.client-to-use-installAs-instead-of.patch
@@ -0,0 +1,21 @@
+From: Antonin Kral <A.Kral at sh.cvut.cz>
+Date: Sat, 20 Apr 2013 22:05:50 -0300
+Subject: Update SConscript.client to use "installAs" instead of "install".
+
+---
+ src/SConscript.client |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/SConscript.client b/src/SConscript.client
+index 74bd73c..37e76a0 100644
+--- a/src/SConscript.client
++++ b/src/SConscript.client
+@@ -177,7 +177,7 @@ env.Install(
+ # install
+ prefix = GetOption("prefix")
+ 
+-env.Install(prefix + "/lib", '${LIBPREFIX}mongoclient${LIBSUFFIX}')
++env.InstallAs(prefix + "/lib", '${LIBPREFIX}mongoclient${LIBSUFFIX}')
+ 
+ for x in clientHeaderDirectories:
+     inst = env.Install(prefix + "/include/mongo/" + x,
diff --git a/debian/patches/0007-ARM-support-for-ASM-operations-in-MongoDB.patch b/debian/patches/0007-ARM-support-for-ASM-operations-in-MongoDB.patch
new file mode 100644
index 0000000..f707674
--- /dev/null
+++ b/debian/patches/0007-ARM-support-for-ASM-operations-in-MongoDB.patch
@@ -0,0 +1,181 @@
+From: Robie Basak <robie.basak at 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 at 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"
diff --git a/debian/patches/0008-Fix-ARM-alignment-problems.patch b/debian/patches/0008-Fix-ARM-alignment-problems.patch
new file mode 100644
index 0000000..3e59a1a
--- /dev/null
+++ b/debian/patches/0008-Fix-ARM-alignment-problems.patch
@@ -0,0 +1,67 @@
+From: Robie Basak <robie.basak at 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 a4e51b7..8e38ee4 100644
+--- a/src/mongo/bson/bsonelement.h
++++ b/src/mongo/bson/bsonelement.h
+@@ -17,7 +17,7 @@
+ 
+ #pragma once
+ 
+-#include <string.h> // strlen
++#include <string.h> // strlen, memcpy
+ #include <string>
+ #include <vector>
+ 
+@@ -528,13 +528,27 @@ namespace mongo {
+     }
+ 
+     inline double BSONElement::numberDouble() const {
++#if defined(__arm__)
++        int int_result;
++        long long long_long_result;
++#endif
+         switch( type() ) {
+         case NumberDouble:
+             return _numberDouble();
+         case NumberInt:
++#if defined(__arm__)
++            memcpy(&int_result, value(), sizeof(int_result));
++            return int_result;
++#else
+             return *reinterpret_cast< const int* >( value() );
++#endif
+         case NumberLong:
++#if defined(__arm__)
++            memcpy(&long_long_result, value(), sizeof(long_long_result));
++            return (double)long_long_result;
++#else
+             return (double) *reinterpret_cast< const long long* >( value() );
++#endif
+         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 {
+                     p += 8;
+                     break;
+                 case cdouble:
+-                    b.append("", (double&) *p);
++                    b.append("", (reinterpret_cast< const PackedDouble& >(*p)).d);
+                     p += sizeof(double);
+                     break;
+                 case cint:
diff --git a/debian/patches/series b/debian/patches/series
index 4f412a4..9e045e9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,6 @@
 0003-kfreebsd-has-dev-urandom.patch
 0004-All-platforms-but-Windows-find-hash-in-std-tr1.patch
 0005-kfreebsd-does-not-have-sys-prctl.h.patch
+0006-Update-SConscript.client-to-use-installAs-instead-of.patch
+0007-ARM-support-for-ASM-operations-in-MongoDB.patch
+0008-Fix-ARM-alignment-problems.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mongodb/pkg-mongodb.git



More information about the Pkg-mongodb-maintainers mailing list