FreeBSD Bugzilla – Attachment 165371 Details for
Bug 206111
lang/ruby23: fix setjmp clobbered variables (using clang 3.8.0 and optimizing for 'high' CPUs)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Mark several variables volatile so they won't have undefined state after setjmp()
lang__ruby23-fix-setjmp-clobbers-1.diff (text/plain), 5.80 KB, created by
Dimitry Andric
on 2016-01-10 18:38:25 UTC
(
hide
)
Description:
Mark several variables volatile so they won't have undefined state after setjmp()
Filename:
MIME Type:
Creator:
Dimitry Andric
Created:
2016-01-10 18:38:25 UTC
Size:
5.80 KB
patch
obsolete
>Index: lang/ruby23/files/patch-eval.c >=================================================================== >--- lang/ruby23/files/patch-eval.c (nonexistent) >+++ lang/ruby23/files/patch-eval.c (working copy) >@@ -0,0 +1,20 @@ >+--- eval.c.orig 2015-11-20 01:17:25.000000000 +0100 >++++ eval.c 2016-01-10 19:24:26.101707000 +0100 >+@@ -788,7 +788,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; >+@@ -854,7 +854,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; >+ > >Property changes on: lang/ruby23/files/patch-eval.c >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: lang/ruby23/files/patch-eval_error.c >=================================================================== >--- lang/ruby23/files/patch-eval_error.c (nonexistent) >+++ lang/ruby23/files/patch-eval_error.c (working copy) >@@ -0,0 +1,15 @@ >+--- eval_error.c.orig 2015-10-31 02:22:51.000000000 +0100 >++++ eval_error.c 2016-01-10 19:24:26.104099000 +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; > >Property changes on: lang/ruby23/files/patch-eval_error.c >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: lang/ruby23/files/patch-thread.c >=================================================================== >--- lang/ruby23/files/patch-thread.c (nonexistent) >+++ lang/ruby23/files/patch-thread.c (working copy) >@@ -0,0 +1,13 @@ >+--- thread.c.orig 2015-12-09 01:38:32.000000000 +0100 >++++ thread.c 2016-01-10 19:24:26.106834000 +0100 >+@@ -466,8 +466,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; >+ volatile int sleeping = 0; >+ >+ if (vm->main_thread != th) { > >Property changes on: lang/ruby23/files/patch-thread.c >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: lang/ruby23/files/patch-vm_eval.c >=================================================================== >--- lang/ruby23/files/patch-vm_eval.c (nonexistent) >+++ lang/ruby23/files/patch-vm_eval.c (working copy) >@@ -0,0 +1,22 @@ >+--- vm_eval.c.orig 2015-12-12 10:51:30.000000000 +0100 >++++ vm_eval.c 2016-01-10 19:24:26.109468000 +0100 >+@@ -1267,7 +1267,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; >+@@ -2001,8 +2001,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); > >Property changes on: lang/ruby23/files/patch-vm_eval.c >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property >Index: lang/ruby23/files/patch-vm_trace.c >=================================================================== >--- lang/ruby23/files/patch-vm_trace.c (nonexistent) >+++ lang/ruby23/files/patch-vm_trace.c (working copy) >@@ -0,0 +1,11 @@ >+--- vm_trace.c.orig 2015-12-14 03:52:14.000000000 +0100 >++++ vm_trace.c 2016-01-10 19:24:26.111975000 +0100 >+@@ -389,7 +389,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; > >Property changes on: lang/ruby23/files/patch-vm_trace.c >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 206111
: 165371