Pintos Project 2 git book - Argument Passing

이후띵·2022년 1월 11일
0

PintOS

목록 보기
21/31

Argument Passing

Setup the argument for user program in process_exec()

x86-64 calling Convention

  1. 유저레벨 응용은 %rdi, %rsi, %rdx, %rcx, %r8 and %r9 등의 시퀀스를 넘겨주기 위해서 정수레지스터들을 사용한다.
  2. caller(함수를 호출한 애)는 다음 인스트럭션의 주소를 스택에 push하고, callee(함수)의 첫 인스트럭션으로 넘어간다(jump). 단일 x86-64 인스트럭션은 call 을 통해 push, jump 두 과정을 한다.
  3. callee(함수)가 실행된다.
  4. callee(함수)에 반환값이 있으면, RAX 레지스터에 저장시킨다.
  5. callee(함수)는 스택에 저장해놨던 다음 스텝의 인스트럭션 주소를 pop하고, 그 주소가 가리키는 장소로 이동한다(jump). 일련의 과정은 x86-64. RET 인스트럭션을 사용하여 실행한다.

핀토스 C 라이브러리는 lib/user/entry.c의 _start() 함수를 유저프로그램의 시작점으로 가리킨다.

exit 함수가 main을 감싸고 있고, main함수의 리턴값에 따라서 exit 상태를 확인할 수 있을 듯.

profile
이후띵's 개발일지

0개의 댓글