diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-19 05:31:58 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-19 05:31:58 +0000 |
| commit | 0d6f4f36682f5dd9d8932e931104ba40f0325ed0 (patch) | |
| tree | 15cf4bf24244d6f071ec62804d68e1f70c082987 | |
| parent | 7a45568809251ea36af73a070f75925feae973a7 (diff) | |
* eval.c (ruby_cleanup): the order of local variables on stack is
undefined. should use outermost VALUE for ruby_init_stack.
* gc.c (rb_stack_growup_p): returns stack grows up.
* gc.c (Init_stack, ruby_init_stack): allows volatile pointer.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@23209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 9 | ||||
| -rw-r--r-- | eval.c | 11 | ||||
| -rw-r--r-- | gc.c | 17 | ||||
| -rw-r--r-- | ruby.h | 6 | ||||
| -rw-r--r-- | version.h | 6 |
5 files changed, 37 insertions, 12 deletions
@@ -1,3 +1,12 @@ +Sun Apr 19 14:31:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * eval.c (ruby_cleanup): the order of local variables on stack is + undefined. should use outermost VALUE for ruby_init_stack. + + * gc.c (rb_stack_growup_p): returns stack grows up. + + * gc.c (Init_stack, ruby_init_stack): allows volatile pointer. + Sat Apr 18 19:44:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * eval.c (safe_mutex_lock): pthread_cleanup_push() must not be @@ -95,6 +95,15 @@ char *strrchr _((const char*,const char)); #include "vmsruby_private.h" #endif +#if STACK_GROW_DIRECTION > 0 +# define STACK_UPPER(x, a, b) a +#elif STACK_GROW_DIRECTION < 0 +# define STACK_UPPER(x, a, b) b +#else +int rb_stack_growup_p _((VALUE *addr)); +# define STACK_UPPER(x, a, b) (rb_stack_growup_p(x) ? a : b) +#endif + #ifdef USE_CONTEXT NORETURN(static void rb_jump_context(rb_jmpbuf_t, int)); @@ -1620,7 +1629,7 @@ ruby_cleanup(ex) errs[1] = ruby_errinfo; ruby_safe_level = 0; - ruby_init_stack((void *)&state); + ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]); PUSH_THREAD_TAG(); PUSH_ITER(ITER_NOT); if ((state = EXEC_TAG()) == 0) { @@ -533,7 +533,7 @@ stack_end_address(VALUE **stack_end_p) static int grow_direction; static int stack_grow_direction(addr) - VALUE *addr; + volatile VALUE *addr; { SET_STACK_END; @@ -542,6 +542,13 @@ stack_grow_direction(addr) } # define stack_growup_p(x) ((grow_direction ? grow_direction : stack_grow_direction(x)) > 0) # define STACK_UPPER(x, a, b) (stack_growup_p(x) ? a : b) + +int +rb_stack_growup_p(addr) + volatile VALUE *addr; +{ + return stack_growup_p(addr); +} #endif #define GC_WATER_MARK 512 @@ -1570,7 +1577,7 @@ ruby_set_stack_size(size) void Init_stack(addr) - VALUE *addr; + volatile VALUE *addr; { ruby_init_stack(addr); } @@ -1583,16 +1590,16 @@ ruby_init_stack(addr , bsp #endif ) - VALUE *addr; + volatile VALUE *addr; #ifdef __ia64 void *bsp; #endif { if (!rb_gc_stack_start || STACK_UPPER(&addr, - rb_gc_stack_start > addr, + addr && rb_gc_stack_start > addr, rb_gc_stack_start < addr)) { - rb_gc_stack_start = addr; + rb_gc_stack_start = (VALUE *)addr; } #ifdef __ia64 if (!rb_gc_register_stack_start || @@ -594,14 +594,14 @@ NORETURN(void rb_throw _((const char*,VALUE))); VALUE rb_require _((const char*)); #ifdef __ia64 -void ruby_init_stack(VALUE*, void*); +void ruby_init_stack(volatile VALUE*, void*); #define ruby_init_stack(addr) ruby_init_stack(addr, rb_ia64_bsp()) #else -void ruby_init_stack(VALUE*); +void ruby_init_stack(volatile VALUE*); #endif #define Init_stack(addr) ruby_init_stack(addr) #define RUBY_INIT_STACK \ - VALUE variable_in_this_stack_frame; \ + volatile VALUE variable_in_this_stack_frame; \ ruby_init_stack(&variable_in_this_stack_frame); void ruby_init _((void)); @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.8" -#define RUBY_RELEASE_DATE "2009-04-18" +#define RUBY_RELEASE_DATE "2009-04-19" #define RUBY_VERSION_CODE 188 -#define RUBY_RELEASE_CODE 20090418 +#define RUBY_RELEASE_CODE 20090419 #define RUBY_PATCHLEVEL -1 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 8 #define RUBY_RELEASE_YEAR 2009 #define RUBY_RELEASE_MONTH 4 -#define RUBY_RELEASE_DAY 18 +#define RUBY_RELEASE_DAY 19 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; |
