diff options
| -rw-r--r-- | meta/recipes-devtools/guile/files/workaround-ice-ssa-corruption.patch | 60 | ||||
| -rw-r--r-- | meta/recipes-devtools/guile/guile_2.0.11.bb | 1 |
2 files changed, 61 insertions, 0 deletions
diff --git a/meta/recipes-devtools/guile/files/workaround-ice-ssa-corruption.patch b/meta/recipes-devtools/guile/files/workaround-ice-ssa-corruption.patch new file mode 100644 index 0000000000..6c348384a5 --- /dev/null +++ b/meta/recipes-devtools/guile/files/workaround-ice-ssa-corruption.patch | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | libguile/vm-i-system.c: workaround ice ssa corruption while compiling with option -g -O | ||
| 2 | |||
| 3 | While compiling with option -g -O, there was a ssa corruption: | ||
| 4 | .. | ||
| 5 | Unable to coalesce ssa_names 48 and 3476 which are marked as MUST COALESCE. | ||
| 6 | sp_48(ab) and sp_3476(ab) | ||
| 7 | guile-2.0.11/libguile/vm-engine.c: In function 'vm_debug_engine': | ||
| 8 | guile-2.0.11/libguile/vm.c:673:19: internal compiler error: SSA corruption | ||
| 9 | #define VM_NAME vm_debug_engine | ||
| 10 | ^ | ||
| 11 | guile-2.0.11/libguile/vm-engine.c:39:1: note: in expansion of macro 'VM_NAME' | ||
| 12 | VM_NAME (SCM vm, SCM program, SCM *argv, int nargs) | ||
| 13 | ^ | ||
| 14 | Please submit a full bug report, | ||
| 15 | with preprocessed source if appropriate. | ||
| 16 | See <http://gcc.gnu.org/bugs.html> for instructions. | ||
| 17 | ... | ||
| 18 | |||
| 19 | Tweak libguile/vm-i-system.c to add boundary value check to workaround it. | ||
| 20 | |||
| 21 | Upstream-Status: Pending | ||
| 22 | |||
| 23 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> | ||
| 24 | --- | ||
| 25 | libguile/vm-i-system.c | 20 ++++++++++++++++---- | ||
| 26 | 1 file changed, 16 insertions(+), 4 deletions(-) | ||
| 27 | |||
| 28 | diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c | ||
| 29 | --- a/libguile/vm-i-system.c | ||
| 30 | +++ b/libguile/vm-i-system.c | ||
| 31 | @@ -625,10 +625,22 @@ VM_DEFINE_INSTRUCTION (47, bind_optionals_shuffle, "bind-optionals/shuffle", 6, | ||
| 32 | /* now shuffle up, from walk to ntotal */ | ||
| 33 | { | ||
| 34 | scm_t_ptrdiff nshuf = sp - walk + 1, i; | ||
| 35 | - sp = (fp - 1) + ntotal + nshuf; | ||
| 36 | - CHECK_OVERFLOW (); | ||
| 37 | - for (i = 0; i < nshuf; i++) | ||
| 38 | - sp[-i] = walk[nshuf-i-1]; | ||
| 39 | + /* check the value of nshuf to workaround ice ssa corruption */ | ||
| 40 | + /* while compiling with -O -g */ | ||
| 41 | + if (nshuf > 0) | ||
| 42 | + { | ||
| 43 | + sp = (fp - 1) + ntotal + nshuf; | ||
| 44 | + CHECK_OVERFLOW (); | ||
| 45 | + for (i = 0; i < nshuf; i++) | ||
| 46 | + sp[-i] = walk[nshuf-i-1]; | ||
| 47 | + } | ||
| 48 | + else | ||
| 49 | + { | ||
| 50 | + sp = (fp - 1) + ntotal + nshuf; | ||
| 51 | + CHECK_OVERFLOW (); | ||
| 52 | + for (i = 0; i < nshuf; i++) | ||
| 53 | + sp[-i] = walk[nshuf-i-1]; | ||
| 54 | + } | ||
| 55 | } | ||
| 56 | /* and fill optionals & keyword args with SCM_UNDEFINED */ | ||
| 57 | while (walk <= (fp - 1) + ntotal) | ||
| 58 | -- | ||
| 59 | 1.9.1 | ||
| 60 | |||
diff --git a/meta/recipes-devtools/guile/guile_2.0.11.bb b/meta/recipes-devtools/guile/guile_2.0.11.bb index 5b1e061af1..bd23c2b918 100644 --- a/meta/recipes-devtools/guile/guile_2.0.11.bb +++ b/meta/recipes-devtools/guile/guile_2.0.11.bb | |||
| @@ -19,6 +19,7 @@ SRC_URI = "${GNU_MIRROR}/guile/guile-${PV}.tar.xz \ | |||
| 19 | file://opensuse/guile-64bit.patch \ | 19 | file://opensuse/guile-64bit.patch \ |
| 20 | file://guile_2.0.6_fix_sed_error.patch \ | 20 | file://guile_2.0.6_fix_sed_error.patch \ |
| 21 | file://arm_endianness.patch \ | 21 | file://arm_endianness.patch \ |
| 22 | file://workaround-ice-ssa-corruption.patch \ | ||
| 22 | " | 23 | " |
| 23 | 24 | ||
| 24 | # file://debian/0001-Change-guile-to-guile-X.Y-for-info-pages.patch | 25 | # file://debian/0001-Change-guile-to-guile-X.Y-for-info-pages.patch |
