[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 아키텍처에 거의 그대
arm instruction(명령어) - strleb
By Guillermo Austin Kim | 2017년 12월 27일 |
strleb란 명령어를 본 적이 있나요? 전 잘 몰라서요, 이 명령어가 어떻게 동작하는지 테스트를 해봤거든요.그 내용을 정리해서 업데이트할께요. 제가 만난 명령어는 아래와 같거든요.cmp r3, #2 @ 1 //<<--[1]strleb r2, [r0], #1 @ 1 해석을 하면 아래와 같아요."R3이 0x2보다 같거나 작을 경우[1], r2의 하위 2바이트를 r0가 가리키는 주소에 있는 값에 저장한 후 r2를 1만큼 증가시킴" "strltb" 명령어는 아래 단어를 줄인 것 같은데요.Str(Store)|le(Signed less than OR equal) | b(Byte) 이 내용이 머리에 잘 안 들어와서 실제 Trace32로 이 명