[ARM프로세서] 익셉션(Exception)과 관련된 레지스터
By Guillermo Austin Kim | 2020년 10월 23일 |
실전 SW 개발자 입장에서 익셉션이 발생했을 때 확인해야 할 가장 중요한 정보는 레지스터입니다. ARM 프로세서는 익셉션을 감지하면 레지스터에 익셉션과 관련된 정보를 업데이트하기 때문입니다. 그렇다면 레지스터를 통해 SW 개발자는 어떤 정보를 얻을 수 있을까요? 먼저, 익셉션이 발생했을 때 실행된 명령어의 정확한 주소를 확인할 수 있습니다. ARMv7 아키텍처에서는 r14_<mode> 레지스터, ARMv8에서는 ELR_ELx 레지스터에 익셉션이 발생한 주소를 저장합니다. 이 정보를 참고로 함수의 호출 흐름까지 파악할 수 있습니다. 만약 익셉션의 타입이 메모리 어보트이면 레지스터 정보를 참고로 정확히 어떤 이유로 익셉션이 발생했는지 디버깅할 수 있습니다. 이 밖에도 ARMv7와 ARMv8 아키
[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - ldp
By Guillermo Austin Kim | 2021년 8월 11일 |
Armv7 아키텍처에서 push 명령어를 실행한 후 함수가 종료되기 직전에 반드시 실행되는 명령어가 pop입니다. 마찬가지로 Armv8 아키텍처에서 stp 명령어를 사용해 스택에 레지스터를 푸시한 후, 함수를 종료하기 직전에 실행되는 명령어는 ldp입니다. Arm 스팩 문서에서 ldp 명령어 분석하기 이번에도 Arm 스팩 문서를 보면서 ldp 명령어에 대해 살펴봅시다. C6.2.129 LDPLoad Pair of Registers calculates an address from a base register value and an immediate offset, loads two 32-bit words or two 64-bit doublewords from memory, and writes them
[ARM프로세서] ARMv7: 인터럽트 타입 익셉션을 유발할 때 ARM 코어의 세부 동작
By Guillermo Austin Kim | 2020년 12월 3일 |
이어서 IRQ 익셉션이 발생하는 전체 흐름을 살펴보면서, 세부 동작을 알아봅시다. 그림 8.10 인터럽트 타입 익셉션을 유발할 때 변경되는 레지스터 그림 8.10은 IRQ 인터럽트 익셉션의 전체 실행 흐름을 나타내는데, 그림의 가운데 부분을 보면 ARM 코어가 하드웨어적으로 처리되는 부분이 슈도 코드로 표기돼 있습니다. 이어서 슈도 코드를 분석하면서 ARM 코어의 세부 동작을 알아보겠습니다. 먼저 01번째 줄을 봅시다. 01 R14_irq = 0xc000d000 + 0x4 IRQ 익셉션이 발생했으니 ARM 코어는 IRQ 모드로 변경할 준비를 하는데, 먼저 IRQ 모드에서만 사용되는 R14_irq 레지스터에 인터럽트가 발생한 주소에 0x8를 더해 저장합니다. IRQ 인터럽트가 발생할 시점에 실행된
ARM64 - 각 익셉션(Exception) 레벨 소개
By Guillermo Austin Kim | 2017년 12월 23일 |
64비트의 ARM 아키텍쳐(ARMv8)의 익셉션 레벨에 대해 간단히 살펴보고자 합니다. 각 Exception Level(EL) 특징을 간단하게 적을께요.1> EL0 -> EL1 -> EL2 -> EL3로 갈수록 execution privilege가 증가해요. 볼 수 있는 코드나 파일에 대한 Permission이 더 있다는 거죠. 2> EL0는 유일한 unprivileged 특성을 가져요.3> EL2는 Non-secure 모드에서 가상화를 구현하기 위해서 사용되곤 하는데 자주 쓰지는 않아요.4> EL3는 secure 와 Non-secure 모드 전환을 위해서 사용되죠.5> ARMv8에서 EL0, EL1은 필수 구현 사항이며 나머지는 Option이에요.즉 ARMv8을