4.1.15. __svc

__svc 关键字声明超级用户调用 (SVC) 函数,该函数最多使用四个类似于整数的自变量,并通过 value_in_regs 结构最多返回四个结果。

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

语法


__svc(int svc_num) return-type function-name([argument-list]);

其中:

svc_num

是在 SVC 指令中使用的立即值。

它是一个表达式,其计算结果为以下范围内的整数:

  • ARM 指令中为 0 到 224-1(24 位值)

  • 16 位 Thumb 指令中为 0-255(8 位值)。

用法

这导致将函数调用作为与 AAPCS 兼容的运算进行内联编译,此运算的行为与普通函数调用类似。

__value_in_regs 限定符可用于指定在寄存器中最多返回 16 个字节的小型结构,而不是由 AAPCS 中定义的常用结构传递机制返回。

示例


__svc(42) void terminate_1(int procnum); // terminate_1 returns no results

__svc(42) int terminate_2(int procnum);  // terminate_2 returns one result

typedef struct res_type

{

    int res_1;

    int res_2;

    int res_3;

    int res_4;

} res_type;



__svc(42) __value_in_regs res_type terminate_3(int procnum);

                                         // terminate_3 returns more than

                                         // one result

错误

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

另请参阅

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