ruby-changes:4379
From: ko1@a...
Date: Tue, 1 Apr 2008 02:58:51 +0900 (JST)
Subject: [ruby-changes:4379] nobu - Ruby:r15870 (ruby_1_8): * configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
nobu 2008-04-01 02:58:14 +0900 (Tue, 01 Apr 2008) New Revision: 15870 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/configure.in branches/ruby_1_8/eval.c branches/ruby_1_8/gc.c branches/ruby_1_8/node.h Log: * 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. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/configure.in?r1=15870&r2=15869&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=15870&r2=15869&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/node.h?r1=15870&r2=15869&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/gc.c?r1=15870&r2=15869&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/eval.c?r1=15870&r2=15869&diff_format=u Index: ruby_1_8/configure.in =================================================================== --- ruby_1_8/configure.in (revision 15869) +++ ruby_1_8/configure.in (revision 15870) @@ -572,6 +572,54 @@ sigaction sigsetjmp _setjmp setsid telldir seekdir fchmod\ mktime timegm gettimeofday\ cosh sinh tanh round setuid setgid setenv unsetenv) + +AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp, +[AC_TRY_LINK([@%:@include <setjmp.h> + jmp_buf jb; void t() {__builtin_longjmp(jb, 1);}], + [__builtin_setjmp(jb);], + [ac_cv_func___builtin_setjmp=yes], + [ac_cv_func___builtin_setjmp=no]) +]) + +AC_MSG_CHECKING(for setjmp type) +AC_ARG_WITH(setjmp-type, + [ --with-setjmp-type select setjmp type], [ + case $withval in + __builtin_setjmp) setjmp_prefix=__builtin_;; + _setjmp) setjmp_prefix=_;; + sigsetjmp) setjmp_prefix=sig;; + setjmp) setjmp_prefix=;; + '') unset setjmp_prefix;; + *) AC_MSG_ERROR(invalid setjmp type: $withval);; + esac], [unset setjmp_prefix]) +if test ${setjmp_prefix+set}; then + if test "${setjmp_prefix}" && eval test '$ac_cv_'${setjmp_prefix}setjmp = no; then + AC_MSG_ERROR(${setjmp_prefix}setjmp is not available) + fi +elif test "$ac_cv_func___builtin_setjmp" = yes; then + setjmp_prefix=__builtin_ +elif test "$ac_cv_func__setjmp" = yes; then + setjmp_prefix=_ +elif test "$ac_cv_func_sigsetjmp" = yes; then + case $target_os in + solaris*|cygwin*) + setjmp_prefix=;; + *) + setjmp_prefix=sig;; + esac +else + setjmp_prefix= +fi +if test $setjmp_prefix = sig; then + setjmp_sigmask=yes +else + unset setjmp_sigmask +fi +AC_MSG_RESULT(${setjmp_prefix}setjmp) +AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})]) +AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)]) +AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf) + AC_ARG_ENABLE(setreuid, [ --enable-setreuid use setreuid()/setregid() according to need even if obsolete.], [use_setreuid=$enableval]) Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 15869) +++ ruby_1_8/ChangeLog (revision 15870) @@ -1,3 +1,16 @@ +Tue Apr 1 02:58:13 2008 Nobuyoshi Nakada <nobu@r...> + + * 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_intern.h (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp), + vm_core.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and + RUBY_JMP_BUF. + Tue Apr 1 01:55:52 2008 Nobuyoshi Nakada <nobu@r...> * lib/resolv.rb (Resolv::Config.default_config_hash): requires Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 15869) +++ ruby_1_8/eval.c (revision 15870) @@ -193,14 +193,11 @@ POST_GETCONTEXT, \ (j)->status) #else -# if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP) -# define ruby_setjmp(just_before_setjmp, env) \ - ((just_before_setjmp), _setjmp(env)) -# define ruby_longjmp(env,val) _longjmp(env,val) -# else -# define ruby_setjmp(just_before_setjmp, env) \ - ((just_before_setjmp), setjmp(env)) -# define ruby_longjmp(env,val) longjmp(env,val) +# define ruby_setjmp(just_before_setjmp, env) \ + ((just_before_setjmp), RUBY_SETJMP(env)) +# define ruby_longjmp(env,val) RUBY_LONGJMP(env,val) +# ifdef __CYGWIN__ +int _setjmp(), _longjmp(); # endif #endif Index: ruby_1_8/gc.c =================================================================== --- ruby_1_8/gc.c (revision 15869) +++ ruby_1_8/gc.c (revision 15870) @@ -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 @@ #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 @@ 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 @@ #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 @@ 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); Index: ruby_1_8/node.h =================================================================== --- ruby_1_8/node.h (revision 15869) +++ ruby_1_8/node.h (revision 15870) @@ -387,7 +387,7 @@ volatile int status; } rb_jmpbuf_t[1]; #else -typedef jmp_buf rb_jmpbuf_t; +typedef RUBY_JMP_BUF rb_jmpbuf_t; #endif enum rb_thread_status { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/