diff options
author | Hongxu Jia <hongxu.jia@windriver.com> | 2014-08-11 10:23:46 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-08-23 23:02:00 +0100 |
commit | cf385a55873b0ef0935911dfa224694e08b4f559 (patch) | |
tree | 0f6506223dc5ad87aa6129e8d2d27440c3473001 | |
parent | ffb4933475e3214f103d9db98f6a71b60640b215 (diff) | |
download | poky-cf385a55873b0ef0935911dfa224694e08b4f559.tar.gz |
guile: workaround ice ssa corruption while DEBUG_BUILD
Add:
MACHINE = "qemux86-64"
DEBUG_BUILD = "1"
to local.conf and there was a ssa corruption to build guile:
..
Unable to coalesce ssa_names 48 and 3476 which are marked as MUST COALESCE.
sp_48(ab) and sp_3476(ab)
guile-2.0.11/libguile/vm-engine.c: In function 'vm_debug_engine':
guile-2.0.11/libguile/vm.c:673:19: internal compiler error: SSA corruption
#define VM_NAME vm_debug_engine
^
guile-2.0.11/libguile/vm-engine.c:39:1: note: in expansion of macro 'VM_NAME'
VM_NAME (SCM vm, SCM program, SCM *argv, int nargs)
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
...
Tweak libguile/vm-i-system.c to check the value of nshuf to workaround it.
The tweak didn't change previous logic.
[YOCTO #6411]
(From OE-Core rev: 3470bbf4ae178479bd090d7191d6f0469f154b0d)
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-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 |