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

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

Show/hide構文

int __semihost(int val, const void *ptr)

各項目には以下の意味があります。

val

セミホスティング要求の要求コードを指定します。

詳細については、ARM® プロセッサをターゲットとしたソフトウェア開発』第 8 章 セミホスティングを参照して下さい。

ptr

引数/結果ブロックへのポインタを指定します。

詳細については、ARM® プロセッサをターゲットとしたソフトウェア開発』第 8 章 セミホスティングを参照して下さい。

Show/hide戻り値

セミホスティング呼び出しの結果については、ARM® プロセッサをターゲットとしたソフトウェア開発』第 8 章 セミホスティングを参照して下さい。

Show/hide使用法

C または C++ からのコンパイル組み込み関数を使用して、ターゲットおよび命令セットに適したセミホスティング呼び出しを生成します。

SVC 0x123456

すべてのアーキテクチャの ARM 状態時。

SVC 0xAB

ARMv7-M を除く Thumb 状態時。この動作は、ARM または各社のすべてのデバッグターゲットで保証されているとは限りません。

BKPT 0xAB

ARMv7-M 用、Thumb-2 のみ。

Show/hide制約条件

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

Show/hide

char buffer[100];
...
void foo(void)
{
    __semihost(0x01, (const void *)buf); // Thumb 状態では 
                                         // int __svc(0xAB) my_svc(int, int *); に相当
                                         // 結果は my_svc(0x1, &buffer);
}

オプション --thumb を使用してこのコードをコンパイルすると、以下のコードが生成されます。

||foo|| PROC
    ...
    LDR      r1,|L1.12|
    MOVS     r0,#1
    SVC      #0xab
    ...
|L1.12|
    ...
buffer
    %        400

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0491BJ
Non-ConfidentialID011811