lang/ruby22: fix setjmp clobbered variables

PR:		206110
Submitted by:	dim
This commit is contained in:
Steve Wills 2016-12-07 12:47:30 +00:00
parent b03ef706b3
commit 33ba518bad
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=428055
6 changed files with 91 additions and 1 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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)",

View File

@ -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);

View File

@ -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;