diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-31 17:58:14 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-31 17:58:14 +0000 |
commit | ba570c7378a324629a41e31936e019f928f1393d (patch) | |
tree | d4a6231e6d80cd796725d7b0aa0c41daeceaa401 /gc.c | |
parent | 84ee429e83873a975150a9cdaca1568f424701c1 (diff) |
* configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
__builtin_setjmp, _setjmp over setjmp and sigsetjmp.
[ruby-core:16023], [ruby-core:16086]
* configure.in (--with-setjmp-type): new option to override the
default rule in the above.
* eval.c (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),
node.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and
RUBY_JMP_BUF.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -37,8 +37,10 @@ void re_free_registers _((struct re_registers*)); void rb_io_fptr_finalize _((struct OpenFile*)); -#if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP) -#define setjmp(env) _setjmp(env) +#define rb_setjmp(env) RUBY_SETJMP(env) +#define rb_jmp_buf rb_jmpbuf_t +#ifdef __CYGWIN__ +int _setjmp(), _longjmp(); #endif /* Make alloca work the best possible way. */ @@ -1283,6 +1285,8 @@ rb_gc_mark_frame(frame) #ifdef __GNUC__ #if defined(__human68k__) || defined(DJGPP) +#undef rb_setjmp +#undef rb_jmp_buf #if defined(__human68k__) typedef unsigned long rb_jmp_buf[8]; __asm__ (".even\n\ @@ -1291,9 +1295,6 @@ _rb_setjmp:\n\ movem.l d3-d7/a3-a5,(a0)\n\ moveq.l #0,d0\n\ rts"); -#ifdef setjmp -#undef setjmp -#endif #else #if defined(DJGPP) typedef unsigned long rb_jmp_buf[6]; @@ -1314,8 +1315,6 @@ _rb_setjmp:\n\ #endif #endif int rb_setjmp (rb_jmp_buf); -#define jmp_buf rb_jmp_buf -#define setjmp rb_setjmp #endif /* __human68k__ or DJGPP */ #endif /* __GNUC__ */ @@ -1364,7 +1363,7 @@ garbage_collect() FLUSH_REGISTER_WINDOWS; /* This assumes that all registers are saved into the jmp_buf (and stack) */ - setjmp(save_regs_gc_mark); + rb_setjmp(save_regs_gc_mark); mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *)); #if STACK_GROW_DIRECTION < 0 rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start); |