10.17 __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.

Syntax

__svc_indirect(int svc_num) return-type function-name(int real_num[, argument-list]);

Where:

svc_num

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.

real_num

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.

Usage

You can use this feature to implement indirect SVCs.

Examples

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.

Errors

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.

Related reference
8.39 --cpu=name compiler option
10.19 __value_in_regs
Related information
SVC
Non-Confidential PDF file icon PDF version ARM DUI0472J
Copyright © 2010-2013 ARM. All rights reserved.