__svc_indirect_r7

r12 ではなく r7 を使用する点を除き、__svc_indirect_r7 キーワードは __svc_indirect と同様に動作します。

__svc_indirect_r7 は、関数修飾子です。これは、関数の型に影響します。

Show/hide構文

__svc_indirect_r7(int svc_num)
        return-type function-name(int real_num[, argument-list]);

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

svc_num

SVC 命令で使用されるイミディエート値を指定します。

以下の範囲の整数を求める式を指定します。

  • ARM 命令の場合は 0 ~ 224-1(24 ビット値)

  • 16 ビット Thumb 命令の場合は 0 ~ 255(8 ビット値)

real_num

r7 で、関数の実行を決定する際にハンドラに渡される値です。

Show/hide使用法

ARM Linux 上の Thumb アプリケーションでは、__svc_indirect_r7 を使用してカーネルのシステムコールを行います。

この機能を使用しても、間接的に SVC を実装できます。

Show/hide

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 = fdr1 = bufr2 = count、および r7 = 4 を使用して SVC #0 にコンパイルされます。

Show/hideエラー

SVC 命令をサポートしない ARM アーキテクチャバリアント、または ARM アーキテクチャベースのプロセッサが、--cpu オプションを使用してコマンドラインで指定されると、コンパイラはエラーを生成します。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711