Guillermo Austin Kim
Posts
998 posts[Arm프로세서] Armv7: 익셉션 벡터 테이블이란
익셉션이 발생하면 ARM 프로세서는 익셉션 별로 지정된 주소로 프로그램 카운터를 브랜치합니다. 익셉션 별로 지정된 주소를 익셉션 벡터라고 하는데, 익셉션 벡터는 8개의 연속된 4바이트 단위의 주소로 구성돼 있습니다. 이 8개의 익셉션 벡터를 익셉션 벡터 테이블이라고 합니다. 먼저 다음 표를 보면서 익셉션 벡터 테이블을 배워 봅시다. 표 8.4 익셉션 벡터 테이블 표의 왼쪽 행은 익셉션 벡터 베이스 주소 기준의 오프셋인데, 오른쪽 행을 보면 오프셋 별에 대응되는 익셉션의 종류가 보입니다. 이로써, 익셉션 벡터의 주소는 익셉션의 종류에 따라 다르다는 점을 확인할 수 있습니다. 가장 왼쪽 행의 윗 부분은 '익셉션 벡터 테이블의 베이스' 주소인데, 먼저 이 내용부터 알아봅시다. ARM 프로세서는 익셉션의
[Armv8] SError 익셉션 클래스의 정체
arm 사의 개발자들이 리눅스 커널에 훌륭한 디버깅 용 코드를 많이 반영했습니다. 그 중 하나가 익셉션 클래스를 관리하는 esr_class_str 전역 변수인데, 이 배열의 원소 중 SError 항목이 있습니다. 다음은 esr_class_str 배열의 선언부입니다. const char *esr_class_str[] = { [0 ... ESR_ELx_EC_MAX] = "UNRECOGNIZED EC", [ESR_ELx_EC_UNKNOWN] = "Unknown/Uncategorized", [ESR_ELx_EC_WFx] = "WFI/WFE", [ESR_ELx_EC_CP15_32] = "CP15 MCR/MRC",... [ESR_ELx_EC_FP_EXC32] = "FP (AArch32)", [ESR_ELx
[Armv8] SError(System Error) 익셉션이란
SError(System Error) 익셉션은 Armv8 아키텍처에서 소개된 익셉션입니다. 기존 Armv7 아키텍처에 익숙한 분들에겐 생소해 보일 수 있는데요, arm사에서 배포한 문서를 보면서 SError(System Error) 익셉션의 정체를 알아봅시다. SError(System Error) 익셉션의 정의 'DDI0487Fc_armv8_arm' 문서의 D13.2.36 ESR_EL1, Exception Syndrome Register (EL1)' 절을 보면 다음과 같은 내용을 확인할 수 있습니다. ---EC == 0b101111SError interrupt.See ISS encoding for an SError interrupt--- SError에 interrupt를 붙혀서 표현하는데, 익셉션 클
[arm][Armv8] 리눅스 커널: 익셉션 벡터 코드 산책(매우 중요)
ARMv8 아키텍처에서 64비트 명령어를 지원하는 Aarch64 비트 아키텍처에서 익셉션 벡터가 어떤 방식으로 구성돼 있는지 확인하기 어렵다. 이번 시간에는 ARMv8 아키텍처에서 익셉션 벡터의 코드를 한번 감상해보자. 아래는 ARMv8 아키텍처의 익셉션 벡터를 나타낸다.[ARM® Cortex®-A Series Version: 1.0 Programmer’s Guide for ARMv8-A]링크: Exception type DescriptionVBAR_ELn + 0x000 Synchronous Current EL with SP0+ 0x080 IRQ/vIRQ+ 0x100 FIQ/vFIQ+ 0x180 SError/vSError+ 0x200 S
[Arm프로세서] Armv7: 익셉션이 발생한 명령어로 어떻게 복귀할까?
ARM 코어가 파이프 라인의 어느 단계에서 어떤 방식으로 익셉션을 유발하는지 알면, 자연히 익셉션이 발생한 다음 명령어로 복귀하는 방법도 알게 됩니다. 다음 표를 보면서 이 내용을 정리해 봅시다. 표 8.3 익셉션의 종류 별로 익셉션이 발생한 순간으로 복귀하는 명령어 먼저, 표 8.3 2번째 줄에 있는 Undefined Instruction 익셉션이 유발된 명령어로 복귀하는 방법에 대해 알아봅시다. ARM 파이프 라인의 구조에서 Undefined Instruction 익셉션은 디코딩 단계에서 유발되는데 ARM 코어는 r14_und 레지스터에 익셉션이 유발된 다음 명령어의 주소를 넣어줍니다. 그래서 r14_und 레지스터의 값을 프로그램 카운터로 이동하면 Undefined Instruction 익셉션이

