7.1 セミホスティングと top of memoryについて

通常、セミホスティングが使用されるのは、C ライブラリを使用しながら、オペレーティングシステムなしで実行されているアプリケーションのデバッグ時です。これにより、printf()scanf() などのC ライブラリの関数で、ターゲットシステム上の画面やキーボードではなく、ホストワークステーション上の画面やキーボードが使用できるようになります。

セミホスティングでは、スタックベースとヒープベースアドレスを使用して、スタックおよびヒープの場所とサイズを決定します。スタックベース(top of memory とも呼ばれます)は、デフォルトでヒープベースの終点から 64K のアドレスです。ヒープベースはデフォルトで連続するアプリケーションコードです。
以下の図は、 ARM® ターゲットの標準的なレイアウトを示しています。
図 7-1 メモリ、スタック、ヒープ間の標準的なレイアウト
この図を表示するには、ご使用のブラウザが SVG 形式をサポートしている必要があります。ネイティブでサポートしているブラウザをインストールするか、次のような適切なプラグインをインストールします。Adobe SVG Viewer。.

セミホスティングの実装

DS-5 は、ソフトウェアモデルと実際のターゲットハードウェアにおいて AArch64 ステートと AArch32 ステートのセミホスティングをサポートしています。DS-5デバッガ は、AArch64 の HLT 0xF000 または AArch32 の SVC 命令(ARM ステートの SVC 0x123456 または Thumb ステートの SVC 0xAB)をインターセプトすることによってセミホスティングを処理します。
  • AArch64 コードが実際のターゲットハードウェアで実行されている場合、ターゲットが HLT 命令で停止し、デバッガはセミホスティングを自動的に処理します。
  • AArch32 コードが実際のターゲットハードウェアで実行されているか、AArch32 ステートまたは AArch64 ステートでソフトウェアモデルが使用される場合は、セミホスティングトラップを明示的に設定する必要があります。それ以外の場合、デバッガは ERROR(TAB180):The semihosting breakpoint address has not been specified を通知します。
    このエラーは、デバッガがセミホスティングを有効にしようとしたとき、特殊なシンボル __auto_semihosting または __semihosting_library_function が含まれるイメージをロードしたとき、または set semihosting enabled on を使用してセミホスティングを明示的に有効にしようとした場合に通知されます。
次の CLI コマンドを実行すると、デバッガにセミホスティングトラップを設定できます。set semihosting vector <trap_address>
このコマンドは、このアドレスでブレークポイントを設定するようデバッガに指示します。このブレークポイントに達すると、デバッガはセミホスティング操作の実行を制御します。
実行が HLT(AArch64)または SVC(AArch32)セミホスティング命令からこのアドレスに到達する方法は、使用されるプログラム、プログラムが実行されている実行レベル(EL)、伝播のための例外のセットアップ方法、および同様の設定によって異なります。
実行がこのアドレスに達したかどうかを確認する必要があります。通常、これを行うには、適切なベクタテーブルの適切なオフセットにセミホスティングベクタアドレスを設定するか、条件に応じて、既知のオフセットに分岐する場合があるベクタテーブルの明示的なエントリを作成します。
混合 AArch64 および AArch32 システムで、2 つの実行状態で使用されるセミホスティングで、トラップが 1 つの AArch64 トラップアドレスで発生するように編成する必要があります。例外は、AArch32 から AArch64 で実行される上位の例外レベルの範囲でしか取得できないため、AArch64 トラップアドレスは AArch32 セミホスティング呼び出しコードより上位の例外レベルでなければなりません。

AArch64 セミホスティング呼び出しコードは、AArch64 トラップアドレス以下の例外レベルでなければなりません。例えば、EL2 AArch64 に切り替わってから EL1 で AArch32 アプリケーションを起動する EL3 AArch64 起動コードはすべて、EL3 AArch64 のセミホスティングトラップを使用できます。
関連する参考文書
4.3 main() への引数の引き渡しについて
7.2 セミホスティングの使用
7.3 デバッガでの自動セミホスティングサポートの有効化
7.4 コマンドラインコンソールを使用したセミホスティングメッセージの制御
10.42 [Debug Configurations] - [Arguments]タブ
10.1 [App Console]ビュー
関連情報
DS-5 デバッガコマンド
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.