aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/x86_64/clone.S
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-02-13 11:46:38 -0800
committerH.J. Lu <hjl.tools@gmail.com>2021-02-22 04:30:38 -0800
commitebbb8c9f64c3486603ef4ccee4dd2a5574e41039 (patch)
tree2119453ba4c6feff51602daf3a7eebd289b28467 /sysdeps/unix/sysv/linux/x86_64/clone.S
parentf8ff5a3cc2e401c586244bbdc27ea236229b7cb7 (diff)
downloadglibc-ebbb8c9f64c3486603ef4ccee4dd2a5574e41039.tar
glibc-ebbb8c9f64c3486603ef4ccee4dd2a5574e41039.tar.gz
glibc-ebbb8c9f64c3486603ef4ccee4dd2a5574e41039.tar.bz2
glibc-ebbb8c9f64c3486603ef4ccee4dd2a5574e41039.zip
x86_64/clone.S: Upate comments
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86_64/clone.S')
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/clone.S14
1 files changed, 8 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/clone.S b/sysdeps/unix/sysv/linux/x86_64/clone.S
index 51638d897b..31ac12da0c 100644
--- a/sysdeps/unix/sysv/linux/x86_64/clone.S
+++ b/sysdeps/unix/sysv/linux/x86_64/clone.S
@@ -24,18 +24,20 @@
#include <asm-syntax.h>
/* The userland implementation is:
- int clone (int (*fn)(void *arg), void *child_stack, int flags, void *arg),
+ int clone (int (*fn)(void *arg), void *child_stack, int flags,
+ void *arg, pid_t *parent_tid, void *tls, pid_t *child_tid);
the kernel entry is:
- int clone (long flags, void *child_stack).
+ int clone (long flags, void *child_stack, pid_t *parent_tid,
+ pid_t *child_tid, void *tls);
The parameters are passed in register and on the stack from userland:
rdi: fn
rsi: child_stack
rdx: flags
rcx: arg
- r8d: TID field in parent
- r9d: thread pointer
-%esp+8: TID field in child
+ r8: TID field in parent
+ r9: thread pointer
+%rsp+8: TID field in child
The kernel expects:
rax: system call number
@@ -60,7 +62,7 @@ ENTRY (__clone)
movq %rcx,8(%rsi)
/* Save the function pointer. It will be popped off in the
- child in the ebx frobbing below. */
+ child. */
movq %rdi,0(%rsi)
/* Do the system call. */