PSTATE는 프로세서 상태 레지스터입니다. 이 레지스터를 이용해 프로세서의 상태를 알수도 있고 설정할 수도 있습니다. 아래 그림은 ARM Developer 페이지에서 가져온 그림입니다. PSTATE field를 정의해 놓았습니다.
(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/BABICCBC.html)
PSTATE의 각 비트가 하나 씩 어떤 행위를 하는지 정리해보겠습니다.
N(Negative Condition Flag) : 연산의 결과 값이 음수인 경우 설정되는 비트
Z(Zero Condition Flag) : 연산의 결과 값이 0인 경우 설정되는 비트
C(Carry Condition Flag) : 캐리 발생 시 설정되는 비트
V(oVerflow Condition Flag) : 오버플로우 발생 시 설정되는 비트
D(Debug mask bit) : 디버그 익센셥의 허용 유무를 설정하는 비트 (0 : 허용 / 1: 허용하지 않음)
A(SError mask bit) : 시스템 에러 익센션의 허용 유무를 설정하는 비트 (0 : 허용 / 1: 허용하지 않음)
I(IRQ mask bit) : IRQ 익센셥 발생을 허용 유무를 설정하는 비트 (0 : 허용 / 1: 허용하지 않음)
F(FIQ mask bit) : FIQ 익센셥 발생을 허용 유무를 설정하는 비트 (0 : 허용 / 1: 허용하지 않음)
SS(Software Step bit) : ...?
IL(Illegal Exception State bit) : 임의의 명령을 실행하지 못하고도록 설정하는 비트
EL(Exception level) : 현재 익센셥 레벨 표시
nRW(Excution state) : 현재 실행 상태 (aarch64 : 1 / aarch32 : 0)
SP(Stack Pointer Selector) : 사용할 스택포인터 설정하기 위한 비트 (0 : SP_EL0, 1 : SP_ELx)
'Linux > Kernel Analysis' 카테고리의 다른 글
void __init paging_init() - 커널 페이지 초기화 하기 (2) | 2018.09.29 |
---|---|
[커널분석] arm64_memblock_init() (1) | 2018.09.15 |
[커널분석] parse_early_param() (0) | 2018.09.08 |
[커널분석] static void __init setup_machine_fdt(phys_addr_t dt_phys) (0) | 2018.08.25 |
void __init early_fixmap_init(void) (작성중...) (0) | 2018.08.21 |