Clarify comment.
authorAndreas Jaeger <aj@suse.de>
Tue, 4 Mar 2003 12:33:28 +0000 (12:33 +0000)
committerAndreas Jaeger <aj@suse.de>
Tue, 4 Mar 2003 12:33:28 +0000 (12:33 +0000)
sysdeps/unix/sysv/linux/x86_64/sysdep.h

index 7c0ea9e..c85c063 100644 (file)
   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:
-
-       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
-
-     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.
-
-     Syscalls of more than 6 arguments are not supported.  */
+    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:
+
+     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 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.  */
 
 #undef DO_CALL
 #define DO_CALL(syscall_name, args)            \