Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11105
637
415734


[ARM프로세서] 익셉션 벡터는 프로세스의 어느 공간에서 실행될까 Arm: Exception Overview

프로세스 입장에서 익셉션을 유발하는 명령어를 실행하면 ARM 프로세서는 익셉션 벡터로 프로그램 카운터를 브랜치합니다. 이어서 익셉션를 처리하는 익셉션 벡터 핸들러가 실행됩니다. 그렇다면 익셉션 벡터에서 실행되는 익셉션 벡터 핸들러는 실제 어느 공간에서 실행될까요? 익셉션 벡터 핸들러는 바로 프로세스의 스택 공간에서 실행됩니다.

이번 시간에 이 내용에 대해 조금 더 설명합니다. 

익셉션 벡터 핸들러가 프로세스의 스택 공간에 처리

다음 그림은 프로세스의 스택 공간에서 익셉션 벡터 핸들러가 호출되는 흐름을 나타냅니다.

 

그림 7.8 익셉션 벡터 핸들러가 프로세스 스택 공간에서 실행되는 흐름(ARMv7 아키텍처)

위 그림은 이전 절에서 소개한 proc_func_ptr() 함수가 seq_read() 함수를 통해 호출됐음을 알 수 있습니다. 먼저 가장 왼쪽 부분을 봅시다. 화살표는 프로세스의 스택에서 실행된 함수가 호출된 방향을 나타내는데, proc_func_ptr() 함수가 다음과 같이 04번째 줄을 실행하기 직전입니다.

00 <proc_func_ptr>
01 8004a1d4:   e1a0c00d    mov ip, sp
02 8004a1d8:   e92dd800    push    {fp, ip, lr, pc}
03 8004a1dc:   e24cb004    sub fp, ip, #4
04 8004a1e0:   e5900004    ldr r0, [r0, #4]

이어서 가운데 부분을 보겠습니다. 데이터 어보트라는 익셉션이 발생한 다음 익셉션 벡터 핸들러를 실행할 때의 콜스택입니다. 가장 윗 부분에 vector_dabt 레이블의 심벌이 보입니다. 이는 데이터 어보트가 발생할 때의 익셉션 벡터 주소에 vector_dabt 레이블을 브랜치하는 코드가 실행됐기 때문입니다.

그림 7.8 와 같이 익셉션 벡터는 프로세스의 스택 공간에서 실행된다는 사실을 알 수 있습니다. 여기까지 ARMv7 아키텍처 기준으로 익셉션 벡터 핸들러가 실행되는 과정을 설명했는데, ARMv8 아키텍처에서도 프로세스의 스택 공간에서 익셉션 벡터 핸들러가 처리됩니다.

Reference: ARM 프로세서 익셉션 소개

익셉션이란? 
익셉션의 주요 개념  
    ❑ 익셉션의 타입 소개
익셉션과 같이 배워야 하는 운영체제 지식



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










핑백

덧글

댓글 입력 영역