23.11.29 최초 작성
운영체제에서 유저 모드에서 커널모드로 진입하는 동작
open
, read
, write
)x08
레지스터에 시스템 콜 번호 저장하고 svc 0x0
실행)svc
: EL0 Synchronous
에 해당하는 Exception Vector
로 분기)VBAR_EL1 + 0x400
: EL0
익셉션 벡터 테이블로 분기, el0t_64_sync()
호출
el0t_64_sync()
: 일반 레지스터의 내용을 stack
공간에 저장, 돌아올 주소 공간 link register
에 저장, el0t_64_sync_handler()
호출
el0t_64_sync_handler()
: 익셉션 신드롬 레지스터(?) 정보를 읽어 익셉션 유발 세부 정보에 따라 실행할 함수를 호출
el0_svc()
: EL0
에서 호출된 경우 호출되는 함수, do_el0_svc()
호출do_el0_svc()
: x8
레지스터 값을 참고해el0_svc_common()
호출el0_svc_common()
: 레지스터, 시스템 콜 번호, 시스템 콜 테이블 주소값을 참고해 invoke_syscall()
호출시스템 콜 번호는 unistd.h
에 표기되어 있음