__svc_indirect_r7
は、関数修飾子です。これは、関数の型に影響します。
構文
__svc_indirect_r7(int
svc_num
) return-type function-name(int
real_num
[, argument-list]);
各項目には以下の意味があります。
-
svc_num
-
SVC
命令で使用されるイミディエート値を指定します。
以下の範囲の整数を求める式を指定します。
-
real_num
-
関数の実行を決定するために r7
でハンドラに渡される値です。
使用法
ARM Linux 上の Thumb アプリケーションでは、__svc_indirect_r7
を使用してカーネルのシステムコールを行います。
この機能を使用しても、間接的に SVC を実装できます。
例
long __svc_indirect_r7(0) \
SVC_write(unsigned, int fd, const char * buf, size_t count);
#define write(fd, buf, count) SVC_write(4, (fd), (buf), (count))
以下の呼び出しを行うと
write(fd, buf, count);
r0
= fd
、r1
= buf
、r2
= count
、および r7
= 4
を使用して、SVC
#0
にコンパイルします。
エラー
SVC
命令をサポートしない ARM アーキテクチャバリアント、または ARM アーキテクチャベースプロセッサが、 --cpu
オプションを使用してコマンドラインで指定されると、コンパイラはエラーを生成します。