Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
gdb+Pythonの自作テストハーネスに関数コールの機能を入れた話
Search
ken551
December 09, 2023
82
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
gdb+Pythonの自作テストハーネスに関数コールの機能を入れた話
at 2023/12/9 合同勉強会 in 大都会岡山 2023 Winter
ken551
December 09, 2023
More Decks by ken551
See All by ken551
簡易ラズピコオシロを改造して簡易フリスクオシロを作った話
ken551
0
710
RL78向けテストハーネスをGDBスクリプトで作ろうとした話
ken551
0
140
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Music & Morning Musume
bryan
48
7.4k
What's in a price? How to price your products and services
michaelherold
247
13k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
430
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Exploring anti-patterns in Rails
aemeredith
4
510
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
A designer walks into a library…
pauljervisheath
211
25k
Transcript
gdb+Pythonの自作テストハーネスに 関数コールの機能を入れた話 2023/12/9 @ 合同勉強会 in 大都会岡山 2023 Winter 祐源
英俊 1
自己紹介 祐源 英俊(ゆうげん ひでとし) • 1995年生まれ(28歳) • 学生時代は組込みシステムを中心に勉強 • 電子部品事業部で組込みソフト開発
(組込みエンジニアとしては3年目) • 趣味:車、音楽、電子工作 X: @Ke_N_551 Github: ken551 2
この発表は? 組込み開発でも高頻度な 自動テストがしたい! ・・・ので、テストハーネスを自作しているという話です 3
こんなものを作ってます 4
こんなものを作ってます テスト対象 コード テスト スクリプト テスト 実施結果 5
テスト失敗の場合→NG結果を報告 ビルド・テスト実施 6
本LTの範囲 関数コール テストケース(Pythonで記述) 7
関数コールについて 8
RL78の関数コールについて • 関数呼び出し時は以下の処理を呼び出し側が行う • スタックにスタックフレームを作成する • リターンアドレスの保存 • 受け渡す引数を確保 •
汎用レジスタに受け渡す引数を格納する ※レジスタ値の退避も呼び出し側の責任 • 関数からのリターン時は以下の処理を呼び出され側が行う • 戻り値の汎用レジスタへの格納 9
RL78 関数コール時の引数受け渡し • 基本的には汎用レジスタで引数を受け渡す • 所定の優先度に従って格納する • 入りきらない場合→スタックに格納する A X
C B … (uint8_t a, uint8_t b) a b A X C B … (uint8_t a, uint16_t b) a b (LSB) b(MSB) 引数 レジスタ 引数 レジスタ 10
関数コールの実装① ①関数の引数型に応じ、汎用レジスタへ値を格納 11
関数コールの実装② ②スタックフレームの作成 (=returnアドレスとしてmain関数のアドレスを格納) 12
関数コールの実装③ ③関数コールの実施 (=プログラムカウンタにコールする関数のアドレスをセット) 事前に設置したmain関数のブレークポイント到達まで、 呼び出した関数が実行される 13
関数コールの実装④ ④return後(=main関数にブレーク後)に、 汎用レジスタから返値を取り出す 14
発表まとめと今後 • GDBとPythonを使って作る自作テストハーネスで、 関数コールの機能が実現できた • 汎用レジスタへの引数セットとフレーム作成で 関数呼び出しを疑似的に実施 • ある程度実用的に使えるが、課題は多くできることはまだ少な い
• 対応する引数/返値の型が少ない • よくわからない動作をする(これは致命的) →ゆっくり課題をつぶしていきたい 15
参考 • 『テスト駆動開発による組み込みプログラミング』 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
あぺ 17
苦労した点 • 引数・返値が全く扱えない!! • gdbのcall機能だと関数の実行がまともに扱えない • 引数が渡せない(引数に応じた振る舞いの変化がない) • 返値が返ってこない(意味不明な値が結果として返る) •
スタック領域が全く変化しない(関数呼び出しでスタック積むのでは?) • そもそも裏で何やってんの? 引数・返値なしの関数しか使えないのはさすがに困る
苦労した点 • おそらく、call実施時にgdbがダミーフレームを使うのでは? • なんかそれっぽい解説あり(確信はなし) ax bc … pc 実際のフレーム
実際のフレーム ダミーフレーム Call実施 実際のフレーム (変更なし) ダミーフレーム (削除) Call終了 コピー こっちをさわる