4.1.16. __svc_indirect

__svc_indirect 关键字在 r12 中向 SVC 处理程序传递操作码。

__svc_indirect 是一个函数限定符。 它影响函数的类型。

语法


__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。

示例


int __svc_indirect(0) ioctl(int svcino, int fn, void *argp);

调用:


ioctl(IOCTL+4, RESET, NULL);

可编译为 SVC #0r12 中为 IOCTL+4。

错误

在命令行中使用 --cpu 选项指定不支持 SVC 指令的 ARM 体系结构变体或基于 ARM 体系结构的处理器时,编译器将生成错误。

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential