diff options
Diffstat (limited to 'dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch')
-rw-r--r-- | dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch b/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch deleted file mode 100644 index c2f136ddd104..000000000000 --- a/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch +++ /dev/null @@ -1,63 +0,0 @@ -From f92888853439a8ded221f3423865c78de2a96a14 Mon Sep 17 00:00:00 2001 -From: Sergei Trofimovich <slyfox@gentoo.org> -Date: Sun, 5 Nov 2017 09:30:45 +0000 -Subject: ia64: Fix crash in thread context switch. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Fixes <https://bugs.gnu.org/29151> and <https://bugs.gentoo.org/613986>. - -Backtrace looks like that: - - Program terminated with signal SIGSEGV, Segmentation fault. - #0 0x200000000014a5c0 in scm_ia64_longjmp (JB=0x6000000000817020, VAL=1) at continuations.c:372 - 372 t->pending_rbs_continuation->backing_store, - [Current thread is 1 (Thread 0x2000000000049340 (LWP 8190))] - (gdb) bt - #0 0x200000000014a5c0 in scm_ia64_longjmp (JB=0x6000000000817020, VAL=1) at continuations.c:372 - #1 0x2000000000148e00 in scm_c_abort (vm=0x60000000000edea0, tag=0x6000000000795ba0, n=0, argv=0x60000fffff7f0ce0, cookie=-1) at control.c:239 - #2 0x2000000000149070 in scm_at_abort (tag=0x6000000000795ba0, args=0x304) at control.c:258 - (gdb) print t - $2 = (scm_i_thread *) 0x6000000000068000 - (gdb) print t->pending_rbs_continuation - $3 = (scm_t_contregs *) 0xffeb - -The problem here is the value of 't->pending_rbs_continuation' pointer. -It's supposed to poin to a register stack pointer or be NULL if not yet -backed up. - -The problem is it is never initialized to NULL at creation time and -contained garbage on stack. Sometimes people are lucky and have zeros -on stack and guile works. But sometimes there is something and guile -crashes. - -The fix is trivial: initialize 'pending_rbs_continuation = NULL' -at thread registration time (the same way other threads are registered). - -Reported-by: Matt Turner - -* libguile/threads.c (guilify_self_1): Initialize pending_rbs_continuation -to avoid crash on ia64. - -Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> -Signed-off-by: Ludovic Courtès <ludo@gnu.org> ---- - libguile/threads.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/libguile/threads.c b/libguile/threads.c -index 9ceb5b8..770f62c 100644 ---- a/libguile/threads.c -+++ b/libguile/threads.c -@@ -395,6 +395,7 @@ guilify_self_1 (struct GC_stack_base *base, int needs_unregister) - t.base = base->mem_base; - #ifdef __ia64__ - t.register_backing_store_base = base->reg_base; -+ t.pending_rbs_continuation = 0; - #endif - t.continuation_root = SCM_EOL; - t.continuation_base = t.base; --- -cgit v1.0-41-gc330 - |