comparison Paper/anatofuz.tex @ 69:5aa4743552b7

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 19 Nov 2018 17:18:40 +0900
parents 96d62f0292d3
children bb09f3bd682f
comparison
equal deleted inserted replaced
68:96d62f0292d3 69:5aa4743552b7
451 また主に次のCodeGearに遷移する際にCbCコンパイラのバグが生じている可能性もある為, アセンブラレベルの命令を確認しながらデバッグを進めることとなる. 451 また主に次のCodeGearに遷移する際にCbCコンパイラのバグが生じている可能性もある為, アセンブラレベルの命令を確認しながらデバッグを進めることとなる.
452 452
453 \subsection{MoarVMのテスト方法} 453 \subsection{MoarVMのテスト方法}
454 454
455 MoarVMは単体で実行する事が不可能である. 455 MoarVMは単体で実行する事が不可能である.
456 またNQPのリポジトリに付随するテストはNQPで書かれている為, NQPをビルド出来ない場合MoarVMのテストを行う事が出来ない. 456 またNQPのリポジトリに付随するテストはNQPで書かれている.
457 その為, 正常に動作しているMoarVMとNQPを用意し, このNQP側からMoarVMのバイトコードにNQPのテストを変換する. 457 従ってNQPを解釈可能な, NQPのセルフビルド時に生成されるシェルスクリプトnqpが必要である.
458 変換されたMoarVMのバイトコードはMoarバイナリに渡す事で実行可能であり, テストを行う事が出来る. 458 その為, シェルスクリプトnqpを生成出来ない場合, MoarVMのテストを行う事が出来ない.
459 CbCMoarVMはNQPのセルフビルドが現時点では達成出来ない為, 通常ではテストが実行出来ない.
460 しかし, MoarVMのバイナリmoarはMoarVMのバイトコードを読み込むことはNQPをセルフビルドしなくとも可能である.
461
462 その為, 正常に動作しているMoarVMのバイナリmoarとnqpを用意し, このnqp側からMoarVMのバイトコードにNQPで記述されたテストを変換する.
463 変換されたMoarVMのバイトコードはバイナリmoarに渡す事で実行可能であり, テストを行う事が出来る.
459 464
460 \subsection{CbCコンパイラによるバグ} 465 \subsection{CbCコンパイラによるバグ}
461 これまでのCbCに関する研究においては, 複数個の入出力をCodeGearに与えるユースケースで利用していた. 466 これまでのCbCに関する研究においては, 複数個の入出力をCodeGearに与えるユースケースで利用していた.
462 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの, MoarVMの様な巨大なプロジェクトのCodeGearをコンパイルを実行する場合, 予期せぬバグが発生した. 467 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの, MoarVMの様な巨大なプロジェクトのCodeGearをコンパイルを実行する場合, 予期せぬバグが発生した.
463 主にCodeGear間のgotoにおけるtail callフラグの除去や, DataGearとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい, 通常のCの関数をcallした際にローカル変数の領域がDataGearのアドレスの周辺を利用してしまう. 468 主にCodeGear間のgotoにおけるtail callフラグの除去や, DataGearとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい, 通常のCの関数をcallした際にローカル変数の領域がDataGearのアドレスの周辺を利用してしまう.