4.1.17. __svc_indirect_r7

__svc_indirect 키워드는 __svc_indirect처럼 동작하지만 r12 대신 r7을 사용합니다.

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

r0 = fd, r1 = buf, r2 = countr7 = 4와 함께 SVC #0으로 컴파일됩니다.

오류

SVC 명령어를 지원하지 않는 ARM 아키텍처 변형 또는 ARM 아키텍처 기반 프로세서가 --cpu 옵션을 사용하여 명령 행에 지정되면 컴파일러에서 오류를 생성합니다.

추가 참고

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