summaryrefslogtreecommitdiff
path: root/packages/cacao
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cacao')
-rw-r--r--packages/cacao/cacao.inc1
-rw-r--r--packages/cacao/cacao_0.98+hg20071001.bb10
-rw-r--r--packages/cacao/cacaoh-native.inc3
-rw-r--r--packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch18
-rw-r--r--packages/cacao/files/cacao-0.98+hg-attachthread.patch89
5 files changed, 110 insertions, 11 deletions
diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc
index cc107abf27..0f7fa554ac 100644
--- a/packages/cacao/cacao.inc
+++ b/packages/cacao/cacao.inc
@@ -19,7 +19,6 @@ EXTRA_OECONF = "\
${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
--enable-debug \
--with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-${PV} \
- --with-classpath-libdir=${STAGING_LIBDIR}/classpath \
--with-classpath-includedir=${STAGING_INCDIR}/classpath \
--with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \
--with-target-classpath-classes=${datadir}/classpath/glibj.zip \
diff --git a/packages/cacao/cacao_0.98+hg20071001.bb b/packages/cacao/cacao_0.98+hg20071001.bb
index 38fcb37b82..94919ad24a 100644
--- a/packages/cacao/cacao_0.98+hg20071001.bb
+++ b/packages/cacao/cacao_0.98+hg20071001.bb
@@ -1,12 +1,12 @@
require cacao.inc
-PR = "r5"
+PR = "r7"
SRC_URI = "\
http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518 \
file://cacao-0.98+svn-libdir.diff;patch=1 \
file://cacao-0.98+svn-classpath_var.patch;patch=1 \
- file://cacao-0.98+hg-arm-cacheflush-workaround.patch;patch=1 \
+ file://cacao-0.98+hg-arm-cacheflush-fix.patch;patch=1 \
file://cacao-0.98+hg-attachthread.patch;patch=1 \
"
@@ -14,3 +14,9 @@ EXTRA_OECONF += "\
--enable-annotations \
"
+# Quirks for Nokia N800:
+# - with mfloat-abi=softfp the runtime fails to run anything
+# - without --enable-softfloat it cannot find files within Jars
+TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft"
+
+EXTRA_OECONF_append_nokia800 = "--enable-softfloat"
diff --git a/packages/cacao/cacaoh-native.inc b/packages/cacao/cacaoh-native.inc
index 1f81672e7f..3e7fdd60c6 100644
--- a/packages/cacao/cacaoh-native.inc
+++ b/packages/cacao/cacaoh-native.inc
@@ -8,8 +8,7 @@ S = "${WORKDIR}/cacao-${PV}"
PR = "r1"
-inherit autotools
-inherit native
+inherit autotools native
EXTRA_OECONF = " \
--with-classpath-includedir=${STAGING_INCDIR}/classpath \
diff --git a/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch
new file mode 100644
index 0000000000..4e63f501ff
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch
@@ -0,0 +1,18 @@
+diff -r df1b780317c3 src/vm/jit/arm/asmpart.S
+--- a/src/vm/jit/arm/asmpart.S Thu Jan 17 01:01:35 2008 +0100
++++ b/src/vm/jit/arm/asmpart.S Mon Jan 21 00:14:41 2008 +0100
+@@ -323,10 +323,11 @@ asm_cacheflush:
+ mov a1, #0xff000000
+ #endif
+
++#if defined(__ARM_EABI__)
++ swi 0x0
++ ldmfd sp!, {r7}
++#else
+ swi sys_cacheflush
+-
+-#if defined(__ARM_EABI__)
+- ldmfd sp!, {r7}
+ #endif
+
+ mov pc, lr
diff --git a/packages/cacao/files/cacao-0.98+hg-attachthread.patch b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
index b3dfabc625..cda01bcfb2 100644
--- a/packages/cacao/files/cacao-0.98+hg-attachthread.patch
+++ b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
@@ -1,12 +1,89 @@
-diff -r d8fe2c3ba284 src/threads/native/threads.c
---- a/src/threads/native/threads.c Sun Dec 30 17:43:35 2007 +0100
-+++ b/src/threads/native/threads.c Wed Jan 02 16:41:57 2008 +0100
-@@ -1432,6 +1432,8 @@ bool threads_attach_current_thread(JavaV
+# Makes the JNI function AttachCurrentThread work properly.
+
+Index: cacao-0.98+hg20071001/src/mm/boehm-gc/include/gc.h
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm-gc/include/gc.h 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm-gc/include/gc.h 2008-01-15 14:46:30.000000000 +0100
+@@ -905,6 +905,8 @@
+ /* in returned list. */
+ extern void GC_thr_init GC_PROTO((void));/* Needed for Solaris/X86 */
- threads_thread_set_object(thread, (java_handle_t *) t);
++extern void GC_thr_init_foreign GC_PROTO((void));/* Needed for Solaris/X86 */
++
+ #endif /* THREADS && !SRC_M3 */
+
+ #if defined(GC_WIN32_THREADS) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
+Index: cacao-0.98+hg20071001/src/mm/boehm-gc/pthread_support.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm-gc/pthread_support.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm-gc/pthread_support.c 2008-01-15 14:46:30.000000000 +0100
+@@ -864,6 +864,27 @@
+ }
+ #endif /* GC_NETBSD_THREADS */
-+ threads_set_current_threadobject(thread);
++void GC_thr_init_foreign()
++{
++# ifndef GC_DARWIN_THREADS
++ int dummy;
++# endif
++ GC_thread t;
++ LOCK();
++
++ /* Add the initial thread, so we can stop it. */
++ t = GC_new_thread(pthread_self());
++# ifdef GC_DARWIN_THREADS
++ t -> stop_info.mach_thread = mach_thread_self();
++# else
++ t -> stop_info.stack_ptr = (ptr_t)(&dummy);
++# endif
++ t -> flags = DETACHED;
++
++ UNLOCK();
+
++}
++
+ /* We hold the allocation lock. */
+ void GC_thr_init()
+ {
+Index: cacao-0.98+hg20071001/src/mm/boehm.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm.c 2008-01-15 14:46:30.000000000 +0100
+@@ -108,6 +108,10 @@
+ GC_expand_hp(heapstartsize - heapcurrentsize);
+ }
+
++void gc_init_foreign()
++{
++ GC_thr_init_foreign();
++}
+
+ static void gc_ignore_warnings(char *msg, GC_word arg)
+ {
+Index: cacao-0.98+hg20071001/src/mm/gc-common.h
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/gc-common.h 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/gc-common.h 2008-01-15 14:46:30.000000000 +0100
+@@ -74,6 +74,7 @@
+ void gc_finalize_all(void);
+ void *gc_out_of_memory(size_t bytes_requested);
+
++void gc_init_foreign();
+
+ /* inlined functions **********************************************************/
+
+Index: cacao-0.98+hg20071001/src/threads/native/threads.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/threads/native/threads.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/threads/native/threads.c 2008-01-15 16:01:22.000000000 +0100
+@@ -1392,7 +1392,10 @@
+
/* thread is completely initialized */
++ gc_init_foreign();
++
threads_thread_state_runnable(thread);
++ threads_set_current_threadobject(thread);
+
+ DEBUGTHREADS("attaching", thread);
+