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

RL78向けテストハーネスをGDBスクリプトで作ろうとした話

ken551
October 20, 2023

 RL78向けテストハーネスをGDBスクリプトで作ろうとした話

2023/10/15 Okayama Revengers LT大会で発表

ken551

October 20, 2023
Tweet

More Decks by ken551

Other Decks in Technology

Transcript

  1. 自己紹介 @祐源 英俊(ゆうげん ひでとし) • 95年生まれ(28歳) • 学生時代は組込みシステムを中心に勉強 • 電子部品事業部で組込みソフト開発

    (組込みエンジニアとしては3年目) • 趣味:車、音楽、電子工作 こういう→ アイコンに してます
  2. 背景 • 本を読んで、TDDで業務改善できるのでは?と思い立つ • TDD的な思考→練習で習得可能 • 自動テスト等ツール的な恩恵→導入が難しい • 新たな環境構築が必要 •

    テストハーネス埋め込みによるバイナリ変更 →上記課題が解消できれば職場でも使えるのでは? https://www.oreilly.co.jp/books/9784873116143/
  3. 作ったもの • ビルドで自動実行する、なんちゃってテストハーネス • Renesas RL78ファミリマイコンが(とりあえず)対象 • e2studio付属のgdbを使用 →インストールとスクリプトの準備でOK •

    ビルド後のステップでgdbを実行 →ビルド実行で自動テストが走る • 実行結果のOK/NGをe2studioに返す →テストNGはビルドエラーとして表示 https://github.com/ken551/gdb_testHarness_RL78
  4. 苦労した点 • 引数・返値が全く扱えない!! • gdbのcall機能だと関数の実行がまともに扱えない • 引数が渡せない(引数に応じた振る舞いの変化がない) • 返値が返ってこない(意味不明な値が結果として返る) •

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

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