ruby-trunk-changes r65074 - r65084

今日は昨日に続いて MJIT でインスタンス変数への代入時もインライン化する最適化や ELF の debug_info セクションなどの情報を使ってバックトレースで inline 関数の位置も取れるようにする変更などがありました。

k0kubun: r65074 2018-10-14 20:25:36 +0900

r65073 の getinstancevariable 命令の MJIT での最適化を利用するかどうかのフラグマクロ USE_IC_FOR_IVAR を OPT_IC_FOR_IVAR と改名して、各ソースファイルでそれぞれ定義してたのを vm_opts.h で定義するように移動しています。

k0kubun: r65075 2018-10-14 20:50:52 +0900

同じく r65073 のインスタンス変数参照の最適化のところのコメントで receiver と書かれてましたが、インスタンス変数参照においては receiver とは普通言わないので cfp->self と修正しています。

k0kubun: r65076 2018-10-14 22:25:21 +0900

r65073 に続いて setinstancevariable 命令でも inline cache の index が使える時は MJIT で直接 ROBJECT_IVPTR()[index] に書き込むような最適化をしています。

naruse: r65077 2018-10-15 01:59:15 +0900

r65007 あたりからのコミットで一旦入ってた ELF 形式の .debug_info や .debug_abrev, .debug_str などのセクションの DWARF 形式の情報を読んで addr2line.c でソースコードの行番号を得るのに利用するようにしています。 inline 関数もバックトレースに表示できるようになるそうです。

svn: r65078 2018-10-15 01:59:16 +0900

version.h の日付更新。

nobu: r65079 2018-10-15 08:40:27 +0900

addr2line.c で外から呼ばれてない関数は static 関数にしています。また関数宣言のコーディングスタイルを修正。最後の char const の配列の宣言を static const char にしてるのは意味が微妙に変わってないですかね。確か char const ary だとポインタ自体を更新できないけど const char ary だと中身を書き変えられないみたいな。でもポインタじゃなくて配列だから修正後のほうが正しいか。

nobu: r65080 2018-10-15 08:45:33 +0900

r65077 の addr2line.c の機能追加で hexdump() というマクロも追加されてましたが、呼ばれる位置より前に定義を移動しています。

nobu: r65081 2018-10-15 09:11:45 +0900

configure 時に MJIT_CFLAGS という環境変数を指定して MJIT 時のコンパイラオプションの設定をカスタマイズできるようにしています。

shyouhei: r65082 2018-10-15 13:05:32 +0900

configure で CC が clang 系のコンパイラの時に gcc_suffix を設定するために先頭の clang を削るべきところで gcc と書かれてたので修正しています。 clang++ のコマンド名を正しく検出するために必要だったみたいです。

k0kubun: r65083 2018-10-15 18:51:32 +0900

.travis.yml の matrix で linuxgcc-8 を使う時に apt パッケージの update をするように指示しています。 gcc-8 の最新のパッケージを使うようにするためみたいですね。

k0kubun: r65084 2018-10-15 19:03:57 +0900

r65083 の続きで Travis-CI で gcc-8 を使う build 時に addons.apt.config.retries: true という設定を追加して apt-get update のエラー時のリトライを有効にしています。Travis-CI がそのように推奨してるとのこと。 https://github.com/travis-ci/travis-ci/issues/9112#issuecomment-376305909