セミホスティングのメカニズム
C-SPYエミュレートI/Oは、Arm Limitedで提供されるセミホスティングインターフェースと互換性があります。アプリケーションがセミホスティングコールを呼び出すと、実行がデバッガのブレークポイントで停止します。続いて、デバッガが呼び出しを処理し、ホストコンピュータ上で必要なすべてのアクションを行って実行を再開します。
使用可能なセミホスティングのメカニズムには、以下の3つがあります。
Cortex-Mの場合、インタフェースは
BKPT命令を使用してセミホスティングの呼び出しを実行します。他のArmコアの場合、32ビットモードでのセミホスティングの呼出しには、
SVC命令が使用されます。64ビットモードの場合、
HLT命令がセミホスティングの呼出しに使用されます。セミホスティングの代替となるIAR固有の機能である、SVCを使用するIARブレークポイントを使用します。
SVC経由でセミホスティングをサポートするには、デバッガがSupervisor Callベクタ上にセミホスティングのブレークポイントを設定して、SVCの呼び出しを検出する必要があります。アプリケーションでセミホスティング以外の目的にSVC呼び出しを使用する場合、このブレークポイントの処理によって、こうした呼び出しの度に重大なパフォーマンスへの影響が発生します。IARブレークポイントは、これを回避するひとつの方法です。セミホスティングの実行にSVC命令ではなく特殊な関数呼び出しを使用することにより、その特殊な関数上にセミホスティングのブレークポイントを設定できます。つまり、セミホスティングがSupervisor Callベクタの他の用法に干渉しなくなります。
Unsafe semihosting commands that might alter or leak information about the host system are by default disabled. The debugger will block calls to such functions, and print a message in the debug log. Some calls are considered safe, and are enabled by default. These include reading from and writing to stdin, stdout, and stderr. Reading from or writing to the host file system is considered unsafe, and is disabled by default. This includes the IAR proprietary variant of semihosting (IAR breakpoint).
To enable the unsafe calls, choose Project>Options>General>Library Configuration and select the Enable unsafe semihosting commands option, or specify the cspybat command line option ‑‑unsafe_semihosting to the debugger backend.
注記
IARブレークポイントは、セミホスティング標準のIAR固有の拡張です。IAR以外のベンダからのツールチェーンによってビルドしたライブラリにアプリケーションをリンクして、IARブレークポイントを使用する場合、これらのライブラリのコードからのセミホスティング呼び出しは機能しません。