Mercurial > hg > Papers > 2019 > anatofuz-prosym
changeset 54:b3982cc4b0dc
tweak
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 19 Nov 2018 10:54:44 +0900 |
parents | 27cb6c89b7d2 |
children | a854cbfff245 |
files | Paper/anatofuz.pdf Paper/anatofuz.tex Paper/reference.bib |
diffstat | 3 files changed, 5 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/anatofuz.tex Sun Nov 18 12:19:56 2018 +0900 +++ b/Paper/anatofuz.tex Mon Nov 19 10:54:44 2018 +0900 @@ -310,7 +310,7 @@ それ以外の場合は巨大なcase文として命令を実行する. ラベル遷移を利用する場合はCode\ref{oplabelsh}に示すラベルテーブルLABELSにアクセスし, テーブルに登録されているアドレスを取得し,マクロNEXTで遷移する. -Code\ref{cbc_dispatch_c}に示すno\_opは何もせず次の命令に移動する為, NEXTのみ記述されている. +Code\ref{cbc_dispatch_c}に示すno\_opは何もせず次の命令に移動する為, goto NEXT;のみ記述されている. このラベルテーブルの中身はラベルが変換されたアドレスであるため, 実際に呼ばれている命令コードの名前はデバッガレベルでは確認できない. Cレベルでのデバッグ時にはアドレスと実際に呼ばれる箇所を確認する事に手間がかかる. @@ -328,6 +328,8 @@ \lstinputlisting[label=cbc_dispatch_c, caption=CbCMoarVMのバイトコードディスパッチ]{./src/cbc-interp-next.cbc} + + \subsection{命令実行箇所のCodeGearへの変換} ラベルテーブルやcase文のswitch相当の命令実行箇所をCbCに変換し, CodeGearの遷移として利用する. interp.cはCode\ref{dispatch_c}に示すスタイルで記述されている. @@ -435,7 +437,7 @@ \subsection{CbCコンパイラによるバグ} 現在までのCbCは複数個の入出力をCodeGearに与えるユースケースで利用していた. -CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの, MoarVMの様な巨大なプロジェクトのCSをコンパイルを実行する場合,予期せぬバグが発生した. +CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの, MoarVMの様な巨大なプロジェクトのCodeGearをコンパイルを実行する場合,予期せぬバグが発生した. 主にCodeGear間のgotoにおけるtail callフラグの除去や, DataGearとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい,通常のCの関数をcallした際にローカル変数の領域がDataGearのアドレスの周辺を利用してしまう. その為DataGearの構造体の値が書き換わり, CからDataGearにreturnした際にDataGearの構造体が破壊されるバグである. このバグは先程の並列デバッグを行いながらプログラムカウンタや変数の動きをトレースする事などで発見することが出来る.
--- a/Paper/reference.bib Sun Nov 18 12:19:56 2018 +0900 +++ b/Paper/reference.bib Mon Nov 19 10:54:44 2018 +0900 @@ -6,7 +6,7 @@ %% Saved with string encoding Unicode (UTF-8) -@misc{pugs, +@Misc{pugs, title = {Pugs: A Perl 6 Implementation}, howpublished = {\url{http://hackage.haskell.org/package/Pugs}}, }