__switch_to 함수 아규먼트 질문입니다.

choboja의 이미지

리눅스 커널 공부를 시작한 초보자입니다.

switch_to macro를 보던 중 질문이 생겨 글을 남기네요.

switch_to macro에서 _switch_to 함수를 호출하는데 jmp로 호출을 하는데
함수 아규먼트는 어떻게 전달이 되는건지 이해가 되지 않습니다.

즉, struct task_struct fastcall* __switch_to(struct task_sturct *prev_p, struct task_struct *next_p)

함수가 정의되어 있네요. 검색해보니 eax와 edx register를 통해 전달을 받는다는데,
그럼 prev_p = eax , next_p = edx 자동적으로 가르치게 되는건가요?

switch_to함수에서 eax와 edx에 prev와 next 로 mov하는 것을 못 찾겠네요.
"=a" (last) 이부분이 eax에 prev를 넣는부분인거 같기두 하구요.

답변 부탁드릴께요.

tsgates의 이미지

@switch_to
/* regparm parameters for __switch_to(): */ \
[prev] "a" (prev), \
[next] "d" (next) \