#author("2018-11-04T05:10:56+00:00","game","game")
#author("2018-11-04T05:44:40+00:00","game","game")
*MoarVM [#c4cd56b9]

- CbConMoarVM
http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/MoarVM/
- NQP関連の便利スクリプト
http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/nqp-cbc-tools/

**インストール方法 [#l4b2cc17]

- まずはMercurialリポジトリもしくはGitHubからMoarVMを取得
 % hg clone ssh://one@http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/MoarVM/ (保存先。指定しない場合./MoarVMになる)
- GitHubからの場合
  % git clone git@github.com:MoarVM/MoarVM.git

- 予めインストール先のディレクトリを作っておく
- build
 % ./Configure.pl --cc /usr/local/x86-cbc/bin/gcc --debug --no-optimize --compiler gcc --prefix=/mnt/dalmore-home/one/src/build_perl6/MoarVM

- 各オプション
-- cc
--- コンパイラのパスを設定する
-- debug
--- debugオプション
-- compiler
--- コンパイラの種類を指定する
--- gcc, clang, clをサポートしている
--  toolchain <toolchain>
--- "posix", "gnu", "bsd" and "msvc"のツールチェインを選択可能
-- prefix
--- make installの先を指定

- make
 % make -j 50 && make install


** CbC関連 [#ma4b5ce5]

*** CodeSegmentから通常の関数を呼び出す際の確認するポイント [#l1ce7a77]

通常の関数からCodeSegmentにgotoした後にCodeSegment側で通常の関数を呼び出すとスタックポインタ(rst)がDataSegementのメモリ領域より下にくる可能性がある.

コンパイラのバグなのでコンパイラを治すかDataSegementを一度関数を経由させてCodeSegmentに移行するように書き換える

*** Originalのnqpからmoarvmバイトコードを出力する [#wbadb84f]

CbC側のnqpにcdし
 %cbc-tools/create_test2moarvm.zsh t/nativecall

vmtestの中に生成される

シェルスクリプト中では
  ${ORIGIN_NQP}/nqp --target=mbc --output="001-hoge.t.moarvm" 001-hoge.t
を実行している

** 実行しているオペコードを確認する方法 [#mbfc1ca6]
*** CbC [#zec94e9d]

CbCではcbc-interp.cbcで定義しているcbc_*オペコードに対応しているルーチン
これらはcbc_next経由で呼ばれるのでそこにbreak pointを書けてdumpする

 (gdb) b cbc_next
 Breakpoint 2 at 0x7ffff7560288: file src/core/cbc-interp.cbc, line 61.
 (gdb) command 2
 Type commands for breakpoint(s) 2, one per line.
 End with a line saying just "end".
 >p CODES[*(MVMuint16 *)i->cur_op]
 >p *(MVMuint16 *)i->cur_op
 >c
 >end

scriptコマンドをかけてneter押すとログに出来る

*** Origin [#v1f9a6ae]

オペコードはラベルで飛ぶのでNEXTのマクロにdummyの関数をいれてそこにbreak point

 (gdb) b dummy
 Function "dummy" not defined.
 Make breakpoint pending on future shared library load? (y or [n]) y
 Breakpoint 1 (dummy) pending.
 (gdb) command 1
 Type commands for breakpoint(s) 1, one per line.
 End with a line saying just "end".
 >up
 >p *(MVMuint16 *)(cur_op)
 >c
 >end

** Moarbytecodeのdump [#ea1ba63c]

 %./moar --dump hoge.moar

** MoarVMbytecodeからMoarVMのdebug [#ja07c75b]

 % cbc-tools/debug-moar.sh vmtest/src/001-backend.t.moar

** MoarvmBytecodeからのNQPのテスト [#d22b622d]
 % cbc-tools/check-nqp-test.sh vmtest/src/001-backend.t.moar
 % cbc-tools/check-cbc-nqp-test.sh vmtest/src/001-backend.t.moar

** CbCNQP一斉テスト [#b3f020b5]
 % $cbc-tools/this.sh vmtest/nqp

** NQP(Original)テスト [#vcf91426]
 % $cbc-tools/this.sh vmtest/nqp ori


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS