[ARM] ARMv7: 익셉션 벡터 테이블의 구현 방식 코드 분석
By Guillermo Austin Kim | 2020년 8월 14일 |
이번 포스트에서는 ARM 아키텍처의 핵심 개념 중 하나인 익셉션 벡터의 구현 방식에 대해 살펴보겠습니다. ○ ARMv7(Aarch32) ○ ARMv8(Aarch64) ARM 아키텍처에서 정의하는 익셉션의 타입은 3가지로 분류할 수 있습니다. ○ 메모리 어보트(Memory Abort) ○ 인터럽트(Interrupt) ○ 소프트웨어 인터럽트 ARMv7 아키텍처의 익셉션 벡터 테이블 위와 같은 익셉션이 발생하면 익셉션 종류별로 지정된 주소로 프로그램 카운터가 변경됩니다.다음은 리눅스 커널(non-secure)에서의 익셉션 벡터 테이블을 나타냅니다. 오프셋 익셉션 종류--------------------------------------- 0x0
[Arm프로세서] Armv8: XEN 하이퍼바이저에서 익셉션 레벨을 체크
By Guillermo Austin Kim | 2021년 12월 14일 |
EL1에서 실행되는 리눅스 커널과 마찬가지로, EL2에서 구동되는 XEN 하이퍼바이저도 익셉션 레벨을 읽어서 제어하는 코드를 볼 수 있습니다. 이번에는 EL2에서 구동되는 XEN 하이퍼바이저에서 익셉션 레벨을 체크하는 루틴을 소개합니다. 이번에는 EL2에서 실행되는 XEN 하이퍼바이저의 check_cpu_mode 레이블의 구현부를 분석하겠습니다. check_cpu_mode:02 PRINT("- Current EL ")03 mrs x5, CurrentEL04 print_reg x505 PRINT(" -\r\n")0607 /* Are we in EL2 */08 cmp x5, #PSR_MODE_EL2t09 ccmp
[ARM][브레인스토밍] 레지스터의 진실과 오해 - ①
By Guillermo Austin Kim | 2020년 7월 21일 |
ARM 프로세서의 레지스터에 대한 브레인 스토밍 노트의 내용을 저장합니다. # 레지스터란 CPU에서 연산하는 데이터를 저장하는 용도로 메모리 공간으로 속도가 가장 빠름# 사실 ARM 프로세서 내부에는 수 많은 레지스터가 있는데 유식한 용어로 물리 레지스터라고 말함# 일반적으로 레지스터라고 말하면 ARM 프로그래밍 모델의 레지스터를 뜻함. 이를 유식하게 논리 레지스터라고 함(이런 소리를 할 필요는 있는 지) # ARM 프로세서의 레지스터의 갯수가 많다고 불만을 토로하는 인간들이 있음.이게 다 명령어를 패턴화 시켜서 트렌지스터의 갯수를 줄이기 위한 아이디어에서 나왔음. 이걸 RISC라고 부르는데최근에 RISC와 CISC의 경계는 거의 사라짐. 그래도 ARM 프로세서를 소개할 때 RISC로 말하는 게 바람직.
[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인
By Guillermo Austin Kim | 2021년 7월 26일 |
이번 절에서는 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수가 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 printf("x:%d, y:%d \n", x, y);05 06 return result;07 } [정보]위에서 든 예시 코드는 6.2 절에서 봤던 코드와 같은데, Armv8 아키텍처 기반의 Arm 코어에서 이 코드를 실행하면 같은 기능을 수행합니다. Armv7 아키텍처 다룬 함수 디자인 규칙은 Armv8 아키텍처에 거의 그대