10.17 __svc_indirect

__svc_indirect を使用すると、間接 SVC を実装できます。

構文

__svc_indirect(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
関数の実行を決定するために r12 でハンドラに渡される値です。
間接的なメカニズムを使用するには、使用するシステムのハンドラが、 r12 の値を使用して要求されている演算を選択する必要があります。

使用法

__svc_indirect キーワードは、演算コードを r12 で SVC ハンドラに渡します。
__svc_indirect は、関数修飾子です。これは、関数の型に影響します。

エラー

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

int __svc_indirect(0) ioctl(int svcino, int fn, void *argp);
以下の呼び出しを行うと
ioctl(IOCTL+4, RESET, NULL);
r12IOCTL+4 を使用して、SVC #0 に コンパイルされます。
関連する参考文書
10.16 __svc
10.18 __svc_indirect_r7
8.42 --cpu=name コンパイラオプション
10.19 __value_in_regs
関連情報
SVC
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.