diff options
author | Steve Wills <swills@FreeBSD.org> | 2016-12-07 12:47:30 +0000 |
---|---|---|
committer | Steve Wills <swills@FreeBSD.org> | 2016-12-07 12:47:30 +0000 |
commit | 33ba518bad0a8d7836ba0d2c3c258ec4be519970 (patch) | |
tree | d9a90850d0125875f654045ee3ee9b78ab1e0556 | |
parent | Update to the 20161206 snapshot of GCC 5.4.1. (diff) |
lang/ruby22: fix setjmp clobbered variables
PR: 206110
Submitted by: dim
-rw-r--r-- | Mk/bsd.ruby.mk | 2 | ||||
-rw-r--r-- | lang/ruby22/files/patch-eval.c | 20 | ||||
-rw-r--r-- | lang/ruby22/files/patch-eval_error.c | 15 | ||||
-rw-r--r-- | lang/ruby22/files/patch-thread.c | 13 | ||||
-rw-r--r-- | lang/ruby22/files/patch-vm_eval.c | 31 | ||||
-rw-r--r-- | lang/ruby22/files/patch-vm_trace.c | 11 |
6 files changed, 91 insertions, 1 deletions
diff --git a/Mk/bsd.ruby.mk b/Mk/bsd.ruby.mk index ca65d7c1d344..f35b63b87ea8 100644 --- a/Mk/bsd.ruby.mk +++ b/Mk/bsd.ruby.mk @@ -165,7 +165,7 @@ RUBY21= "" # PLIST_SUB helpers # Ruby 2.2 # RUBY_RELVERSION= 2.2.6 -RUBY_PORTREVISION= 0 +RUBY_PORTREVISION= 1 RUBY_PORTEPOCH= 1 RUBY_PATCHLEVEL= 0 RUBY22= "" # PLIST_SUB helpers diff --git a/lang/ruby22/files/patch-eval.c b/lang/ruby22/files/patch-eval.c new file mode 100644 index 000000000000..c9e410810785 --- /dev/null +++ b/lang/ruby22/files/patch-eval.c @@ -0,0 +1,20 @@ +--- eval.c.orig 2014-12-09 02:16:27.000000000 +0100 ++++ eval.c 2016-01-10 19:10:59.326340000 +0100 +@@ -797,7 +797,7 @@ rb_rescue2(VALUE (* b_proc) (ANYARGS), V + { + int state; + rb_thread_t *th = GET_THREAD(); +- rb_control_frame_t *cfp = th->cfp; ++ rb_control_frame_t *volatile cfp = th->cfp; + volatile VALUE result = Qfalse; + volatile VALUE e_info = th->errinfo; + va_list args; +@@ -863,7 +863,7 @@ rb_protect(VALUE (* proc) (VALUE), VALUE + volatile VALUE result = Qnil; + volatile int status; + rb_thread_t *th = GET_THREAD(); +- rb_control_frame_t *cfp = th->cfp; ++ rb_control_frame_t *volatile cfp = th->cfp; + struct rb_vm_protect_tag protect_tag; + rb_jmpbuf_t org_jmpbuf; + diff --git a/lang/ruby22/files/patch-eval_error.c b/lang/ruby22/files/patch-eval_error.c new file mode 100644 index 000000000000..400ef4a4448d --- /dev/null +++ b/lang/ruby22/files/patch-eval_error.c @@ -0,0 +1,15 @@ +--- eval_error.c.orig 2015-01-17 08:47:29.000000000 +0100 ++++ eval_error.c 2016-01-10 19:11:10.416384000 +0100 +@@ -80,9 +80,9 @@ static void + error_print(void) + { + volatile VALUE errat = Qundef; +- rb_thread_t *th = GET_THREAD(); +- VALUE errinfo = th->errinfo; +- int raised_flag = th->raised_flag; ++ rb_thread_t *volatile th = GET_THREAD(); ++ volatile VALUE errinfo = th->errinfo; ++ volatile int raised_flag = th->raised_flag; + volatile VALUE eclass = Qundef, e = Qundef; + const char *volatile einfo; + volatile long elen; diff --git a/lang/ruby22/files/patch-thread.c b/lang/ruby22/files/patch-thread.c new file mode 100644 index 000000000000..992da4cd8608 --- /dev/null +++ b/lang/ruby22/files/patch-thread.c @@ -0,0 +1,13 @@ +--- thread.c.orig 2015-02-20 14:53:23.000000000 +0100 ++++ thread.c 2016-01-10 19:11:32.423524000 +0100 +@@ -462,8 +462,8 @@ rb_threadptr_unlock_all_locking_mutexes( + void + rb_thread_terminate_all(void) + { +- rb_thread_t *th = GET_THREAD(); /* main thread */ +- rb_vm_t *vm = th->vm; ++ rb_thread_t *volatile th = GET_THREAD(); /* main thread */ ++ rb_vm_t *volatile vm = th->vm; + + if (vm->main_thread != th) { + rb_bug("rb_thread_terminate_all: called by child thread (%p, %p)", diff --git a/lang/ruby22/files/patch-vm_eval.c b/lang/ruby22/files/patch-vm_eval.c new file mode 100644 index 000000000000..350be9dc9325 --- /dev/null +++ b/lang/ruby22/files/patch-vm_eval.c @@ -0,0 +1,31 @@ +--- vm_eval.c.orig 2015-11-29 10:01:12.000000000 +0100 ++++ vm_eval.c 2016-01-10 19:11:40.066355000 +0100 +@@ -1111,7 +1111,7 @@ rb_iterate(VALUE (* it_proc) (VALUE), VA + int state; + volatile VALUE retval = Qnil; + NODE *node = NEW_IFUNC(bl_proc, data2); +- rb_thread_t *th = GET_THREAD(); ++ rb_thread_t *volatile th = GET_THREAD(); + rb_control_frame_t *volatile cfp = th->cfp; + + node->nd_aid = rb_frame_this_func(); +@@ -1239,7 +1239,7 @@ eval_string_with_cref(VALUE self, VALUE + int state; + VALUE result = Qundef; + VALUE envval; +- rb_thread_t *th = GET_THREAD(); ++ rb_thread_t *volatile th = GET_THREAD(); + rb_env_t *env = NULL; + rb_block_t block, *base_block; + volatile int parse_in_eval; +@@ -1983,8 +1983,8 @@ rb_catch_protect(VALUE t, rb_block_call_ + { + int state; + volatile VALUE val = Qnil; /* OK */ +- rb_thread_t *th = GET_THREAD(); +- rb_control_frame_t *saved_cfp = th->cfp; ++ rb_thread_t *volatile th = GET_THREAD(); ++ rb_control_frame_t *volatile saved_cfp = th->cfp; + volatile VALUE tag = t; + + TH_PUSH_TAG(th); diff --git a/lang/ruby22/files/patch-vm_trace.c b/lang/ruby22/files/patch-vm_trace.c new file mode 100644 index 000000000000..c049d414e9f8 --- /dev/null +++ b/lang/ruby22/files/patch-vm_trace.c @@ -0,0 +1,11 @@ +--- vm_trace.c.orig 2015-11-08 15:49:09.000000000 +0100 ++++ vm_trace.c 2016-01-10 19:11:46.862754000 +0100 +@@ -390,7 +390,7 @@ rb_suppress_tracing(VALUE (*func)(VALUE) + volatile int raised; + volatile int outer_state; + VALUE result = Qnil; +- rb_thread_t *th = GET_THREAD(); ++ rb_thread_t *volatile th = GET_THREAD(); + int state; + const int tracing = th->trace_arg ? 1 : 0; + rb_trace_arg_t dummy_trace_arg; |