mirror of https://github.com/mkerrisk/man-pages
clone.2: Adjust syscall prototype and expand CLONE_SETTLS description
The prototype for the system call was added in kernel commit
81f10dad
, but looking at the kernel's fork.c, I believe the
relevant definition is
SYSCALL_DEFINE5(clone, unsigned long, clone_flags,
unsigned long, newsp,
int __user *, parent_tidptr,
int __user *, child_tidptr,
unsigned long, tls)
so the last argument is the tls argument, not a pt_regs argument.
I stumbled upon this while trying to understand CLONE_SETTLS, so
I expanded that description a little to cover other architectures.
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
2293a55f93
commit
dd6d3d2e5f
26
man2/clone.2
26
man2/clone.2
|
@ -51,14 +51,14 @@ clone, __clone2 \- create a child process
|
|||
|
||||
.BI "int clone(int (*" "fn" ")(void *), void *" child_stack ,
|
||||
.BI " int " flags ", void *" "arg" ", ... "
|
||||
.BI " /* pid_t *" ptid ", struct user_desc *" tls \
|
||||
.BI " /* pid_t *" ptid ", void *" newtls \
|
||||
", pid_t *" ctid " */ );"
|
||||
|
||||
/* Prototype for the raw system call */
|
||||
|
||||
.BI "long clone(unsigned long " flags ", void *" child_stack ,
|
||||
.BI " void *" ptid ", void *" ctid ,
|
||||
.BI " struct pt_regs *" regs );
|
||||
.BI " unsigned long " newtls );
|
||||
.fi
|
||||
.SH DESCRIPTION
|
||||
.BR clone ()
|
||||
|
@ -544,11 +544,25 @@ then trace the child also (see
|
|||
.BR ptrace (2)).
|
||||
.TP
|
||||
.BR CLONE_SETTLS " (since Linux 2.5.32)"
|
||||
The
|
||||
The TLS (Thread Local Storage) descriptor is set to
|
||||
.I newtls.
|
||||
|
||||
The interpretation of
|
||||
.I newtls
|
||||
argument is the new TLS (Thread Local Storage) descriptor.
|
||||
and the resulting effect is architecture dependent.
|
||||
On x86,
|
||||
.I newtls
|
||||
is interpreted as a
|
||||
.IR "struct user_desc *"
|
||||
(See
|
||||
.BR set_thread_area (2).)
|
||||
.BR set_thread_area (2)).
|
||||
On x86_64 it is the new value to be set for the %fs base register
|
||||
(See the
|
||||
.I ARCH_SET_FS
|
||||
argument to
|
||||
.BR arch_prctl (2)).
|
||||
On architectures with a dedicated TLS register, it is the new value
|
||||
of that register.
|
||||
.TP
|
||||
.BR CLONE_SIGHAND " (since Linux 2.0)"
|
||||
If
|
||||
|
@ -813,7 +827,7 @@ The raw system call interface on x86 and many other architectures is roughly:
|
|||
|
||||
.BI "long clone(unsigned long " flags ", void *" child_stack ,
|
||||
.BI " void *" ptid ", void *" ctid ,
|
||||
.BI " struct pt_regs *" regs );
|
||||
.BI " unsigned long " newtls );
|
||||
|
||||
.fi
|
||||
.in
|
||||
|
|
Loading…
Reference in New Issue