MoarVM
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*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-c...
** 勉強する [#x73ce59c]
[[Rakudo and NQP internals:http://edumentab.github.io/rak...
**インストール方法 [#l4b2cc17]
- まずはMercurialリポジトリもしくはGitHubからMoarVMを取得
% hg clone ssh://one@http://www.cr.ie.u-ryukyu.ac.jp/hg/...
- GitHubからの場合
% git clone git@github.com:MoarVM/MoarVM.git
- 予めインストール先のディレクトリを作っておく
- build
% ./Configure.pl --cc /usr/local/x86-cbc/bin/gcc --debug...
- 各オプション
-- cc
--- コンパイラのパスを設定する
-- debug
--- debugオプション
-- compiler
--- コンパイラの種類を指定する
--- gcc, clang, clをサポートしている
-- toolchain <toolchain>
--- "posix", "gnu", "bsd" and "msvc"のツールチェインを選...
-- prefix
--- make installの先を指定
- make
% make -j 50 && make install
** NQP [#t052565e]
Perl6のサブセット.Perl6はNQPで記述されている
*** build方法 [#q561f123]
%./Configure.pl --prefix=/mnt/dalmore-home/one/src/build...
このcommitハッシュに合わせる
45ab6e373b4168071a5b3fb806cf37e8d02c13d0
** CbC関連 [#ma4b5ce5]
*** CodeSegmentから通常の関数を呼び出す際の確認するポイン...
通常の関数からCodeSegmentにgotoした後にCodeSegment側で通...
コンパイラのバグなのでコンパイラを治すかDataSegementを一...
*** Originalのnqpからmoarvmバイトコードを出力する [#wbadb...
CbC側のnqpにcdし
%cbc-tools/create_test2moarvm.zsh t/nativecall
vmtestの中に生成される
シェルスクリプト中では
${ORIGIN_NQP}/nqp --target=mbc --output="001-hoge.t.moa...
を実行している
** 実行しているオペコードを確認する方法 [#mbfc1ca6]
*** CbC [#zec94e9d]
CbCではcbc-interp.cbcで定義しているcbc_*オペコードに対応...
これらはcbc_next経由で呼ばれるのでそこにbreak pointを書け...
(gdb) b cbc_next
Breakpoint 2 at 0x7ffff7560288: file src/core/cbc-interp...
(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の関数をい...
(gdb) b dummy
Function "dummy" not defined.
Make breakpoint pending on future shared library load? (...
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
*** 関数名かバイトコード番号で引く場合 [#n9b12142]
nqp側のcbc-toolsを使う
$perl trans2opcode.pl 98
cbc_neg_n
$perl trans2opcode.pl cbc_neg_n
98
** 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.m...
% cbc-tools/check-cbc-nqp-test.sh vmtest/src/001-backend...
** CbCNQP一斉テスト [#b3f020b5]
% $cbc-tools/this.sh vmtest/nqp
** NQP(Original)テスト [#vcf91426]
% $cbc-tools/this.sh vmtest/nqp ori
** テストカバレッジ [#z34febf3]
$ perl cbc-tools/dotest_coverage.pl
** MoarVMの便利ツール [#u23fb43a]
*** デバッガ内でdissass [#e41f3df9]
MVM_dump_bytecode
(lldb) p MVM_dump_bytecode
(void (*)(MVMThreadContext *)) $143 = 0x0000000100121...
(libmoar.so`MVM_dump_bytecode at bytecodedump.c:505)
(lldb) p MVM_dump_bytecode(tc)
00000 checkarity 2, 2
00001 param_rp_o loc_0_obj, 0
00002 param_rp_o loc_1_obj, 1
00003 paramnamesused
annotation: gen/moar/stage2/QAST.nqp:6682
00004 decont loc_2_obj, loc_0_obj
00005 decont loc_4_obj, loc_2_obj
00006 findmeth loc_3_obj, loc_4_obj, '...
00007 prepargs Callsite_0
00008 arg_o 0, loc_2_obj
00009 invoke_o loc_2_obj, loc_3_obj
00010 masttocu loc_2_obj, loc_1_obj, l...
00011 -> return_o loc_2_obj
(lldb)
*** スタックトレースの表示 [#t5380a9d]
MVM_dump_backtrace
nqp側でerrorした際にdumpされるback trace
(gdb) p MVM_dump_backtrace(tc)
at gen/moar/stage2/QAST.nqp:6682 (../nqp/src/vm/m...
from gen/moar/stage2/NQPHLL.nqp:455 (../nqp/src/vm/...
from gen/moar/stage2/NQPHLL.nqp:1794 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1830 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1833 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1819 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1519 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1453 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1432 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1661 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1625 (../nqp/src/vm...
from gen/moar/stage2/NQP.nqp:4124 (../nqp/src/vm/mo...
from gen/moar/stage2/NQP.nqp:4119 (../nqp/src/vm/mo...
from <unknown>:1 (../nqp/src/vm/moar/stage0/nqp.moa...
from <unknown>:1 (../nqp/src/vm/moar/stage0/nqp.moa...
$32 = void
終了行:
*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-c...
** 勉強する [#x73ce59c]
[[Rakudo and NQP internals:http://edumentab.github.io/rak...
**インストール方法 [#l4b2cc17]
- まずはMercurialリポジトリもしくはGitHubからMoarVMを取得
% hg clone ssh://one@http://www.cr.ie.u-ryukyu.ac.jp/hg/...
- GitHubからの場合
% git clone git@github.com:MoarVM/MoarVM.git
- 予めインストール先のディレクトリを作っておく
- build
% ./Configure.pl --cc /usr/local/x86-cbc/bin/gcc --debug...
- 各オプション
-- cc
--- コンパイラのパスを設定する
-- debug
--- debugオプション
-- compiler
--- コンパイラの種類を指定する
--- gcc, clang, clをサポートしている
-- toolchain <toolchain>
--- "posix", "gnu", "bsd" and "msvc"のツールチェインを選...
-- prefix
--- make installの先を指定
- make
% make -j 50 && make install
** NQP [#t052565e]
Perl6のサブセット.Perl6はNQPで記述されている
*** build方法 [#q561f123]
%./Configure.pl --prefix=/mnt/dalmore-home/one/src/build...
このcommitハッシュに合わせる
45ab6e373b4168071a5b3fb806cf37e8d02c13d0
** CbC関連 [#ma4b5ce5]
*** CodeSegmentから通常の関数を呼び出す際の確認するポイン...
通常の関数からCodeSegmentにgotoした後にCodeSegment側で通...
コンパイラのバグなのでコンパイラを治すかDataSegementを一...
*** Originalのnqpからmoarvmバイトコードを出力する [#wbadb...
CbC側のnqpにcdし
%cbc-tools/create_test2moarvm.zsh t/nativecall
vmtestの中に生成される
シェルスクリプト中では
${ORIGIN_NQP}/nqp --target=mbc --output="001-hoge.t.moa...
を実行している
** 実行しているオペコードを確認する方法 [#mbfc1ca6]
*** CbC [#zec94e9d]
CbCではcbc-interp.cbcで定義しているcbc_*オペコードに対応...
これらはcbc_next経由で呼ばれるのでそこにbreak pointを書け...
(gdb) b cbc_next
Breakpoint 2 at 0x7ffff7560288: file src/core/cbc-interp...
(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の関数をい...
(gdb) b dummy
Function "dummy" not defined.
Make breakpoint pending on future shared library load? (...
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
*** 関数名かバイトコード番号で引く場合 [#n9b12142]
nqp側のcbc-toolsを使う
$perl trans2opcode.pl 98
cbc_neg_n
$perl trans2opcode.pl cbc_neg_n
98
** 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.m...
% cbc-tools/check-cbc-nqp-test.sh vmtest/src/001-backend...
** CbCNQP一斉テスト [#b3f020b5]
% $cbc-tools/this.sh vmtest/nqp
** NQP(Original)テスト [#vcf91426]
% $cbc-tools/this.sh vmtest/nqp ori
** テストカバレッジ [#z34febf3]
$ perl cbc-tools/dotest_coverage.pl
** MoarVMの便利ツール [#u23fb43a]
*** デバッガ内でdissass [#e41f3df9]
MVM_dump_bytecode
(lldb) p MVM_dump_bytecode
(void (*)(MVMThreadContext *)) $143 = 0x0000000100121...
(libmoar.so`MVM_dump_bytecode at bytecodedump.c:505)
(lldb) p MVM_dump_bytecode(tc)
00000 checkarity 2, 2
00001 param_rp_o loc_0_obj, 0
00002 param_rp_o loc_1_obj, 1
00003 paramnamesused
annotation: gen/moar/stage2/QAST.nqp:6682
00004 decont loc_2_obj, loc_0_obj
00005 decont loc_4_obj, loc_2_obj
00006 findmeth loc_3_obj, loc_4_obj, '...
00007 prepargs Callsite_0
00008 arg_o 0, loc_2_obj
00009 invoke_o loc_2_obj, loc_3_obj
00010 masttocu loc_2_obj, loc_1_obj, l...
00011 -> return_o loc_2_obj
(lldb)
*** スタックトレースの表示 [#t5380a9d]
MVM_dump_backtrace
nqp側でerrorした際にdumpされるback trace
(gdb) p MVM_dump_backtrace(tc)
at gen/moar/stage2/QAST.nqp:6682 (../nqp/src/vm/m...
from gen/moar/stage2/NQPHLL.nqp:455 (../nqp/src/vm/...
from gen/moar/stage2/NQPHLL.nqp:1794 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1830 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1833 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1819 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1519 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1453 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1432 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1661 (../nqp/src/vm...
from gen/moar/stage2/NQPHLL.nqp:1625 (../nqp/src/vm...
from gen/moar/stage2/NQP.nqp:4124 (../nqp/src/vm/mo...
from gen/moar/stage2/NQP.nqp:4119 (../nqp/src/vm/mo...
from <unknown>:1 (../nqp/src/vm/moar/stage0/nqp.moa...
from <unknown>:1 (../nqp/src/vm/moar/stage0/nqp.moa...
$32 = void
ページ名: