diff options
| author | Henning Heinold <heinold@inf.fu-berlin.de> | 2013-04-06 06:13:05 +0000 |
|---|---|---|
| committer | Henning Heinold <heinold@inf.fu-berlin.de> | 2013-04-14 18:15:23 +0200 |
| commit | 300e9994968c2956656f71b54f453d741ee806fd (patch) | |
| tree | eaef74bc1f5c19df4d2fb207507270ddaeb8f776 | |
| parent | 7fb9465e5c2db618eedb59de5e5e013fd86cc06d (diff) | |
| download | meta-java-300e9994968c2956656f71b54f453d741ee806fd.tar.gz | |
openjdk-6: add arm thumb2 fix for version 1.12.4
* bump PR
Signed-off-by: Henning Heinold <heinold@inf.fu-berlin.de>
| -rw-r--r-- | recipes-core/openjdk/openjdk-6-6b27/arm-thumb2-fix.patch | 95 | ||||
| -rw-r--r-- | recipes-core/openjdk/openjdk-6_6b27-1.12.4.bb | 4 |
2 files changed, 98 insertions, 1 deletions
diff --git a/recipes-core/openjdk/openjdk-6-6b27/arm-thumb2-fix.patch b/recipes-core/openjdk/openjdk-6-6b27/arm-thumb2-fix.patch new file mode 100644 index 0000000..54b8b7b --- /dev/null +++ b/recipes-core/openjdk/openjdk-6-6b27/arm-thumb2-fix.patch | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | |||
| 2 | # HG changeset patch | ||
| 3 | # User chrisphi | ||
| 4 | # Date 1365166908 14400 | ||
| 5 | # Node ID 623621d29d04d87dc17f376b3917464e59026248 | ||
| 6 | # Parent 12f5fe9e85d373261c29be3bbd37ffc364678978 | ||
| 7 | Bug 1362: Fedora 19 / rawhide FTBFS SIGILL | ||
| 8 | Summary: Fix reg alloc problem in thumb2.cpp compiler. | ||
| 9 | |||
| 10 | diff -r 12f5fe9e85d3 -r 623621d29d04 arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp | ||
| 11 | --- a/arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp Wed Mar 20 11:00:45 2013 +0000 | ||
| 12 | +++ b/arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp Fri Apr 05 09:01:48 2013 -0400 | ||
| 13 | @@ -1,5 +1,6 @@ | ||
| 14 | /* | ||
| 15 | * Copyright 2009, 2010 Edward Nevill | ||
| 16 | + * Copyright 2013 Red Hat | ||
| 17 | * | ||
| 18 | * This code is free software; you can redistribute it and/or modify it | ||
| 19 | * under the terms of the GNU General Public License version 2 only, as | ||
| 20 | @@ -399,6 +400,8 @@ | ||
| 21 | |||
| 22 | static jmp_buf compiler_error_env; | ||
| 23 | |||
| 24 | +#define J_BogusImplementation() longjmp(compiler_error_env, COMPILER_RESULT_FAILED) | ||
| 25 | + | ||
| 26 | #ifdef PRODUCT | ||
| 27 | |||
| 28 | #define JASSERT(cond, msg) 0 | ||
| 29 | @@ -3505,8 +3508,6 @@ | ||
| 30 | #define TOSM2(jstack) ((jstack)->stack[(jstack)->depth-3]) | ||
| 31 | #define TOSM3(jstack) ((jstack)->stack[(jstack)->depth-4]) | ||
| 32 | |||
| 33 | -#define POP(jstack) ((jstack)->stack[--(jstack)->depth]) | ||
| 34 | -#define PUSH(jstack, r) ((jstack)->stack[(jstack)->depth++] = (r)) | ||
| 35 | #define SWAP(jstack) do { \ | ||
| 36 | Reg r = (jstack)->stack[(jstack)->depth-1]; \ | ||
| 37 | (jstack)->stack[(jstack)->depth-1] = (jstack)->stack[(jstack)->depth-2]; \ | ||
| 38 | @@ -3516,6 +3517,17 @@ | ||
| 39 | #define JSTACK_REG(jstack) jstack_reg(jstack) | ||
| 40 | #define JSTACK_PREFER(jstack, prefer) jstack_prefer(jstack, prefer) | ||
| 41 | |||
| 42 | +int PUSH(Thumb2_Stack *jstack, unsigned reg) { | ||
| 43 | + jstack->stack[jstack->depth] = reg; | ||
| 44 | + jstack->depth++; | ||
| 45 | + return reg; | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +int POP(Thumb2_Stack *jstack) { | ||
| 49 | + jstack->depth--; | ||
| 50 | + return jstack->stack[jstack->depth]; | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | static const unsigned last_clear_bit[] = { | ||
| 54 | 3, // 0000 | ||
| 55 | 3, // 0001 | ||
| 56 | @@ -3532,11 +3544,13 @@ | ||
| 57 | 1, // 1100 | ||
| 58 | 1, // 1101 | ||
| 59 | 0, // 1110 | ||
| 60 | - 0, // 1111 | ||
| 61 | + 0, // 1111 // No registers available... | ||
| 62 | }; | ||
| 63 | |||
| 64 | #define LAST_CLEAR_BIT(mask) last_clear_bit[mask] | ||
| 65 | |||
| 66 | +unsigned long thumb2_register_allocation_failures = 0; | ||
| 67 | + | ||
| 68 | unsigned jstack_reg(Thumb2_Stack *jstack) | ||
| 69 | { | ||
| 70 | unsigned *stack = jstack->stack; | ||
| 71 | @@ -3547,7 +3561,10 @@ | ||
| 72 | |||
| 73 | for (i = 0; i < depth; i++) mask |= 1 << stack[i]; | ||
| 74 | mask &= (1 << STACK_REGS) - 1; | ||
| 75 | - JASSERT(mask != (1 << STACK_REGS) - 1, "No free reg in push"); | ||
| 76 | + if (mask >= (1 << STACK_REGS) - 1) { // No free registers | ||
| 77 | + thumb2_register_allocation_failures++; | ||
| 78 | + J_BogusImplementation(); | ||
| 79 | + } | ||
| 80 | r = LAST_CLEAR_BIT(mask); | ||
| 81 | return r; | ||
| 82 | } | ||
| 83 | @@ -3563,7 +3580,10 @@ | ||
| 84 | for (i = 0; i < depth; i++) mask |= 1 << stack[i]; | ||
| 85 | mask &= (1 << STACK_REGS) - 1; | ||
| 86 | if ((prefer & ~mask) & 0x0f) mask |= (~prefer & ((1 << STACK_REGS) - 1)); | ||
| 87 | - JASSERT(mask != (1 << STACK_REGS) - 1, "No free reg in push"); | ||
| 88 | + if (mask >= (1 << STACK_REGS) - 1) { // No free registers | ||
| 89 | + thumb2_register_allocation_failures++; | ||
| 90 | + J_BogusImplementation(); | ||
| 91 | + } | ||
| 92 | r = LAST_CLEAR_BIT(mask); | ||
| 93 | return r; | ||
| 94 | } | ||
| 95 | |||
diff --git a/recipes-core/openjdk/openjdk-6_6b27-1.12.4.bb b/recipes-core/openjdk/openjdk-6_6b27-1.12.4.bb index da36da5..d368abe 100644 --- a/recipes-core/openjdk/openjdk-6_6b27-1.12.4.bb +++ b/recipes-core/openjdk/openjdk-6_6b27-1.12.4.bb | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | require openjdk-6-release-6b27.inc | 1 | require openjdk-6-release-6b27.inc |
| 2 | 2 | ||
| 3 | PR = "${INC_PR}.0" | 3 | PR = "${INC_PR}.1" |
| 4 | 4 | ||
| 5 | SRC_URI[iced.md5sum] = "85bfc656c20fb762b72b71d3492a326c" | 5 | SRC_URI[iced.md5sum] = "85bfc656c20fb762b72b71d3492a326c" |
| 6 | SRC_URI[iced.sha256sum] = "eb326c6ae0147ca4abe4bd79e52c1edc2ef08e5e008230e24bee3abb39e14dda" | 6 | SRC_URI[iced.sha256sum] = "eb326c6ae0147ca4abe4bd79e52c1edc2ef08e5e008230e24bee3abb39e14dda" |
| 7 | 7 | ||
| 8 | OEPATCHES += "file://arm-thumb2-fix.patch" | ||
| 9 | |||
| 8 | ICEDTEAPATCHES += "file://icedtea-jdk-rmi-crosscompile.patch;apply=no" | 10 | ICEDTEAPATCHES += "file://icedtea-jdk-rmi-crosscompile.patch;apply=no" |
| 9 | 11 | ||
| 10 | DISTRIBUTION_PATCHES += "patches/icedtea-jdk-rmi-crosscompile.patch" | 12 | DISTRIBUTION_PATCHES += "patches/icedtea-jdk-rmi-crosscompile.patch" |
