mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
Clarify comment.
This commit is contained in:
parent
330a187b8f
commit
092fd00d56
@ -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) \
|
||||
|
Loading…
Reference in New Issue
Block a user