Non-Confidential |
![]() |
ARM DUI0472J | ||
|
||||
Home > Compiler-specific Features > __svc_indirect |
The __svc_indirect
keyword passes an operation code to the SVC handler in r12
.
__svc_indirect
is a function qualifier. It affects the type of a
function.
__svc_indirect(int
svc_num
) return-type
function-name(int real_num
[, argument-list]);
Where:
Is the immediate value used in the SVC
instruction.
It is an expression evaluating to an integer in the range:
0 to 224–1 (a 24-bit value) in an ARM instruction.
0-255 (an 8-bit value) in a 16-bit Thumb instruction.
Is the value passed in r12
to the handler to determine the
function to perform.
To use the indirect mechanism, your system handlers must make use of the
r12
value to select the required operation.
You can use this feature to implement indirect SVCs.
int __svc_indirect(0) ioctl(int svcino, int fn, void *argp);
Calling:
ioctl(IOCTL+4, RESET, NULL);
compiles to SVC
#0
with IOCTL
+4 in
r12
.
When an ARM architecture variant or ARM architecture-based processor that does not support
an SVC
instruction is specified on the command line using the
--cpu
option, the compiler generates an error.