ARMV8

포스트: 45|조회수: 0|ARTIFACT
Items

Posts

45 posts

[Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석

Guillermo Austin Kim|2021년 6월 24일

SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다. R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장 다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅시다. 01 0001047c :0203 int main(void)04 {05 1047c: e92d4800 push {fp, lr}06 10480: e28db004 add fp, sp, #407 10484: e24dd010 sub s

[Arm프로세서] Armv8: VBAR_ELx 기준으로 익셉션 벡터 테이블 분석 정리

Guillermo Austin Kim|2021년 2월 8일

이전 포스트까지 EL1에 존재하는 VBAR_EL1와 EL1에 있는 VBAR_EL2 기준으로 익셉션 벡터 테이블에 대해 알아봤습니다. 이제 원점으로 돌아가서 이번 절의 앞 부분에 소개한, Armv8 스팩 문서에 있는 익셉션 벡터 테이블을 보면서 배운 내용을 정리해봅시다. VBAR_EL1 기준으로 바라본 익셉션 벡터 테이블 먼저 VBAR_EL1 기준으로 익셉션 벡터 테이블을 분석해봅시다. 표 9.18 Armv8 아키텍처의 익셉센 벡터 테이블(출처: DDI0487Fc_armv8_arm.pdf) 표의 왼쪽 행의 2번째 열에 보이는 'Current Exception level'은 운영체제의 커널이 구동하는 EL1을 의미하며, EL1에서 익셉션이 유발되면 익셉션 벡터 베이스 주소에 아래와 같은 오프셋을 더한

[Arm프로세서] Armv7: 익셉션 핸들러란

Guillermo Austin Kim|2020년 12월 27일

처음 익셉션 벡터 테이블을 분석하면 다음과 같은 의문이 생기는 경우가 많습니다. "이와 관련된 코드는 어디에 구현돼 있을까?" 이 질문에 답을 하려면 익셉션 벡터와 관련된 코드가 무엇인지 알아야 하는데, 이를 익셉션 벡터 핸들러라고 합니다. 익셉션 벡터 핸들러는 익셉션의 종류 별로 소프트웨어적으로 처리되는 목적의 명령어로 구성돼 있는데 익셉션 벡터 주소에서 브랜치됩니다. 익셉션 핸들러 코드 분석하기 이제부터 오픈 소스 기반의 운영체제인 리눅스 커널에서 확인된 익셉션 벡터와 익셉션 백터 핸들러의 코드를 보면서 배운 내용을 다져봅시다. 다음은 익셉션 벡터와 익셉션 핸들러를 브랜치하는 코드입니다. 01 ffff0000: ea0003ff b 0xffff1004

[ARMv8] EL1: el1_sync - 익셉션 벡터 코드와 ARM 스팩 문서 분석

Guillermo Austin Kim|2020년 10월 16일

이번 포스트에서는 ARMv8 아키텍처 기반에서 구현된 익셉션 벡터의 코드를 리뷰해보겠습니다.물론 리눅스 커널에서 확인된 코드입니다. ARMv8 아키텍처의 익셉션 벡터 코드 다음은 ARMv8 아키텍처 기반의 익셉션 벡터 코드입니다. /*02 * Exception vectors.03 */04 .pushsection ".entry.text", "ax"05 06 .align 1107 ENTRY(vectors)08 kernel_ventry 1, sync_invalid // Synchronous EL1t09 kernel_ventry 1, irq_invalid // IRQ EL1t10 kernel_ventry 1, fiq_invalid