Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

8179
1390
307630


[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터 Armv7: 함수 호출 규약

Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다.

   * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.
   * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 
     링크 레지스터인 R14에 복귀할 주소를 업데이트한다.
   * 서브 루틴을 호출할 때 전달되는 인자는 R0-R3 레지스터에 저장된다.   
   * 함수의 리턴값은 R0 레지스터에 저장된다.

위에서 설명한 내용을 Armv8 아키텍처 관점으로 다음과 같이 바꿔서 말할 수 있습니다.

   * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.
   * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 링크 레지스터인 X30에 
      복귀할 주소를 업데이트한다.  
   * 서브 루틴을 호출할 때 전달되는 인자는 X0-X7 레지스터에 저장된다.
   * 함수의 리턴값은 X0 레지스터에 저장된다.

위 내용을 보면 알 수 있듯이, Armv7 아키텍처에서 다룬 AACPS의 개념은 Armv8 아키텍처에 거의 그대로 적용됩니다. 하지만 서브 루틴을 호출할 때 사용되는 레지스터와 어셈블리 명령어가 다를 뿐입니다. 

이번 절에서는 Armv8 아키텍처에서 정의된 레지스터 목록 중에서 AAPCS와 관련된 레지스터를 소개합니다. Armv7 아키텍처에서 소개한 AAPCS와 유사한 개념이 많으니 차이점 위주로 설명하겠습니다.

[정보]

이번 장에서 소개하는 Armv8 아키텍처의 AAPCS는 64비트를 기준으로 설명하는데, 이를 AAPCS64로 표기합니다.

Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자



덧글

댓글 입력 영역