10.140 __semihost コンパイラ組み込み関数

このコンパイラ組み込み関数を使用して、コンパイラによって生成される命令ストリームに SVC または BKPT 命令を挿入します。このコンパイラ組み込み関数を使用すると、ターゲットアーキテクチャとは関係のないセミホスティング呼び出しを C または C++ から行うことができます。

構文

int __semihost(int val , const void * ptr )
各項目には以下の意味があります。
val
セミホスティング要求の要求コードを指定します。
ptr
引数/結果ブロックへのポインタを指定します。

戻り値

セミホスティング呼び出しの結果は、明示的な戻り値、またはデータブロックを指すポインタとして渡されます。

使用法

C または C++ からのコンパイル組み込み関数を使用して、ターゲットおよび命令セットに適したセミホスティング呼び出しを生成します。
0x123456
すべてのアーキテクチャの ARM ステート時。
0xAB
Thumb 状態時(M プロファイルアーキテクチャを除く)。この動作は、ARM またはサードパーティ各社のすべてのデバッグターゲットで保証されているとは限りません。
0xAB
M プロファイルアーキテクチャの場合(Thumb のみ)。

制約条件

ARMv7 より前の ARM プロセッサでは、SVC 命令を使用してセミホスティング呼び出しを行います。ただし、Cortex M プロファイルプロセッサ用にコンパイルしている場合、セミホスティングは BKPT 命令を使用して実装されます。

char buffer[100];
...
void foo(void)
{
    __semihost(0x01, (const void *)buf); // equivalent in thumb state to 
                                         // int __svc(0xAB) my_svc(int, int *);
                                         // result = my_svc(0x1, &buffer);
}
オプション --thumb を使用してこのコードをコンパイルすると、以下のコードが生成されます。
||foo|| PROC
    ...
    LDR      r1,|L1.12|
    MOVS     r0,#1
    SVC      #0xab
    ...
|L1.12|
    ...
buffer
    %        400
関連する参考文書
8.41 --cpu=list
8.180 --thumb
10.16 __svc
関連情報
BKPT
SVC
セミホスティングとは
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.