4.1.17. __svc_indirect_r7

__svc_indirect 关键字的行为与 __svc_indirect 类似,但它使用的是 r7 而不是 r12

__svcindirect_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);

可编译为 SVC #0r0 = fdr1 = bufr2 = count 以及 r7 = 4

错误

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

另请参阅

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