Clarify comment.

This commit is contained in:
Andreas Jaeger 2003-03-04 12:33:28 +00:00
parent 330a187b8f
commit 092fd00d56
1 changed files with 21 additions and 16 deletions

View File

@ -134,37 +134,42 @@
jmp L(pseudo_end);
#endif /* PIC */
/* Linux/x86-64 takes system call arguments in registers:
/* The Linux/x86-64 kernel expects the system call parameters in
registers according to the following table:
Register setup:
system call number rax
syscall number rax
arg 1 rdi
arg 2 rsi
arg 3 rdx
arg 4 rcx
arg 4 r10
arg 5 r8
arg 6 r9
The Linux kernel uses and destroys internally these registers:
return address from
syscall rcx
additionally clobered: r12-r15,rbx,rbp
eflags from syscall r11
The compiler is going to form a call by coming here, through PSEUDO, with arguments:
Normal function call, including calls to the system call stub
functions in the libc, get the first six parameters passed in
registers and the seventh parameter and later on the stack. The
register use is as follows:
syscall number in the DO_CALL macro
arg 1 rdi
arg 2 rsi
arg 3 rdx
arg 4 r10
arg 5 r8
arg 6 r9
system call number in the DO_CALL macro
arg 1 rdi
arg 2 rsi
arg 3 rdx
arg 4 rcx
arg 5 r8
arg 6 r9
We have to take care that the stack is alignedto 16 bytes. When
called the stack is not aligned since the return address has just
been pushed.
We have to take care that the stack is aligned to 16 bytes. When
called the stack is not aligned since the return address has just
been pushed.
Syscalls of more than 6 arguments are not supported. */
Syscalls of more than 6 arguments are not supported. */
#undef DO_CALL
#define DO_CALL(syscall_name, args) \