Renesas Synergy™

FAQ 3000006: スタック破壊検出機能のマルチタスクでの使用(CC-RL)

Q : 質問

RL78コンパイラ CC-RL とRL78リアルタイムOS RI78V4 を使用しています。professional版の「スタック破壊検出機能」はマルチタスクでも使用できるのでしょうか?

A : 回答

スタック破壊検出コードは、次のようになります。
(1) 関数の入口で、ローカル変数領域の直前(0xFFFF番地に向かう方向)に2バイトの領域を確保し、その領域にnumで指定した値を格納します。
(2) 関数の出口で、numを格納した2バイトの領域が書き換わっていないことをチェックします。
(3) (2)で書き換わっている場合には、スタックが破壊されたとして__stack_chk_fail関数を呼び出します。
マルチタスクでタスクが切り替わって、そのあとに、元に戻ってきた際には、上記の(1)の値と上記の(2)でチェックする関係は壊れないので、使用することができます。
ただし、次のいずれかが指定された関数は、スタック破壊を検出することはできませんので、リアルタイムOSの割り込みハンドラやタスクには適用できません。
 #pragma inline,inlineキーワード,#pragma inline_asm,
 #pragma no_stack_protector,#pragma rtos_interrupt,
 #pragma rtos_task

適用製品

e² studio
CS+ (旧 CubeSuite+)
RL78ファミリ用Cコンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください