netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-10-19 古い日記からの変換データ ▲
_ [work]Dominatorの検出 ▲
バイトコードの制御フローグラフ上で,条件分岐の結果がいつまで有効だといえるかをPostDominator(どちらに分岐しても必ず通過する最初の頂点)で判定するために,PostDominatorの計算を実装してみた.
アルゴリズムは悩んだが,実装が単純な繰り返し計算方法Keith D. Cooper, Timothy J. Harvey, Ken Kennedy:A Simple, Fast Dominance Algorithm.に掲載のものを使ってみた.文献自体はSoftware Practice and Experience にSubmitted となっているもの(Acceptedではないらしい).これ自体はDominantの計算なので,PostDominantを判定するために依存関係のたどり方だけ逆向きにして適用してみた.
パフォーマンス的には最適化の余地はあるのだが,とりあえず単純な実装で動作試験にはいちおう成功しているみたい.
2005-10-19 ▲
2006-10-19 ▲
_ [ツール][Java] soot の points-to set 解析設定 ▲
jEdit のようなGUI・スレッドをがりがり使ってるアプリケーションを解析するときは,-p cg verbose:true,jdkver:4,safe-forname:true,safe-newinstance:true
あたりのオプションを付け加えてやらないと,うまくコールグラフができず,GUI関連のコードに対してまったく points-to set が生成されない,ということになってしまうようです.
points-to set 解析には,Paddle よりも高速かつクラッシュしない Spark のほうが,現時点では良いようです(-p cg.spark verbose:true,enabled:true
).また-p cg.spark propagator:iter
オプションを追加すると,標準設定(propagator:worklist
)と結果が変わります.worklist では一部 points-to set が計算できない場所があるようです.iter による反復処理の結果が,worklistの結果と包含関係にあるかどうかは分かりません.