MoarVM

勉強する

Rakudo and NQP internals

インストール方法

NQP

Perl6のサブセット.Perl6はNQPで記述されている

build方法

%./Configure.pl --prefix=/mnt/dalmore-home/one/src/build_perl6/nqp --backends=moar --with-moar=/mnt/dalm    ore-home/one/src/build_perl6/MoarVM/bin/moar

CbC関連

CodeSegment?から通常の関数を呼び出す際の確認するポイント

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

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

Originalのnqpからmoarvmバイトコードを出力する

CbC側のnqpにcdし

%cbc-tools/create_test2moarvm.zsh t/nativecall

vmtestの中に生成される

シェルスクリプト中では

 ${ORIGIN_NQP}/nqp --target=mbc --output="001-hoge.t.moarvm" 001-hoge.t

を実行している

実行しているオペコードを確認する方法

CbC

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

オペコードはラベルで飛ぶので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

%./moar --dump hoge.moar

MoarVMbytecodeからMoarVMのdebug

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

MoarvmBytecode?からのNQPのテスト

% 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一斉テスト

% $cbc-tools/this.sh vmtest/nqp

NQP(Original)テスト

% $cbc-tools/this.sh vmtest/nqp ori

テストカバレッジ

 $ perl cbc-tools/dotest_coverage.pl

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