본문 바로가기
반응형

전체 글992

aarch64 익셉션 핸들링 aarch64의 가장 큰 구조적 특징은 새로운 익셉션 모델을 제공하는 것이다. 익셉션 레벨이 도입되었고, 익셉션 발생과 핸들링, 익셉션 복귀에 대한 규칙이 바뀌었다. 일반적으로 소프트웨어의 실행 흐름을 가로채는 동작을 인터럽트(interrupt)라고 하지만, ARM은 익셉션이라는 용어를 사용한다. 익셉션이 발생하면 이전 실행 흐름에서 벗어나 익셉션 타입에 따른 익셉션 핸들러를 호출한다. 익셉션 핸들러는 익셉션을 처리하고 익셉션 발생 전의 상태에서 실행을 재개한다. 익셉션 타입 익셉션을 발생시키는 상태 및 시스템 이벤트 서비스 호출 인스트럭션 익셉션 abort 익셉션 리셋 익셉션 인터럽트 익셉션 서비스 호출 인스트럭션 익셉션 익셉션을 발생시키는 인스트럭션들이 있다. 소프트웨어에서 좀 더 높은 특권 레벨(p.. 2021. 2. 15.
ABI의 레지스터 사용 규칙 아키텍처마다 바이너리들이 상호 동작하기 위한 규칙이 존재한다. 이를 ABI(Application Binary Interface)라고 하는데, ARM도 ABI가 존재한다. C/C++ 같은 프로그래밍 언어나 리눅스의 추가 규칙들이 더해진다. ABI 중에서 함수 호출을 다루는 AAPCS64(Procedure Call Standard for the ARM 64-bit Architecture)는 어셈블리(assembly)와 C함수 사이의 인터페이스, C 함수 호출 등에 관한 내용을 다룬다. 코드를 분석하거나 효율적인 코드를 작성하는데 도움이된다. 64비트 정수 레지스터의 제공으로 프로그래밍 언어에서 사용 가능한 변수의 폭이 다양해졌다. 32비트 데이터 모델인 ILP32와 함께 64비트 리눅스의 기본 데이터 모델인.. 2021. 2. 15.
시스템 레지스터 aarch64에서 시스템 설정은 각 시스템 레지스터를 통해 제어되며, MSR 및 MRS 인스트럭션을 사용하여 접근할 수 있다. aarch64는 코프로세서(coprocessor)를 지원하지 않으므로 ARMv7처럼 CP15 연산을 통한 인터페이스를 제공되지 않는다. 시스템 레지스터의 이름 끝에 붙은 숫자는 해당 레지스터에 접근할 수 있는 가장 낮은 익셉션 레벨을 알려준다. 예를 들어, TTBR0_EL1 레지스터의 값은 x0 레지스터로 읽어올 때는 다음과 같이 인스트럭션을 사용한다. MRS x0, TTBR0_EL1 반대로 x0 레지스터의 값을 TTBR0_EL1 레지스터에 쓸 때는 다음과 같은 인스트럭션을 사용한다. MSR TTBR0_EL1, x0 2021. 2. 9.
aarch64 특수 목적 레지스터 aarch64에서 범용 레지스터와 함께 특수 목적 레지스터들이 제공된다. 레지스터 이름 익셉션 레벨별 특수 목적 레지스터 EL0 EL1 EL2 EL3 ZR(Zero Register) XZR / WZR PC (Program Counter) PC SP (Stack Pointer) SP_EL0 SP_EL1 SP_EL2 SP_EL3 ELR (Exception Link Register) ELR_EL1 ELR_EL2 ELR_EL3 SPSR (Saved Process Status Register) SPSR_EL1 SPSR_EL2 SPSR_EL3 PC (Program Counter) PC 레지스터는 다음에 실행할 인스트럭션의 위치를 저장하는 레지스터다. ARMv8에서 PC 레지스터는 프로그래머가 직접 접근하지 못한다... 2021. 2. 9.
프로세서 상태 레지스터(PSTATE) PSTATE는 프로세서 상태(Processor STATE) 정보를 제공하는데, aarch64 전용, aarch32 전용, aarch64와 aarch32의 공통 속성으로 구성된다. ARMv7에서 현재 프로세스 정보를 나타내는 CPSR과 1:1 대응하지 않는다. aarch64 전용 이름 타입 설명 D(Debug) 익셉션 마스크 이 비트가 설정되면 디버그 익셉션 발생을 막는다. SP(Stack Pointer selector) 실행 살태 제어 사용할 스택 포인터를 선택한다. 0은 SP_EL0사용하고, 1은 SP_ELx를 사용한다. 공통 이름 타입 설명 N(Negative) 조건 플래그 연산 결과가 음수인 경우 설정 Z(Zero) 조건 플래그 연산 결과가 0인 경우 설정 V(Overflow) 조건 플래그 캐리가 .. 2021. 2. 9.
ARMv8 레지스터 aarch64는 64비트 크기의 범용 레지스터 31개(X0 ~ X30)를 제공한다. ARMv7에서 프로세서 모드(Processor mode)에 따라 제공되었던 별도의 레지스터들이 없어지고 하나의 레지스터 세트를 모든 익셉션 레벨에서 사용 가능하도록 변경한 것이다. 범용 레지스터에 접근할 떄 X0 ~ X30 이라는 이름으로 지정하면 64비트를 모두 사용하고, W0 ~ W30 이라는 이름으로 지정하면 이 중 하위 32비트만 사용한다. 2021. 2. 9.
반응형