10.18 __svc_indirect_r7

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

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

構文

__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 でハンドラに渡される値です。

使用法

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

エラー

SVC 命令をサポートしない ARM アーキテクチャバリアント、または ARM アーキテクチャベースプロセッサが、 --cpu オプションを使用してコマンドラインで指定されると、コンパイラはエラーを生成します。
関連する参考文書
10.16 __svc
10.17 __svc_indirect
8.42 --cpu=name コンパイラオプション
10.19 __value_in_regs
関連情報
SVC
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.