Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

38107
469
422670


[Arm프로세서] Armv8 익셉션 레벨: PSTATE와 currentEL 레지스터 Armv8: Exception Level(EL)

Armv8 아키텍처는 프로세서의 상태를 PSTATE를 통해 제공하는데, 이 정보 중에 익셉션 레벨이 포함돼 있습니다. 먼저 Armv8 아키텍처 문서를 보면서 PSTATE가 무엇인지 알아봅시다.

(출처: DDI0487Fc_armv8_arm.pdf)
D1.7 Process state, PSTATE

In the Armv8-A architecture, Process state or PSTATE is an abstraction of process state information.  

스팩 문서의 내용을 해석하면 PSTATE는 프로세서의 다양한 상태 정보를 담고 있는 인터페이스(Abstraction)이라고 볼 수 있습니다. PSTATE에서 프로세서의 상태는 PSTATE.field에서 확인할 수 있으며, 이 필드 중에 EL이 있습니다. 

Armv8 아키텍처는 CurrentEL이라는 Special-purpose 레지스터를 통해 PSTATE.field에 접근해 현재 익셉션 레벨을 알려줍니다. 

이어서 익셉션 레벨을 저장하는 CurrentEL 레지스터의 비트맵 정보를 소개합니다.

 
그림 4.2 CurrentEL 레지스터의 비트 맵 정보

비트맵 정보를 보면 [3:2] 비트는 익셉션 레벨과 관련된 비트 정보를 저장합니다. [2:3] 비트에는 익셉션 레벨을 나타내는 다음 표와 같은 비트를 저장합니다.


표 4.4 currentEL 레지스터의 [2:3] 비트에 저장된 익셉션 레벨 정보

그렇다면 익셉션 레벨을 저장하는 currentEL 레지스터의 값을 읽으려면 어떤 명령어를 사용해야 할까요? Armv8 아키텍처에는 다음과 같은 포멧의 명령어를 지원합니다.

 “MRS <Xt>, CurrentEL”

위와 같은 포멧의 명령어가 실행되면 <Xt>으로 표기된 레지스터에 익셉션 레벨 비트 인코딩 값이 로딩됩니다. 여기서 <Xt>은 범용 레지스터 중 하나이며, 보통 'mrs x0, CurrentEL'와 같은 포멧으로 사용됩니다.

'MRS <Xt>, CurrentEL' 명령어를 실행하면 <Xt>에 로딩되는 값은 다음과 같습니다.


표 4.5 currentEL를 통해서 읽는 값

'MRS <Xt>, CurrentEL' 어셈블리 명령어를 사용할 때 CurrentEL 시스템 레지스터를 통해 로딩되는 익셉션 레벨을 나타내는 비트는 많이 참고되니 잘 알아둡시다.

#Reference Armv8: 익셉션 레벨(ELx)


Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
* 2021년 대한민국 학술원 선정 우수도서



---







핑백

덧글

댓글 입력 영역