Upgrade to Pro — share decks privately, control downloads, hide ads and more …

gdb+Pythonの自作テストハーネスに関数コールの機能を入れた話

ken551
December 09, 2023
26

 gdb+Pythonの自作テストハーネスに関数コールの機能を入れた話

at 2023/12/9 合同勉強会 in 大都会岡山 2023 Winter

ken551

December 09, 2023
Tweet

Transcript

  1. RL78の関数コールについて • 関数呼び出し時は以下の処理を呼び出し側が行う • スタックにスタックフレームを作成する • リターンアドレスの保存 • 受け渡す引数を確保 •

    汎用レジスタに受け渡す引数を格納する ※レジスタ値の退避も呼び出し側の責任 • 関数からのリターン時は以下の処理を呼び出され側が行う • 戻り値の汎用レジスタへの格納 9
  2. 参考 • 『テスト駆動開発による組み込みプログラミング』 James W. Grenning 著、オライリージャパン • GDBデバッガ マニュアル

    英語版: https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_toc.html 日本語版: https://flex.phys.tohoku.ac.jp/texi/gdb-j/gdb-j_toc.html • Renesas CC-RLコンパイラ ユーザーズマニュアル 9. 関数呼び出し仕様 https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja- JP/csp/V8.07.00/CS+.chm/Compiler-CCRL.chm/Output/ccrl09c0000y.html • Renesas RL78/G14 ユーザー図マニュアル ハードウェア編 ( R01UH0186JJ0350 Rev. 3.50) 16
  3. 苦労した点 • 引数・返値が全く扱えない!! • gdbのcall機能だと関数の実行がまともに扱えない • 引数が渡せない(引数に応じた振る舞いの変化がない) • 返値が返ってこない(意味不明な値が結果として返る) •

    スタック領域が全く変化しない(関数呼び出しでスタック積むのでは?) • そもそも裏で何やってんの? 引数・返値なしの関数しか使えないのはさすがに困る
  4. 苦労した点 • おそらく、call実施時にgdbがダミーフレームを使うのでは? • なんかそれっぽい解説あり(確信はなし) ax bc … pc 実際のフレーム

    実際のフレーム ダミーフレーム Call実施 実際のフレーム (変更なし) ダミーフレーム (削除) Call終了 コピー こっちをさわる