ruby-trunk-changes r65583 - r65604

今日も MJIT 用のビルドディレクトリの設定とかコンパイラのパスの展開とかの変更などがありました。

hsbt: r65583 2018-11-07 05:47:09 +0900

bundler を同梱したことでパッケージサイズが急に大きくなるのを抑えるため spec/bundler/support/artifice/vcr_cassettes/ の下のファイルを削除しています。 [ruby-core:84396] [Bug #14219]

mame: r65584 2018-11-07 07:55:57 +0900

r65553 の rb_wait_for_single_fd() で struct pollfd::revents をクリアするのを削ってましたが ppoll(2) を呼ばないパスもあるため未初期化のまま触る可能性があるということで revert しています。 Coverity Scan が発見したとのこと。

svn: r65585 2018-11-07 07:56:00 +0900

version.h の日付更新。

nobu: r65586 2018-11-07 08:50:50 +0900

r65577 の configure で MJIT_CC のコマンドをフルパスに展開する処理で cygpath でファイルパスを変換する条件の $build_os と $host_os が逆になってたのを修正。Cygwin 上で MinGW 版のビルドをする時ということですかね。いや、逆か。ややこしい。

nobu: r65587 2018-11-07 11:49:26 +0900

r65563 の MJIT 用ビルドディレクトリの変数への埋め込みのリトライ。前回はすぐ revert されてたので見逃してましたが PRELOADENV による動的にリンクする共有ライブラリを指定する環境変数(LD_LIBRARY_PATH とか)を使って make test-all の時だけ MJIT_BUILD_DIR をすりかえるというハックを使っているようです。なるほどー。

nobu: r65588 2018-11-07 13:02:14 +0900

ruby-runner.c での stub つきバイナリでも r65587 の PRELOADENV を使った MJIT のビルドディレクトリのすりかえが有効になるようにしているみたいです。

shyouhei: r65589 2018-11-07 13:09:05 +0900

r65573 で導入した Address Sanitizer/Memory Sanitizer で Undefined Behavior Sanitizer という未定義動作になる操作を検出するツールも入ってたみたいで、unsigned integer の overflow 検出はいくつかの関数で意図的にチェックしないように NO_SANITIZE() で指定しています。

shyouhei: r65590 2018-11-07 13:56:24 +0900

gcc で NO_SANITIZE() が未知の種類の sanitizer の指定がされると警告を出すのでコンパイル時に大量の警告が出るので、再定義して pragma で局所的に警告を抑制させるようにしています。

kazu: r65591 2018-11-07 14:07:56 +0900

MatchData#values_at の rdoc 用コメントの call-seq の可変長引数の表現法を修正。

shyouhei: r65592 2018-11-07 14:23:03 +0900

string.c で __builtin_assume_aligned() という builtin function が使えるかどうかの判定に HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED だけみてたのを UNALIGNED_WORD_ACCESS もチェックして word のメモリアドレスが align されていないといけない環境でのみ使うようにしています。 "it is clear than a blue sky" ってコミットログがいいですね。

shyouhei: r65593 2018-11-07 14:26:11 +0900

そして .travis.yml で Undefined Behavior Sanitizer つきでビルドする時に UNALIGNED_WORD_ACCESS=0 を指定して align されていないメモリアドレスのアクセスを禁止した状態でビルドするようにしています。

k0kubun: r65594 2018-11-07 16:15:33 +0900

Process のテストで子プロセスを起動する時に伝播させる必要がある環境変数として r65588 のために darwin で MJIT_SEARCH_BUILD_DIR と DYLD_INSERT_LIBRARIES も追加しています。

shyouhei: r65595 2018-11-07 16:16:50 +0900

insns.def の attribute sp_inc の設定に 1 - num みたいな式を書いてたところを明示的な (rb_snum_t) へのキャストを追加しています。unsigned な整数同士の引き算で未定義動作(コミットログに詳細に書かれていますが正確には implementation-defined なので実装依存動作?)になるのを防ぐためだそうです。

nobu: r65596 2018-11-07 16:21:00 +0900

ruby-runner.c で環境変数 MJIT_SEARCH_BUILD_DIR をセットするのは configure 時に --enable-load-relative が有効な状態でビルドされた時には行なわないようにしています。不要だからでしょうね。

shyouhei: r65597 2018-11-07 17:03:10 +0900

r65595 の insns.def のキャスト追加漏れがあったので追加修正しています。

shyouhei: r65598 2018-11-07 17:04:33 +0900

vm_backtrace.c の calc_lineno() において pos が 0 になる可能性があったのを考慮して 0 の時は -1 しないようにしています。 pos=0 だった時にデバッグ用の __builtin_trap() も追加されてます。

k0kubun: r65599 2018-11-07 17:04:39 +0900

r65577 などで MJIT_CC のコマンドをフルパスに展開するようにしたので mjit_worker.c の子プロセス起動時に PATH からプログラムを検索する処理を削っています。

mame: r65600 2018-11-07 17:13:20 +0900

VM 命令の getinlinecache/setinlinecache をそれぞれ opt_getinlinecache/opt_setinlinecache に改名しています。

svn: r65601 2018-11-07 17:13:24 +0900

r65600 のインデントのタブを空白に展開。

nobu: r65602 2018-11-07 19:55:23 +0900

make test-all で MJIT 用のビルドディレクトリを指定する変数を差し替えるための共有ライブラリに macOS だと mjit_build_dir.dylib.dSYM とデバッグ情報のファイルもできるので、make clean でこれも削除するようにしています。

nobu: r65603 2018-11-07 19:55:24 +0900

r65594 で Process のテストで子プロセスに伝播させる環境変数に MJIT のビルドディレクトリ用のものを追加していましたが、MJIT_SEARCH_BUILD_DIR は環境によらず追加するようにして、DYLD_INSERT_LIBRARIES はプラットフォームによって異なる環境変数名が RbConfig::CONFIG["PRELOADENV"] に設定されてるのでこれを追加するようにしています。

nobu: r65604 2018-11-07 20:38:08 +0900

rubygems のテストでメッセージの正規表現マッチのチェックをする時に ruby の実行ファイルのパスにメタキャラクタがあった時のためのエスケープを追加しています。