changeset 2491:9d9f060d8eed

CACAO PR157: ARM SMP Assertion thinlock failed. 2011-03-11 Xerxes Ranby <xerxes@zafena.se> CACAO PR157: ARM SMP Assertion thinlock failed. * NEWS: Updated. * Makefile.am: Add new CACAO patch. * patches/cacao/arm-memory-barrier.patch: New patch.
author Xerxes R?nby <xerxes@zafena.se>
date Fri, 11 Mar 2011 16:09:25 +0100
parents b1a474b2b90b
children e1efdb7e7fa5
files ChangeLog Makefile.am NEWS patches/cacao/arm-memory-barrier.patch
diffstat 4 files changed, 57 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Mar 03 12:33:44 2011 +0000
+++ b/ChangeLog	Fri Mar 11 16:09:25 2011 +0100
@@ -1,3 +1,10 @@
+2011-03-11  Xerxes Ranby  <xerxes@zafena.se>
+
+	CACAO PR157: ARM SMP Assertion thinlock failed.
+	* NEWS: Updated.
+	* Makefile.am: Add new CACAO patch.
+	* patches/cacao/arm-memory-barrier.patch: New patch.
+
 2011-03-03  Andrew John Hughes  <ahughes@redhat.com>
 
 	* patches/security/20110215/6927050.patch:
--- a/Makefile.am	Thu Mar 03 12:33:44 2011 +0000
+++ b/Makefile.am	Fri Mar 11 16:09:25 2011 +0100
@@ -346,7 +346,8 @@
 	patches/cacao/launcher.patch \
 	patches/cacao/arm-arch-defines.patch \
 	patches/cacao/jsig.patch \
-	patches/cacao/memory.patch
+	patches/cacao/memory.patch \
+	patches/cacao/arm-memory-barrier.patch
 endif
 
 if ENABLE_CACAO
--- a/NEWS	Thu Mar 03 12:33:44 2011 +0000
+++ b/NEWS	Fri Mar 11 16:09:25 2011 +0100
@@ -10,6 +10,9 @@
 
 New in release 1.10.1 (2011-XX-XX):
 
+* Bug fixes
+  - CACAO PR157: ARM SMP Assertion thinlock failed.
+
 New in release 1.10 (2011-03-02):
 
 * NetX and the plugin moved to the IcedTea-Web project with a separate
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/cacao/arm-memory-barrier.patch	Fri Mar 11 16:09:25 2011 +0100
@@ -0,0 +1,45 @@
+Index: cacao/cacao/src/vm/jit/arm/md-atomic.hpp
+===================================================================
+--- cacao.orig/cacao/src/vm/jit/arm/md-atomic.hpp	2011-03-04 22:44:20.000000000 +0100
++++ cacao/cacao/src/vm/jit/arm/md-atomic.hpp	2011-03-04 23:02:52.000000000 +0100
+@@ -63,13 +63,21 @@
+ 	return Atomic::generic_compare_and_swap(p, oldval, newval);
+ }
+ 
++/**
++ * ARM Kernel helper for memory barrier.
++ * Using __asm __volatile ("":::"memory") does not work reliable on ARM
++ * and gcc __sync_synchronize(); implementation does not use the kernel
++ * helper for all gcc versions so it is unreliable to use as well.
++ */
++typedef void (__kernel_dmb_t) (void);
++#define __kernel_dmb (*(__kernel_dmb_t *) 0xffff0fa0)
+ 
+ /**
+  * A memory barrier.
+  */
+ inline void memory_barrier(void)
+ {
+-	__asm__ __volatile__ ("" : : : "memory");
++	__kernel_dmb();
+ }
+ 
+ 
+@@ -78,7 +86,7 @@
+  */
+ inline void write_memory_barrier(void)
+ {
+-	__asm__ __volatile__ ("" : : : "memory");
++	__kernel_dmb();
+ }
+ 
+ 
+@@ -87,7 +95,7 @@
+  */
+ inline void instruction_barrier(void)
+ {
+-	__asm__ __volatile__ ("" : : : "memory");
++	__kernel_dmb();
+ }
+ 
+ }