[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터
By Guillermo Austin Kim | 2021년 7월 12일 |
Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 링크 레지스터인 R14에 복귀할 주소를 업데이트한다. * 서브 루틴을 호출할 때 전달되는 인자는 R0-R3 레지스터에 저장된다. * 함수의 리턴값은 R0 레지스터에 저장된다. 위에서 설명한 내용을 Armv8 아키텍처 관점으로 다음과 같이 바꿔서 말할 수 있습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루
[ARM프로세서] 소프트웨어 관점에서 익셉션(Exception)이란
By Guillermo Austin Kim | 2020년 11월 2일 |
소프트웨어 입장에서 익셉션이란 무엇일까요? 소프트웨어 입장에서는 익셉션의 종류에 따라 익셉션을 2가지 관점으로 볼 수 있습니다. ❑ 치명적인 오류: 메모리 어보트 타입 익셉션(Prefetch Abort, Data Abort, Undefined Instruction) ❑ 운영체제 커널에서 지원하는 기능: IRQ(인터럽트 서비스 루틴), SW 인터럽트(시스템 콜) 메모리 어보트 타입 익셉션이란 첫 번째, 메모리 어보트 타입 익셉션을 소프트웨어 관점으로 보면, 소프트웨어적으로 치명적인 오류가 발생했다고 볼 수 있습니다. 여기서 말하는 치명적인 오류가 발생하면 시스템이 리셋되는데, 이를 “크래시가 발생했다”라고 말합니다. 프로젝트를 개발하는 도중에 이런 치명적인 오류를 만나
[Arm프로세서] Armv8 익셉션 레벨: 하이퍼바이저 콜
By Guillermo Austin Kim | 2021년 12월 2일 |
운영체제의 커널이 구동되는 EL1에서 hvc 명령어를 실행하면 하이퍼바이저 콜이 발생해, EL1에서 EL2로 익셉션 레벨이 변경됩니다. 하이퍼바이저와 같은 가상화 환경에서 게스트 OS가 하이퍼바이저에게 어떤 서비스를 요청할 때 hvc 명령어를 실행합니다. 그림 4.8 가상화 환경에서 hvc 명령어를 실행할 때의 흐름 그림의 가운데 부분에서 ②로 표시된 부분을 봅시다. EL1에서 hvc 명령어를 실행해 EL2로 진입하는 동작을 나타냅니다. 이 동작은 Guest OS1과 Guest OS2에서 동시다발적으로 실행됩니다. [정보] EL1에서 hvc 명령어를 실행하면 EL2로 스위칭되면서 “EL2에서 실행되는 하이퍼바이저 내에 위치한” EL1 Synchronous 익셉션 벡터 주소로 프로그램
[ARM프로세서] ARMv7: 익셉션의 종류별 ARM 동작 모드 정리
By Guillermo Austin Kim | 2020년 12월 9일 |
이전 절에서 배운 바와 같이, ARM 코어는 익셉션을 유발할 때 익셉션의 종류에 따라 ARM의 동작 모드를 변경합니다. 익셉션을 다른 관점으로 보면, 익셉션은 "ARM 동작 모드를 변경하는 유발 인자"라고 볼 수 있는데, 다음 표에서 익셉션의 종류 별로 변경되는 ARM 동작 모드를 확인할 수 있습니다. 표 8.2 익셉션의 종류와 변경되는 ARM 동작 모드 표 8.2의 가장 왼쪽 부분은 익셉션의 종류, 가운데 부분은 해당 익셉션이 발생할 때 변경되는 ARM의 동작 모드를 나타냅니다. 가장 왼쪽 부분은 ARM 동작 모드를 담고 있는 CPSR 레지스터의 [4:0] 비트 정보입니다. ARM의 동작 모드를 변경하려면 CPSR 레지스터의 [4:0] 비트를 변경하면 됩니다. Written by <디버깅을 통해