Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] Armv8: ELx(익셉션 레벨)별로 익셉션 벡터 테이블 분석하기

Guillermo Austin Kim|2021년 2월 1일

이전 포스트에서 Armv8의 익셉션 벡터 테이블 스팩 문서를 설명했는데, 처음 Armv8 아키텍처의 익셉션 벡터 테이블을 보시면 바로 이해하기 어렵습니다. Armv7 아키텍처의 익셉션 테이블에 익숙한 분들은 "Armv7 아키텍처의 익셉션 벡터 테이블은 다음과 같이 간단한데, Armv8 아키텍처의 익셉션 벡터 테이블은 왜 이렇게 복잡하지?"란 불만이 생깁니다. 표 9.14 Armv7 아키텍처의 익셉션 벡터 테이블 표 9.14를 보면 어떤 Arm 동작 모드에서 익셉션이 발생해도 익셉션의 종류 별로 지정된 주소로 프로그램 카운터를 브랜치합니다. 또한 익셉션의 종류와 Arm 동작 모드도 같습니다. 그래서 익셉션 벡터 테이블의 내용을 이해하기 쉽습니다. 그런데 Armv8 아키텍처의 익셉션 벡터 테이블은 A

[Arm프로세서] Armv8: 익셉션 벡터 테이블 스팩 문서 분석

Guillermo Austin Kim|2021년 1월 31일

Arm 아키텍처를 배우는 가장 효율적인 방법은 Arm 사에서 배포한 "Arm 아키텍처 스팩 문서"를 분석하는 것입니다. 먼저 Armv8 스팩 문서에 설명된 익셉션 벡터 테이블을 보겠습니다. 표 9.11 Armv8 아키텍처의 익셉센 벡터 테이블(출처: DDI0487Fc_armv8_arm.pdf) 이제부터 익셉션 벡터 테이블을 자세히 분석하겠습니다. [중요]이번 포스트에서 익셉션 벡터 테이블은 EL1에 존재하는 익셉션 벡터 테이블(VBAR_EL1) 기준으로 설명합니다. 먼저 테이블의 가장 왼쪽 행의 윗 부분에 "Exception taken from"이란 문구가 보이는데, 이는 익셉션이 발생한 시점의 익셉션 레벨을 뜻합니다. 그 다음 가장 오른쪽 행의 윗 부분에는 "Offset for excep

[Arm프로세서] Armv8: 익셉션 벡터 테이블이란

Guillermo Austin Kim|2021년 1월 31일

Armv8 아키텍처 기반에서 익셉션의 동작 원리를 파악하는 지름길은 무엇일까요? 바로 "익셉션 벡터 테이블"을 이해하는 것입니다. 익셉션 벡터 테이블은 익셉션이 발생하면 Arm 코어가 익셉션의 종류 별로 어떻게 프로그램 카운터를 변경하는지에 대한 내용을 담고 있기 때문입니다. 또한 Armv8 아키텍처에서 정의된 익셉션의 종류도 익셉션 벡터 테이블을 통해 알 수 있습니다. 이번 포스트에서는 Arm 사에서 배포한 익셉션 벡터 테이블을 분석하고 익셉션 핸들러의 코드를 분석하면서 익셉션의 동작 원리에 대해 설명하겠습니다. Written by 저자

[Arm프로세서] Armv8: Synchronous 익셉션을 유발할 때 변경되는 레지스터

Guillermo Austin Kim|2021년 1월 30일

이전 절에서 살펴봤다시피, Synchronous 익셉션을 유발하는 요인은 다음과 같이 분류됩니다. * 메모리 어보트를 유발하는 명령어 * svc 명령어로 슈퍼바이저 콜 발생 먼저 메모리 어보트를 유발하는 명령어를 실행했을 때 Synchronous 익셉션을 유발하는데, 이 과정에서 Arm 코어가 어떤 레지스터를 업데이트하는지 알아봅시다. 다음은 Synchronous 익셉션이 발생했을 때 전체 흐름과 Arm 코어의 세부 동작을 나타낸 그림입니다. 그림 9.11 Synchronous 익셉션을 유발할 때 변경되는 레지스터 그림 9.11은 9.4 절에서 봤던 그림 9.5와 비슷해 보입니다. 한 가지 차이점은, 그림의 가운데 부분인데 Arm 코어가 내부에서 하드웨어적으로 처리하는 부분을 표현한 슈

[Arm프로세서] Armv8: 'IRQ 인터럽트' 익셉션을 유발할 때 Arm 코어의 세부 동작

Guillermo Austin Kim|2021년 1월 28일

이어서 다음 그림을 보면서 Arm 코어가 IRQ 인터럽트 익셉션을 유발할 때 이를 처리하는 세부 과정을 알아봅시다. [참고]Armv8 아키텍처에서는 'FIQ 인터럽트' 익셉션도 지원하나, 실전 프로젝트에서 'FIQ 인터럽트' 익셉션은 트러스트존과 같이 Secure OS에서 사용합니다. 따라서 이번 절에서는 'IRQ 인터럽트' 익셉션을 중심으로 Arm 코어의 세부 동작을 설명합니다. 그림 9.12 'IRQ 인터럽트' 익셉션을 유발할 때 변경되는 레지스터 이제부터 ‘그림 9.12’ 가운데에 있는 슈도 코드를 분석하면서, Arm 코어 내부에서 하드웨어적으로 어떤 동작을 하는지 알아봅시다. 먼저 01번째 줄을 봅시다. 01 ELR_ELx = preferred_exception_return;