ruby-trunk-changes r45512 - r45519

今日はなかださん無双で __builtin_setjmp()/__builtin_longjmp() の検出のコンパイラバージョン毎の不具合修正や Solaris でのビルドエラー修正、(i386|x86_64)-linux でのマシンスタックのオーバフロー検出方法の変更などがありました。

nobu: r45512 2014-04-04 07:13:46 +0900

configure.in の __builtin_setjmp() の検出のところのインデント修正のみ。

nobu: r45513 2014-04-04 07:13:48 +0900

configure.in の __builtin_setjmp()/__builtin_longjmp() の検出で r45509 の変更で AC_TRY_LINK の成功時の中に break を入れてたのを、あらかじめ ac_cv_func___builtin_setjmp=no をセットしておいて yes に更新されてたら break するように書き換えています。 あの位置で break すると RUBY_WERROR_FLAG() によるオプションの復旧もスキップされてしまっていたとのこと。 Solaris でビルドエラーになっていたそうです。 [ruby-dev:48086] [Bug #9698]

svn: r45514 2014-04-04 07:13:51 +0900

version.h の日付更新。

nobu: r45515 2014-04-04 11:37:27 +0900

またしても __builtin_setjmp()/__builtin_longjmp() の検出で今度は clang 3.3 と 3.4 の不具合を回避しているそうです。詳細はわかりませんが __builtin_setjmp() の戻り値を使わないようにしているようです。 また r45508 での jmp_buf のかわりに (void**) を使うために追加してたキャストが (void *) だったので (void**) に修正しています。

nobu: r45516 2014-04-04 17:34:12 +0900

gcc 4.7 と 4.8 での未初期化変数の警告を抑制するための VAR_FROM_MEMORY() と VAR_INITIALIZED() マクロを追加して cont.c、eval_jump.c、proc.c、vm_eval.c などで利用しています。またローカル変数の定義を EXEC_TAG() の後のブロックに移動する変更など。

nobu: r45517 2014-04-04 17:37:25 +0900

i?86 および x86_64 のLinux においてマシンスタックのオーバフロー検出の方法に、sigaction(3) のコールバック関数に渡される ucontext_t 型の変数から取得できるスタックポインタの値を利用してアクセスしようとして fault したアドレスと同じメモリの page にあったらオーバフローを検出するようにしてみています。 pagesize を 4096 固定にしているけどこれはいいのかな。 [EXPERIMENTAL] としているのでとりあえず様子見の状態ということかもしれません。

nobu: r45518 2014-04-05 00:31:23 +0900

拡張ライブラリ readline の extconf.rb で rl_hook_func_t がない古いバージョンの対応(r45225、r45240、r45488 の一連の変更)の続きで、rl_hook_func_t の型の検出を rl_hook_func_t* というポインタの形で検出するように変更しています。 なんでも rl_hook_func_t が関数型なので、sizeof() を関数に対して使うと結果が未定義だそうで Solaris で検出に失敗していたそうです。関数ポインタならいいと。 [ruby-dev:48089] [Bug #9702]

svn: r45519 2014-04-05 00:31:28 +0900

version.h の日付更新。