summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/pcre
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2013-06-18 10:42:11 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-19 11:54:29 +0200
commit5d439eb4ca2f3b576c951a1dbe75ce369ed05a39 (patch)
tree048dc87d06a0887cc1d57630aeb4482bb3e5d7fd /src/3rdparty/pcre
parent44630a6f4206832db39ae984687727967d6b7540 (diff)
Make PCRE's JIT work on Android devices
__clear_cache is missing from Android; use cacheflush instead. Backport in Qt's own PCRE copy of the upstream fix: http://vcs.pcre.org/viewvc?view=revision&revision=1340 Task-number: QTBUG-31754 Change-Id: I4996265f7b19343ba24983d4f8b2f75e2b578504 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/3rdparty/pcre')
-rw-r--r--src/3rdparty/pcre/patches/README3
-rw-r--r--src/3rdparty/pcre/patches/r1340_fix_jit_on_android.patch18
-rw-r--r--src/3rdparty/pcre/sljit/sljitConfigInternal.h7
3 files changed, 28 insertions, 0 deletions
diff --git a/src/3rdparty/pcre/patches/README b/src/3rdparty/pcre/patches/README
new file mode 100644
index 0000000000..1d2bc389dd
--- /dev/null
+++ b/src/3rdparty/pcre/patches/README
@@ -0,0 +1,3 @@
+These patches are landed in upstream PCRE (they're marked with
+their SVN revision number). When upgrading PCRE remember check
+if the version you're upgrading to already contains them or not.
diff --git a/src/3rdparty/pcre/patches/r1340_fix_jit_on_android.patch b/src/3rdparty/pcre/patches/r1340_fix_jit_on_android.patch
new file mode 100644
index 0000000000..41699d4882
--- /dev/null
+++ b/src/3rdparty/pcre/patches/r1340_fix_jit_on_android.patch
@@ -0,0 +1,18 @@
+Index: sljit/sljitConfigInternal.h
+===================================================================
+--- sljit/sljitConfigInternal.h (revision 1339)
++++ sljit/sljitConfigInternal.h (working copy)
+@@ -221,6 +221,13 @@
+ #define SLJIT_CACHE_FLUSH(from, to) \
+ sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from))
+
++#elif defined __ANDROID__
++
++/* Android lacks __clear_cache; instead, cacheflush should be used. */
++
++#define SLJIT_CACHE_FLUSH(from, to) \
++ cacheflush((long)(from), (long)(to), 0)
++
+ #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+
+ /* The __clear_cache() implementation of GCC is a dummy function on PowerPC. */
diff --git a/src/3rdparty/pcre/sljit/sljitConfigInternal.h b/src/3rdparty/pcre/sljit/sljitConfigInternal.h
index 2b6616ef66..bc945fbcab 100644
--- a/src/3rdparty/pcre/sljit/sljitConfigInternal.h
+++ b/src/3rdparty/pcre/sljit/sljitConfigInternal.h
@@ -217,6 +217,13 @@
#define SLJIT_CACHE_FLUSH(from, to) \
sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from))
+#elif defined __ANDROID__
+
+/* Android lacks __clear_cache; instead, cacheflush should be used. */
+
+#define SLJIT_CACHE_FLUSH(from, to) \
+ cacheflush((long)(from), (long)(to), 0)
+
#elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
/* The __clear_cache() implementation of GCC is a dummy function on PowerPC. */