diff options
Diffstat (limited to 'recipes/cacao/files')
-rw-r--r-- | recipes/cacao/files/arm_mmap.patch | 21 | ||||
-rw-r--r-- | recipes/cacao/files/cacao-0.98+svn-classpath_var.patch | 56 | ||||
-rw-r--r-- | recipes/cacao/files/cacao-0.98-initial.patch | 45 | ||||
-rw-r--r-- | recipes/cacao/files/cacao-arm-race.patch | 241 | ||||
-rw-r--r-- | recipes/cacao/files/cacao-codegen-arm1.patch | 49 | ||||
-rw-r--r-- | recipes/cacao/files/cacao-codegen-arm2.patch | 66 | ||||
-rw-r--r-- | recipes/cacao/files/classpath_var.patch | 66 | ||||
-rw-r--r-- | recipes/cacao/files/libmath.patch | 53 | ||||
-rw-r--r-- | recipes/cacao/files/midpath.patch | 372 | ||||
-rw-r--r-- | recipes/cacao/files/offset.h_arm.patch | 35 | ||||
-rw-r--r-- | recipes/cacao/files/offsets_make.patch | 25 | ||||
-rw-r--r-- | recipes/cacao/files/vfp-compat.patch | 37 |
12 files changed, 1066 insertions, 0 deletions
diff --git a/recipes/cacao/files/arm_mmap.patch b/recipes/cacao/files/arm_mmap.patch new file mode 100644 index 0000000000..e34c7b7802 --- /dev/null +++ b/recipes/cacao/files/arm_mmap.patch @@ -0,0 +1,21 @@ +--- cacao-0.98/src/vm/exceptions.c 2007/06/27 09:04:17 8146 ++++ cacao-0.98/src/vm/exceptions.c 2007/07/02 14:07:24 8175 +@@ -92,6 +92,10 @@ + + bool exceptions_init(void) + { ++#if !(defined(__ARM__) && defined(__LINUX__)) ++ /* On arm-linux the first memory page can't be mmap'ed, as it ++ contains the exception vectors. */ ++ + int pagesize; + + /* mmap a memory page at address 0x0, so our hardware-exceptions +@@ -100,6 +104,7 @@ + pagesize = getpagesize(); + + (void) memory_mmap_anon(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED); ++#endif + + /* check if we get into trouble with our hardware-exceptions */ + diff --git a/recipes/cacao/files/cacao-0.98+svn-classpath_var.patch b/recipes/cacao/files/cacao-0.98+svn-classpath_var.patch new file mode 100644 index 0000000000..255281d386 --- /dev/null +++ b/recipes/cacao/files/cacao-0.98+svn-classpath_var.patch @@ -0,0 +1,56 @@ +Index: cacao-trunk/src/vm/properties.c +=================================================================== +--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:28:53.000000000 +0200 ++++ cacao-trunk/src/vm/properties.c 2007-09-03 00:36:14.000000000 +0200 +@@ -294,14 +294,14 @@ + len = + strlen(CACAO_VM_ZIP) + + strlen(":") + +- strlen(CLASSPATH_CLASSES) + ++ strlen(TARGET_CLASSPATH_CLASSES) + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, CACAO_VM_ZIP); + strcat(boot_class_path, ":"); +- strcat(boot_class_path, CLASSPATH_CLASSES); ++ strcat(boot_class_path, TARGET_CLASSPATH_CLASSES); + + # elif defined(WITH_CLASSPATH_SUN) + +Index: cacao-trunk/configure.ac +=================================================================== +--- cacao-trunk.orig/configure.ac 2007-08-31 13:22:03.000000000 +0200 ++++ cacao-trunk/configure.ac 2007-08-31 13:30:44.000000000 +0200 +@@ -851,6 +851,7 @@ + AC_CHECK_WITH_CLASSPATH + AC_CHECK_WITH_CLASSPATH_PREFIX + AC_CHECK_WITH_CLASSPATH_CLASSES ++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES + AC_CHECK_WITH_CLASSPATH_LIBDIR + AC_CHECK_WITH_CLASSPATH_INCLUDEDIR + +Index: cacao-trunk/m4/classpath.m4 +=================================================================== +--- cacao-trunk.orig/m4/classpath.m4 2007-08-31 13:22:21.000000000 +0200 ++++ cacao-trunk/m4/classpath.m4 2007-08-31 13:30:55.000000000 +0200 +@@ -98,6 +98,18 @@ + AC_SUBST(CLASSPATH_CLASSES) + ]) + ++dnl where are Java core library classes installed on the target ++ ++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[ ++AC_MSG_CHECKING(where Java core library classes are installed on the target) ++AC_ARG_WITH([target-classpath-classes], ++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])], ++ [TARGET_CLASSPATH_CLASSES=${withval}], ++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip]) ++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES}) ++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target]) ++AC_SUBST(TARGET_CLASSPATH_CLASSES) ++]) + + dnl where are Java core library native libraries installed + diff --git a/recipes/cacao/files/cacao-0.98-initial.patch b/recipes/cacao/files/cacao-0.98-initial.patch new file mode 100644 index 0000000000..30b6d147e8 --- /dev/null +++ b/recipes/cacao/files/cacao-0.98-initial.patch @@ -0,0 +1,45 @@ +Index: cacao-0.98/configure.ac +=================================================================== +--- cacao-0.98.orig/configure.ac 2007-12-19 22:07:55.000000000 +0100 ++++ cacao-0.98/configure.ac 2007-12-19 22:08:02.000000000 +0100 +@@ -27,7 +27,7 @@ + dnl Process this file with autoconf to produce a configure script. + + +-AC_INIT(cacao, 0.98, cacao@cacaojvm.org) ++AC_INIT(cacao-initial, 0.98, cacao@cacaojvm.org) + AC_CONFIG_SRCDIR(src/cacao/cacao.c) + AC_CANONICAL_HOST + AC_PREREQ(2.59) +Index: cacao-0.98/src/vm/vm.c +=================================================================== +--- cacao-0.98.orig/src/vm/vm.c 2007-12-19 22:31:19.000000000 +0100 ++++ cacao-0.98/src/vm/vm.c 2007-12-19 22:32:36.000000000 +0100 +@@ -623,7 +623,7 @@ + #else + puts(" java.boot.class.path : "CLASSPATH_CLASSES""); + #endif +- puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath\n"); ++ puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath-initial\n"); + + puts("Runtime variables:\n"); + printf(" maximum heap size : %d\n", opt_heapmaxsize); +@@ -828,15 +828,15 @@ + + /* and finally set the path to GNU Classpath libraries */ + +- len = strlen(cacao_prefix) + strlen("/lib/classpath") + strlen("0"); ++ len = strlen(cacao_prefix) + strlen("/lib/classpath-initial") + strlen("0"); + + classpath_libdir = MNEW(char, len); + strcpy(classpath_libdir, cacao_prefix); +- strcat(classpath_libdir, "/lib/classpath"); ++ strcat(classpath_libdir, "/lib/classpath-initial"); + #else + cacao_prefix = CACAO_PREFIX; + cacao_libjvm = CACAO_LIBDIR"/libjvm"; +- classpath_libdir = CLASSPATH_LIBDIR"/classpath"; ++ classpath_libdir = CLASSPATH_LIBDIR"/classpath-initial"; + #endif + + /* set the bootclasspath */ diff --git a/recipes/cacao/files/cacao-arm-race.patch b/recipes/cacao/files/cacao-arm-race.patch new file mode 100644 index 0000000000..a4b730df18 --- /dev/null +++ b/recipes/cacao/files/cacao-arm-race.patch @@ -0,0 +1,241 @@ +Index: cacao-0.99.3/src/vm/jit/arm/linux/md-os.c +=================================================================== +--- cacao-0.99.3.orig/src/vm/jit/arm/linux/md-os.c 2008-07-07 13:36:19.000000000 +0200 ++++ cacao-0.99.3/src/vm/jit/arm/linux/md-os.c 2008-09-24 17:15:23.191805889 +0200 +@@ -2,6 +2,7 @@ + + Copyright (C) 1996-2005, 2006, 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO ++ Copyright (C) 2008 Theobroma Systems Ltd. + + This file is part of CACAO. + +@@ -60,7 +61,7 @@ + #include "vm/jit/executionstate.h" + #include "vm/jit/stacktrace.h" + #include "vm/jit/trap.h" +- ++#include "vm/jit/patcher-common.h" + + /* md_signal_handler_sigsegv *************************************************** + +@@ -126,56 +127,52 @@ + + void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p) + { +- ucontext_t *_uc; +- scontext_t *_sc; +- u1 *pv; +- u1 *sp; +- u1 *ra; +- u1 *xpc; +- u4 mcode; +- int type; +- intptr_t val; +- void *p; +- +- _uc = (ucontext_t*) _p; +- _sc = &_uc->uc_mcontext; +- +- /* ATTENTION: glibc included messed up kernel headers we needed a +- workaround for the ucontext structure. */ +- +- pv = (u1 *) _sc->arm_ip; +- sp = (u1 *) _sc->arm_sp; +- ra = (u1 *) _sc->arm_lr; /* this is correct for leafs */ +- xpc = (u1 *) _sc->arm_pc; +- +- /* get exception-throwing instruction */ +- +- mcode = *((u4 *) xpc); +- +- /* check for undefined instruction we use */ +- +- if ((mcode & 0x0ff000f0) != 0x07f000f0) { +- log_println("md_signal_handler_sigill: unknown illegal instruction: inst=%x", mcode); +-#if defined(ENABLE_DISASSEMBLER) +- DISASSINSTR(xpc); +-#endif +- vm_abort("Aborting..."); +- } +- +- type = (mcode >> 8) & 0x0fff; +- val = *((s4 *) _sc + OFFSET(scontext_t, arm_r0)/4 + (mcode & 0x0f)); +- +- /* Handle the trap. */ +- +- p = trap_handle(type, val, pv, sp, ra, xpc, _p); +- +- /* set registers if we have an exception, continue execution +- otherwise (this is needed for patchers to work) */ +- +- if (p != NULL) { +- _sc->arm_r10 = (uintptr_t) p; +- _sc->arm_fp = (uintptr_t) xpc; +- _sc->arm_pc = (uintptr_t) asm_handle_exception; ++ int type; ++ intptr_t val; ++ void *p; ++ ucontext_t* _uc = (ucontext_t*) _p; ++ scontext_t* _sc = &_uc->uc_mcontext; ++ ++ /* ATTENTION: glibc included messed up kernel headers we needed a ++ workaround for the ucontext structure. */ ++ ++ void* pv = (void*) _sc->arm_ip; ++ void* sp = (void*) _sc->arm_sp; ++ void* ra = (void*) _sc->arm_lr; // The RA is correct for leaf methods. ++ void* xpc = (void*) _sc->arm_pc; ++ ++ // Get the exception-throwing instruction. ++ uint32_t mcode = *((uint32_t*) xpc); ++ ++ // Check if the trap instruction is valid. ++ // TODO Move this into patcher_handler. ++ if (patcher_is_valid_trap_instruction_at(xpc) == false) { ++ // Check if the PC has been patched during our way to this ++ // signal handler (see PR85). ++ // NOTE: ARM uses SIGILL for other traps too, but it's OK to ++ // do this check anyway because it will fail. ++ if (patcher_is_patched_at(xpc) == true) ++ return; ++ ++ // We have a problem... ++ log_println("md_signal_handler_sigill: Unknown illegal instruction 0x%x at 0x%x", mcode, xpc); ++ #if defined(ENABLE_DISASSEMBLER) ++ (void) disassinstr(xpc); ++ #endif ++ vm_abort("Aborting..."); ++ } ++ ++ type = (mcode >> 8) & 0x0fff; ++ val = *((int32_t*) _sc + OFFSET(scontext_t, arm_r0)/4 + (mcode & 0x0f)); ++ ++ // Handle the trap. ++ p = trap_handle(type, val, pv, sp, ra, xpc, _p); ++ ++ // Set registers if we have an exception, continue execution ++ // otherwise. ++ if (p != NULL) { ++ _sc->arm_r10 = (uintptr_t) p; ++ _sc->arm_fp = (uintptr_t) xpc; + } + } + +Index: cacao-0.99.3/src/vm/jit/arm/patcher.c +=================================================================== +--- cacao-0.99.3.orig/src/vm/jit/arm/patcher.c 2008-04-27 23:44:08.000000000 +0200 ++++ cacao-0.99.3/src/vm/jit/arm/patcher.c 2008-09-24 17:05:17.003795314 +0200 +@@ -2,6 +2,7 @@ + + Copyright (C) 1996-2005, 2006, 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO ++ Copyright (C) 2008 Theobroma Systems Ltd. + + This file is part of CACAO. + +@@ -76,6 +77,25 @@ + PATCH_BACK_ORIGINAL_MCODE; + } + ++ ++/** ++ * Check if the trap instruction at the given PC is valid. ++ * ++ * @param pc Program counter. ++ * ++ * @return true if valid, false otherwise. ++ */ ++bool patcher_is_valid_trap_instruction_at(void* pc) ++{ ++ uint32_t mcode = *((uint32_t*) pc); ++ ++ // Check for the undefined instruction we use. ++ if ((mcode & 0x0ff000f0) != 0x07f000f0) { ++ return false; ++ } ++ ++ return true; ++} + + /* patcher_get_putstatic ******************************************************* + +Index: cacao-0.99.3/src/vm/jit/patcher-common.c +=================================================================== +--- cacao-0.99.3.orig/src/vm/jit/patcher-common.c 2008-04-28 21:52:41.000000000 +0200 ++++ cacao-0.99.3/src/vm/jit/patcher-common.c 2008-09-24 17:05:17.047796037 +0200 +@@ -2,6 +2,7 @@ + + Copyright (C) 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO ++ Copyright (C) 2008 Theobroma Systems Ltd. + + This file is part of CACAO. + +@@ -254,6 +255,49 @@ + } + + ++/** ++ * Check if the patcher is already patched. This is done by comparing ++ * the machine instruction. ++ * ++ * @param pr Patcher structure. ++ * ++ * @return true if patched, false otherwise. ++ */ ++bool patcher_is_patched(patchref_t* pr) ++{ ++ // Validate the instruction at the patching position is the same ++ // instruction as the patcher structure contains. ++ uint32_t mcode = *((uint32_t*) pr->mpc); ++ ++ if (mcode != pr->mcode) { ++ // The code differs. ++ return false; ++ } ++ ++ return true; ++} ++ ++ ++/** ++ * ++ */ ++bool patcher_is_patched_at(void* pc) ++{ ++ codeinfo* code = code_find_codeinfo_for_pc(pc); ++ ++ // Get the patcher for the given PC. ++ patchref_t* pr = patcher_list_find(code, pc); ++ ++ if (pr == NULL) { ++ // The given PC is not a patcher position. ++ return false; ++ } ++ ++ // Validate the instruction. ++ return patcher_is_patched(pr); ++} ++ ++ + /* patcher_handler ************************************************************* + + Handles the request to patch JIT code at the given patching +Index: cacao-0.99.3/src/vm/jit/patcher-common.h +=================================================================== +--- cacao-0.99.3.orig/src/vm/jit/patcher-common.h 2008-04-27 23:44:08.000000000 +0200 ++++ cacao-0.99.3/src/vm/jit/patcher-common.h 2008-09-24 17:05:17.115800331 +0200 +@@ -73,6 +73,12 @@ + + void patcher_resolve(jitdata* jd); + ++bool patcher_is_patched(patchref_t* pr); ++bool patcher_is_patched_at(void* pc); ++ ++// MD function. ++bool patcher_is_valid_trap_instruction_at(void* pc); ++ + java_handle_t *patcher_handler(u1 *pc); + + diff --git a/recipes/cacao/files/cacao-codegen-arm1.patch b/recipes/cacao/files/cacao-codegen-arm1.patch new file mode 100644 index 0000000000..b4d9db8eb1 --- /dev/null +++ b/recipes/cacao/files/cacao-codegen-arm1.patch @@ -0,0 +1,49 @@ + +# HG changeset patch +# User Christian Thalinger <twisti@complang.tuwien.ac.at> +# Date 1221466650 -7200 +# Node ID d88bf99453b644bd2cc5c0dc5f8038f3151d897a +# Parent b567fffd0ff7b8330b172a3f12325c731bee67bb +* src/vm/jit/arm/codegen.h [__VFP_FP__] (M_CVTFI, M_CVTDI): Use signed +conversion functions. + +--- a/src/vm/jit/arm/codegen.h Sat Sep 13 15:00:00 2008 +0200 ++++ b/src/vm/jit/arm/codegen.h Mon Sep 15 10:17:30 2008 +0200 +@@ -643,6 +643,7 @@ + #if !defined(ENABLE_SOFTFLOAT) + + #if defined(__VFP_FP__) ++ + #define M_FADD(a,b,d) M_CPDP(UNCOND,0,1,1,0,10,0,0,0,d,a,b)/* d = a + b */ + #define M_FSUB(a,b,d) M_CPDP(UNCOND,0,1,1,1,10,0,0,0,d,a,b)/* d = a - b */ + #define M_FMUL(a,b,d) M_CPDP(UNCOND,0,1,0,0,10,0,0,0,d,a,b)/* d = a * b */ +@@ -664,8 +665,8 @@ + #define M_CVTFD(a,d) M_CPDP(UNCOND,1,1,1,1,10,0,1,0,d,0x7,a) + #define M_CVTIF(a,d) M_CPDP(UNCOND,1,1,1,1,10,0,1,0,d,0x8,a) + #define M_CVTID(a,d) M_CPDP(UNCOND,1,1,1,1,11,0,1,0,d,0x8,a) +-#define M_CVTFI(a,d) M_CPDP(UNCOND,1,1,1,1,10,0,1,0,d,0xc,a) +-#define M_CVTDI(a,d) M_CPDP(UNCOND,1,1,1,1,11,0,1,0,d,0xc,a) ++#define M_CVTFI(a,d) M_CPDP(UNCOND,1,1,1,1,10,0,1,0,d,0xd,a) // ftosis ++#define M_CVTDI(a,d) M_CPDP(UNCOND,1,1,1,1,11,0,1,0,d,0xd,a) // ftosid + + #define M_FMSTAT M_CPRT(UNCOND,0x07,1,10,0,0x1,0xf) + +@@ -675,7 +676,9 @@ + #define M_FMRDL(Fa,b) M_CPRT(UNCOND,0x00,1,11,0,Fa,b) + #define M_FMDHR(a,Fb) M_CPRT(UNCOND,0x01,0,11,0,Fb,a) + #define M_FMRDH(Fa,b) M_CPRT(UNCOND,0x01,1,11,0,Fa,b) ++ + #else ++ + #define M_FADD(a,b,d) M_CPDOS(UNCOND,0x00,0,d,a,b) /* d = a + b */ + #define M_FSUB(a,b,d) M_CPDOS(UNCOND,0x02,0,d,a,b) /* d = a - b */ + #define M_FMUL(a,b,d) M_CPDOS(UNCOND,0x01,0,d,a,b) /* d = a * b */ +@@ -701,6 +704,7 @@ + #define M_CVTID(a,d) M_CPRTD(UNCOND,0,a,d,0) /* d = (float) a */ + #define M_CVTFI(a,d) M_CPRTI(UNCOND,1,d,0,a) /* d = (int) a */ + #define M_CVTDI(a,d) M_CPRTI(UNCOND,1,d,0,a) /* d = (int) a */ ++ + #endif + + + diff --git a/recipes/cacao/files/cacao-codegen-arm2.patch b/recipes/cacao/files/cacao-codegen-arm2.patch new file mode 100644 index 0000000000..710f284345 --- /dev/null +++ b/recipes/cacao/files/cacao-codegen-arm2.patch @@ -0,0 +1,66 @@ + +# HG changeset patch +# User Christian Thalinger <twisti@complang.tuwien.ac.at> +# Date 1221467463 -7200 +# Node ID a67fe1cb2b81b7cbfc9d824f17b440e50c7697ef +# Parent d88bf99453b644bd2cc5c0dc5f8038f3151d897a +* src/vm/jit/arm/codegen.c (codegen_emit) [__VFP_FP__]: Implemented +I2F, I2D, F2I, and D2I correctly. + +--- a/src/vm/jit/arm/codegen.c Mon Sep 15 10:17:30 2008 +0200 ++++ b/src/vm/jit/arm/codegen.c Mon Sep 15 10:31:03 2008 +0200 +@@ -1013,7 +1013,12 @@ + + s1 = emit_load_s1(jd, iptr, REG_ITMP1); + d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); ++#if defined(__VFP_FP__) ++ M_FMSR(s1, d); ++ M_CVTIF(d, d); ++#else + M_CVTIF(s1, d); ++#endif + emit_store_dst(jd, iptr, d); + break; + +@@ -1021,7 +1026,12 @@ + + s1 = emit_load_s1(jd, iptr, REG_ITMP1); + d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); ++#if defined(__VFP_FP__) ++ M_FMSR(s1, d); ++ M_CVTID(d, d); ++#else + M_CVTID(s1, d); ++#endif + emit_store_dst(jd, iptr, d); + break; + +@@ -1029,9 +1039,12 @@ + + s1 = emit_load_s1(jd, iptr, REG_FTMP1); + d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); ++#if defined(__VFP_FP__) ++ M_CVTFI(s1, REG_FTMP2); ++ M_FMRS(REG_FTMP2, d); ++#else + /* this uses round towards zero, as Java likes it */ + M_CVTFI(s1, d); +-#if !defined(__VFP_FP__) + /* this checks for NaN; to return zero as Java likes it */ + M_FCMP(s1, 0x8); + M_MOVVS_IMM(0, d); +@@ -1043,9 +1056,12 @@ + + s1 = emit_load_s1(jd, iptr, REG_FTMP1); + d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); ++#if defined(__VFP_FP__) ++ M_CVTDI(s1, REG_FTMP2); ++ M_FMRS(REG_FTMP2, d); ++#else + /* this uses round towards zero, as Java likes it */ + M_CVTDI(s1, d); +-#if !defined(__VFP_FP__) + /* this checks for NaN; to return zero as Java likes it */ + M_DCMP(s1, 0x8); + M_MOVVS_IMM(0, d); + diff --git a/recipes/cacao/files/classpath_var.patch b/recipes/cacao/files/classpath_var.patch new file mode 100644 index 0000000000..a2a69f9d1c --- /dev/null +++ b/recipes/cacao/files/classpath_var.patch @@ -0,0 +1,66 @@ +Index: cacao-0.98/configure.ac +=================================================================== +--- cacao-0.98.orig/configure.ac 2007-06-06 11:24:23.000000000 +0200 ++++ cacao-0.98/configure.ac 2007-07-18 23:26:43.000000000 +0200 +@@ -842,6 +842,7 @@ + AC_CHECK_WITH_CLASSPATH + AC_CHECK_WITH_CLASSPATH_PREFIX + AC_CHECK_WITH_CLASSPATH_CLASSES ++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES + AC_CHECK_WITH_CLASSPATH_LIBDIR + AC_CHECK_WITH_CLASSPATH_INCLUDEDIR + +Index: cacao-0.98/src/vm/vm.c +=================================================================== +--- cacao-0.98.orig/src/vm/vm.c 2007-06-05 09:44:38.000000000 +0200 ++++ cacao-0.98/src/vm/vm.c 2007-07-18 23:26:43.000000000 +0200 +@@ -621,7 +621,7 @@ + #if defined(WITH_CLASSPATH_GNU) + puts(" java.boot.class.path : "CACAO_VM_ZIP":"CLASSPATH_CLASSES""); + #else +- puts(" java.boot.class.path : "CLASSPATH_CLASSES""); ++ puts(" java.boot.class.path : "TARGET_CLASSPATH_CLASSES""); + #endif + puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath\n"); + +@@ -873,7 +873,7 @@ + strlen(CACAO_VM_ZIP) + + strlen(":") + + # endif +- strlen(CLASSPATH_CLASSES) + ++ strlen(TARGET_CLASSPATH_CLASSES) + + strlen("0"); + + _Jv_bootclasspath = MNEW(char, len); +@@ -881,7 +881,7 @@ + strcat(_Jv_bootclasspath, CACAO_VM_ZIP); + strcat(_Jv_bootclasspath, ":"); + # endif +- strcat(_Jv_bootclasspath, CLASSPATH_CLASSES); ++ strcat(_Jv_bootclasspath, TARGET_CLASSPATH_CLASSES); + #endif + } + +Index: cacao-0.98/m4/classpath.m4 +=================================================================== +--- cacao-0.98.orig/m4/classpath.m4 2007-04-23 22:06:07.000000000 +0200 ++++ cacao-0.98/m4/classpath.m4 2007-07-18 23:38:06.000000000 +0200 +@@ -82,6 +82,18 @@ + AC_SUBST(CLASSPATH_CLASSES) + ]) + ++dnl where are Java core library classes installed on the target ++ ++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[ ++AC_MSG_CHECKING(where Java core library classes are installed on the target) ++AC_ARG_WITH([target-classpath-classes], ++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])], ++ [TARGET_CLASSPATH_CLASSES=${withval}], ++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip]) ++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES}) ++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target]) ++AC_SUBST(TARGET_CLASSPATH_CLASSES) ++]) + + dnl where are Java core library native libraries installed + diff --git a/recipes/cacao/files/libmath.patch b/recipes/cacao/files/libmath.patch new file mode 100644 index 0000000000..f8a4e837e2 --- /dev/null +++ b/recipes/cacao/files/libmath.patch @@ -0,0 +1,53 @@ +Index: cacao-0.98/configure.ac +=================================================================== +--- cacao-0.98.orig/configure.ac 2007-07-21 12:11:47.000000000 +0200 ++++ cacao-0.98/configure.ac 2007-07-21 13:36:40.000000000 +0200 +@@ -234,6 +234,48 @@ + AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t])) + AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t])) + ++dnl The idea of this solutions comes from bochs-project configure.in ++dnl ++dnl Add the -lm library if math functions cannot be used without it. ++dnl This check is important on cygwin because of the bizarre way that they ++dnl have organized functions into libraries. On cygwin, both libc.a and ++dnl libm.a are symbolic links to a single lib libcygwin.a. This means that ++dnl 1) linking with -lm is not necessary, and ++dnl 2) linking with -lm is dangerous if the order of libraries is wrong ++dnl In particular, if you compile any program with -mno-cygwin and link with ++dnl -lm, it will crash instantly when it is run. This happens because the ++dnl linker incorrectly links the Cygwin libm.a (==libcygwin.a), which replaces ++dnl the ___main function instead of allowing it to be defined by ++dnl /usr/lib/mingw/libmingw32.a as it should be. ++dnl ++dnl On MacOS X, this test will find that -lm is unnecessary and leave it out. ++dnl ++dnl With uClibc and without libjvm cacao needs to be linked with -lm because of ++dnl the function scalbn ++dnl ++dnl Just check this math functions. If it is found without ++dnl -lm, then we must not need -lm. ++have_scalbn=0 ++AC_CHECK_FUNCS(scalbn, have_scalbn=1) ++AC_MSG_CHECKING(if math functions link without -lm) ++if test "$have_scalbn" = 1; then ++ AC_MSG_RESULT(yes) ++else ++ AC_MSG_RESULT(no) ++ LIBS="$LIBS -lm" ++ # use different functions to bypass configure caching ++ have_scalbl=0 ++ AC_CHECK_FUNCS(scalbl, have_scalbl=1) ++ AC_MSG_CHECKING(if math functions link with -lm) ++ if test "$have_scalbl" = 1; then ++ AC_MSG_RESULT(yes) ++ else ++ AC_MSG_RESULT(no) ++ # not sure we should warn the user, crash, etc. ++ # expect link failure ++ fi ++fi ++ + dnl Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST + AC_C_INLINE diff --git a/recipes/cacao/files/midpath.patch b/recipes/cacao/files/midpath.patch new file mode 100644 index 0000000000..b905f774af --- /dev/null +++ b/recipes/cacao/files/midpath.patch @@ -0,0 +1,372 @@ +Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c +=================================================================== +--- cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-05-16 10:06:15.000000000 +0200 ++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-07-22 00:15:55.000000000 +0200 +@@ -26,25 +26,53 @@ + + */ + ++#include <sys/stat.h> ++#include <stdlib.h> + + #include "config.h" +-#include "vm/types.h" ++ ++#include "arch.h" ++#include "mm/memory.h" + + #include "native/jni.h" + #include "native/native.h" + + #include "native/include/java_lang_Object.h" + #include "native/include/java_lang_String.h" +- ++#include "native/include/java_lang_Integer.h" + #include "native/include/com_sun_cldc_io_ResourceInputStream.h" ++#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h" + ++#include "vm/types.h" ++#include "vm/builtin.h" + #include "vm/vm.h" /* REMOVE ME: temporarily */ ++#include "vm/exceptions.h" ++#include "vm/initialize.h" ++#include "vm/stringlocal.h" ++#include "vm/properties.h" ++ ++#include "vmcore/class.h" ++#include "vmcore/classcache.h" ++#include "vmcore/linker.h" ++#include "vmcore/loader.h" ++#include "vmcore/options.h" ++#include "vmcore/statistics.h" ++#include "vmcore/suck.h" ++#include "vmcore/zip.h" ++ ++#include "toolbox/list.h" ++#include "toolbox/logging.h" ++#include "toolbox/util.h" + + + /* native methods implemented by this file ************************************/ + + static JNINativeMethod methods[] = { + { "open", "(Ljava/lang/String;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_open }, ++ { "bytesRemain", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_bytesRemain }, ++ { "readByte", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readByte }, ++ { "readBytes", "(Ljava/lang/Object;[BII)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readBytes }, ++ { "clone", "(Ljava/lang/Object;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_clone }, + }; + + /* _Jv_com_sun_cldc_io_ResourceInputStream_init ******************************** +@@ -68,13 +96,209 @@ + * Method: open + * Signature: (Ljava/lang/String;)Ljava/lang/Object; + */ +-JNIEXPORT java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name) ++JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name) + { +- vm_abort("Java_com_sun_cldc_io_ResourceInputStream_open: IMPLEMENT ME!"); ++ ++ list_classpath_entry *lce; ++ char *filename; ++ s4 filenamelen; ++ char *path; ++ FILE *classfile; ++ /*struct stat statBuffer; ++ int bufferSize = -1;*/ ++ utf *uname; ++ /*java_lang_Integer *fhandler;*/ ++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor; ++ classinfo *ci; ++ ++ ++ /* get the classname as char string (do it here for the warning at ++ the end of the function) */ ++ ++ uname = javastring_toutf((java_objectheader *)name, false); ++ filenamelen = utf_bytes(uname) + strlen("0"); ++ filename = MNEW(char, filenamelen); ++ utf_copy(filename, uname); ++ classfile = NULL; ++ ++ ++ /* walk through all classpath entries */ ++ ++ for (lce = list_first(list_classpath_entries); lce != NULL; ++ lce = list_next(list_classpath_entries, lce)) { ++ ++ path = MNEW(char, lce->pathlen + filenamelen); ++ strcpy(path, lce->path); ++ strcat(path, filename); ++ ++ classfile = fopen(path, "r"); ++ ++ MFREE(path, char, lce->pathlen + filenamelen); ++ ++ if (classfile) { /* file exists */ ++ break; ++ } ++ } ++ ++ MFREE(filename, char, filenamelen); ++ ++ if (classfile) { ++ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor")); ++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci); ++ fileDescriptor->handle = (int) classfile; ++ fileDescriptor->valid = (int) 0; ++ return (java_lang_Object*) fileDescriptor; ++ } else { ++ return NULL; ++ } ++ ++} ++ ++ ++/* ++ * Class: com_sun_cldc_io_ResourceInputStream ++ * Method: bytesRemain ++ * Signature: (Ljava/lang/Object;)I ++ */ ++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_bytesRemain(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) { ++ ++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor; ++ struct stat statBuffer; ++ FILE *file; ++ int fd; ++ int position; ++ int hposition; ++ ++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj; ++ file = (FILE *)fileDescriptor->handle; ++ ++ /* Change access position if needed */ ++ hposition = fileDescriptor->valid; ++ position = ftell(file); ++ if (position != hposition) { ++ fseek(file, hposition, SEEK_SET); ++ } ++ ++ fd = fileno(file); ++ if (fstat(fd, &statBuffer) != -1) { ++ return (statBuffer.st_size - hposition); ++ } else { ++ /* TODO Throw an IOException */ ++ return 0; ++ } + +- return NULL; + } + ++/* ++ * Class: com_sun_cldc_io_ResourceInputStream ++ * Method: readByte ++ * Signature: (Ljava/lang/Object;)I ++ */ ++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readByte(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) { ++ ++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor; ++ int readBytes = -1; ++ char byte; ++ FILE * file; ++ int position; ++ int hposition; ++ ++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj; ++ file = (FILE *)fileDescriptor->handle; ++ ++ /* Change access position if needed */ ++ hposition = fileDescriptor->valid; ++ position = ftell(file); ++ if (position != hposition) { ++ fseek(file, hposition, SEEK_SET); ++ } ++ ++ readBytes = fread(&byte, 1, 1, file); ++ ++ /* Check if EOF or an error occurred */ ++ if (readBytes != 1) { ++ if (feof(file)) { ++ return -1; ++ } else if (ferror(file)) { ++ /* TODO: throw an IOException */ ++ } ++ } ++ ++ /* Update access position */ ++ fileDescriptor->valid = ftell(file); ++ ++ return (byte & 0xFF); ++ ++} ++ ++/* ++ * Class: com_sun_cldc_io_ResourceInputStream ++ * Method: readBytes ++ * Signature: (Ljava/lang/Object;[BII)I ++ */ ++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readBytes(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj, java_bytearray* byteArray, s4 off, s4 len) { ++ ++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor; ++ int readBytes = -1; ++ FILE * file; ++ int position; ++ int hposition; ++ void *buf; ++ ++ /* get pointer to the buffer */ ++ buf = &(byteArray->data[off]); ++ ++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj; ++ file = (FILE *)fileDescriptor->handle; ++ ++ /* Change access position if needed */ ++ hposition = fileDescriptor->valid; ++ position = ftell(file); ++ if (position != hposition) { ++ fseek(file, hposition, SEEK_SET); ++ } ++ ++ readBytes = fread(buf, 1, len, file); ++ ++ /* Check if EOF or an error occurred */ ++ if (readBytes != len) { ++ if ((readBytes == 0) && feof(file)) { ++ return -1; ++ } else if (ferror(file)) { ++ /* TODO: throw an IOException */ ++ } ++ } ++ ++ /* Update access position */ ++ fileDescriptor->valid = ftell(file); ++ ++ return readBytes; ++} ++ ++/* ++ * Class: com_sun_cldc_io_ResourceInputStream ++ * Method: clone ++ * Signature: (Ljava/lang/Object;)Ljava/lang/Object; ++ */ ++JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_clone(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) { ++ ++ classinfo *ci; ++ com_sun_cldchi_jvm_FileDescriptor *srcFileDescriptor; ++ com_sun_cldchi_jvm_FileDescriptor *dstFileDescriptor; ++ ++ srcFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj; ++ ++ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor")); ++ dstFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci); ++ dstFileDescriptor->handle = srcFileDescriptor->handle; ++ dstFileDescriptor->valid = srcFileDescriptor->valid; ++ ++ return (java_lang_Object*) dstFileDescriptor; ++ ++} ++ ++ ++ + + /* + * These are local overrides for various environment variables in Emacs. +Index: cacao-0.98/src/native/vm/cldc1.1/Makefile.am +=================================================================== +--- cacao-0.98.orig/src/native/vm/cldc1.1/Makefile.am 2007-04-02 13:23:24.000000000 +0200 ++++ cacao-0.98/src/native/vm/cldc1.1/Makefile.am 2007-07-22 00:15:55.000000000 +0200 +@@ -38,6 +38,7 @@ + com_sun_cldc_io_j2me_socket_Protocol.c \ + com_sun_cldchi_io_ConsoleOutputStream.c \ + com_sun_cldchi_jvm_JVM.c \ ++ com_sun_cldchi_jvm_FileDescriptor.c \ + java_lang_Class.c \ + java_lang_Double.c \ + java_lang_Float.c \ +Index: cacao-0.98/src/native/include/Makefile.am +=================================================================== +--- cacao-0.98.orig/src/native/include/Makefile.am 2007-05-23 20:15:07.000000000 +0200 ++++ cacao-0.98/src/native/include/Makefile.am 2007-07-22 00:15:55.000000000 +0200 +@@ -74,6 +74,7 @@ + com_sun_cldc_io_j2me_socket_Protocol.h \ + com_sun_cldchi_io_ConsoleOutputStream.h \ + com_sun_cldchi_jvm_JVM.h \ ++ com_sun_cldchi_jvm_FileDescriptor.h \ + java_lang_Math.h \ + java_lang_Runtime.h \ + java_lang_System.h +Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c 2007-07-22 00:18:01.000000000 +0200 +@@ -0,0 +1,70 @@ ++/* src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c ++ ++ Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates, ++ R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, ++ C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, ++ Institut f. Computersprachen - TU Wien ++ ++ This file is part of CACAO. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2, or (at ++ your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++ 02110-1301, USA. ++ ++ $Id: java_lang_VMRuntime.c 5900 2006-11-04 17:30:44Z michi $ ++ ++*/ ++ ++#include "config.h" ++ ++#include <stdio.h> ++ ++#include "vm/types.h" ++ ++#include "native/jni.h" ++#include "native/native.h" ++ ++#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h" ++ ++/* native methods implemented by this file ************************************/ ++ ++static JNINativeMethod methods[] = { ++ { "finalize", "()V", (void *) (ptrint) &Java_com_sun_cldchi_jvm_FileDescriptor_finalize }, ++}; ++ ++/* _Jv_com_sun_cldchi_jvm_FileDescriptor_init ****************************** ++ ++ Register native functions. ++ ++*******************************************************************************/ ++ ++void _Jv_com_sun_cldchi_jvm_FileDescriptor_init(void) ++{ ++ utf *u; ++ ++ u = utf_new_char("com/sun/cldchi/jvm/FileDescriptor"); ++ ++ native_method_register(u, methods, NATIVE_METHODS_COUNT); ++} ++ ++/* ++ * Class: com/sun/cldchi/jvm/FileDescriptor ++ * Method: finalize ++ * Signature: ()V ++ */ ++JNIEXPORT void JNICALL Java_com_sun_cldchi_jvm_FileDescriptor_finalize(JNIEnv *env, struct com_sun_cldchi_jvm_FileDescriptor* this) { ++ /* printf("close\n"); */ ++ fclose((FILE *)this->handle); ++ ++} diff --git a/recipes/cacao/files/offset.h_arm.patch b/recipes/cacao/files/offset.h_arm.patch new file mode 100644 index 0000000000..7011527540 --- /dev/null +++ b/recipes/cacao/files/offset.h_arm.patch @@ -0,0 +1,35 @@ +Index: cacao-0.98/src/vm/jit/arm/offsets.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ cacao-0.98/src/vm/jit/arm/offsets.h 2007-07-17 23:35:56.000000000 +0200 +@@ -0,0 +1,30 @@ ++/* This file is machine generated, don't edit it! */ ++ ++/* define some sizeof()'s */ ++ ++#define sizevmarg 16 ++ ++ ++/* define some offsets */ ++ ++#define offobjvftbl 0 ++ ++ ++/* vftbl_t */ ++ ++#define offbaseval 20 ++#define offdiffval 24 ++ ++ ++/* classinfo */ ++ ++#define offclassvftbl 124 ++ ++ ++#define offvmargtype 0 ++#define offvmargdata 8 ++ ++ ++#define offcast_super_baseval 0 ++#define offcast_super_diffval 4 ++#define offcast_sub_baseval 8 diff --git a/recipes/cacao/files/offsets_make.patch b/recipes/cacao/files/offsets_make.patch new file mode 100644 index 0000000000..d6f9dbef3a --- /dev/null +++ b/recipes/cacao/files/offsets_make.patch @@ -0,0 +1,25 @@ +Index: cacao-0.98/src/vm/jit/arm/Makefile.am +=================================================================== +--- cacao-0.98.orig/src/vm/jit/arm/Makefile.am 2007-04-02 13:23:22.000000000 +0200 ++++ cacao-0.98/src/vm/jit/arm/Makefile.am 2007-07-17 23:26:33.000000000 +0200 +@@ -40,10 +40,6 @@ + AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir) -I$(top_builddir)/src + AM_CCASFLAGS = $(AM_CPPFLAGS) + +-BUILT_SOURCES = offsets.h +- +-CLEANFILES = offsets.h +- + noinst_HEADERS = \ + arch.h \ + machine-instr.h \ +@@ -72,9 +68,6 @@ + + $(srcdir)/asmpart.S: $(top_builddir)/config.h offsets.h + +-offsets.h: $(top_builddir)/src/vm/jit/tools/genoffsets $(top_builddir)/config.h +- $(top_builddir)/src/vm/jit/tools/genoffsets > offsets.h +- + + ## Local variables: + ## mode: Makefile diff --git a/recipes/cacao/files/vfp-compat.patch b/recipes/cacao/files/vfp-compat.patch new file mode 100644 index 0000000000..9feba6344e --- /dev/null +++ b/recipes/cacao/files/vfp-compat.patch @@ -0,0 +1,37 @@ +Index: cacao-0.99.3/src/vm/jit/arm/codegen.c +=================================================================== +--- cacao-0.99.3.orig/src/vm/jit/arm/codegen.c 2008-10-01 16:23:21.439856241 +0200 ++++ cacao-0.99.3/src/vm/jit/arm/codegen.c 2008-10-01 16:41:24.278841537 +0200 +@@ -2353,10 +2353,12 @@ + + d = md->returntype.type; + +-#if !defined(__SOFTFP__) ++#if !defined(__SOFTFP__) && !defined(__VFP_FP__) + /* TODO: this is only a hack, since we use R0/R1 for float + return! this depends on gcc; it is independent from +- our ENABLE_SOFTFLOAT define */ ++ our ENABLE_SOFTFLOAT define ++ It is only needed for -mfpu=fpa -mfloat-abi=hard! ++ */ + if (iptr->opc == ICMD_BUILTIN && d != TYPE_VOID && IS_FLT_DBL_TYPE(d)) { + #if 0 && !defined(NDEBUG) + dolog("BUILTIN that returns float or double (%s.%s)", m->clazz->name->text, m->name->text); +@@ -3019,7 +3021,7 @@ + s1 = (s4) (cd->mcodeptr - cd->mcodebase); + M_RECOMPUTE_PV(s1); + +-#if !defined(__SOFTFP__) ++#if !defined(__SOFTFP__) && !defined(__VFP_FP__) + /* TODO: this is only a hack, since we use R0/R1 for float return! */ + /* this depends on gcc; it is independent from our ENABLE_SOFTFLOAT define */ + if (md->returntype.type != TYPE_VOID && IS_FLT_DBL_TYPE(md->returntype.type)) { +@@ -3030,7 +3032,7 @@ + /* M_CAST_FLT_TO_INT_TYPED(md->returntype.type, REG_FRESULT, REG_RESULT_TYPED(md->returntype.type)); */ + if (IS_2_WORD_TYPE(md->returntype.type)) { + DCD(0xed2d8102); /* stfd f0, [sp, #-8]! */ +- M_LDRD_UPDATE(REG_RESULT_PACKED, REG_SP, 8); ++ M_LDRD_UPDATE(REG_RESULT_PACKED, REG_SP, 8); + } else { + DCD(0xed2d0101); /* stfs f0, [sp, #-4]!*/ + M_LDR_UPDATE(REG_RESULT, REG_SP, 4); |