Re: [PATCH 1/3] set_thread_area.2: describe [sg]et_thread_areay syscalls on m68k/MIPS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Eugene,

On 04/14/2018 07:47 PM, Eugene Syromyatnikov wrote:
> syscalls with the same name present on these architectures, but they
> simply allow setting some arbibtrary value which can be interpreted as a
> thread pointer by a threading library.
> 
> * man2/set_thread_area.2 (.SH NAME): Rephrase in order to not mention
> GDT.
> (.SH SYNOPSIS): Add declarations for MIPS and m68k.
> (.SH DESCRIPTION, .SH RETURN VALUE): Add description for MIPS and m68k.
> (.SH NOTES): Mention a way to get thread pointer on MIPS.

Thanks. Patch applied.

Cheers,

Michael


> Signed-off-by: Eugene Syromyatnikov <evgsyr@xxxxxxxxx>
> ---
>  man2/set_thread_area.2 | 60 +++++++++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 55 insertions(+), 5 deletions(-)
> 
> diff --git a/man2/set_thread_area.2 b/man2/set_thread_area.2
> index ad2f064..58eb16b 100644
> --- a/man2/set_thread_area.2
> +++ b/man2/set_thread_area.2
> @@ -8,20 +8,54 @@
>  .\"
>  .TH SET_THREAD_AREA 2 2017-09-15 "Linux" "Linux Programmer's Manual"
>  .SH NAME
> -get_thread_area, set_thread_area \- set a GDT entry for thread-local storage
> +get_thread_area, set_thread_area \- manipulate thread-local storage information
>  .SH SYNOPSIS
>  .nf
>  .B #include <linux/unistd.h>
> -.B #include <asm/ldt.h>
> +
> +.B #if defined __i386__ || defined __x86_64__
> +.B # include <asm/ldt.h>
>  .PP
>  .BI "int get_thread_area(struct user_desc *" u_info );
>  .BI "int set_thread_area(struct user_desc *" u_info );
> +.PP
> +.B #elif defined __m68k__
> +.PP
> +.B "int get_thread_area(void);
> +.BI "int set_thread_area(unsigned long " tp );
> +.PP
> +.B #elif defined __mips__
> +.PP
> +.BI "int set_thread_area(unsigned long " addr );
> +.PP
> +.B #endif
>  .fi
>  .PP
>  .IR Note :
>  There are no glibc wrappers for these system calls; see NOTES.
>  .SH DESCRIPTION
> -Linux dedicates three global descriptor table (GDT) entries for
> +These calls provide architecture-specific support for a thread-local storage
> +implementation.
> +At the moment,
> +.BR set_thread_area ()
> +is available on m68k, MIPS, and x86 (both 32-bit and 64-bit variants);
> +.BR get_thread_area ()
> +is available on m68k and x86.
> +.PP
> +On m68k and MIPS,
> +.BR set_thread_area ()
> +allows storing an arbitrary pointer (provided in the
> +.B tp
> +argument on m68k and in the
> +.B addr
> +argument on MIPS) in kernel's structure associated with the caller thread
> +and then retrieving it via the
> +.BR get_thread_area ()
> +syscall (see also
> +.I NOTES
> +for the information regarding obtaining thread pointer on MIPS).
> +.PP
> +On x86, Linux dedicates three global descriptor table (GDT) entries for
>  thread-local storage.
>  For more information about the GDT, see the
>  Intel Software Developer's Manual or the AMD Architecture Programming Manual.
> @@ -41,6 +75,9 @@ struct user_desc {
>      unsigned int  limit_in_pages:1;
>      unsigned int  seg_not_present:1;
>      unsigned int  useable:1;
> +#ifdef __x86_64__
> +    unsigned int  lm:1;
> +#endif
>  };
>  .EE
>  .in
> @@ -93,10 +130,19 @@ Since Linux 3.19,
>  cannot be used to write non-present segments, 16-bit segments, or code
>  segments, although clearing a segment is still acceptable.
>  .SH RETURN VALUE
> -These system calls
> +On x86, these syscalls
>  return 0 on success, and \-1 on failure, with
>  .I errno
>  set appropriately.
> +.PP
> +On MIPS and m68k,
> +.BR set_thread_area ()
> +syscall always returns 0.
> +On m68k,
> +.BR get_thread_area ()
> +syscall returns (previously set via
> +.BR set_thread_area ())
> +thread area pointer value.
>  .SH ERRORS
>  .TP
>  .B EFAULT
> @@ -131,13 +177,17 @@ In the unlikely event that you want to call them directly, use
>  .PP
>  .BR arch_prctl (2)
>  can interfere with
> -.BR set_thread_area ().
> +.BR set_thread_area ()
> +on x86.
>  See
>  .BR arch_prctl (2)
>  for more details.
>  This is not normally a problem, as
>  .BR arch_prctl (2)
>  is normally used only by 64-bit programs.
> +.PP
> +On MIPS, in order to obtain thread area pointer, "rdhwr dest, $29" instruction
> +can be used; it traps and is handled by kernel.
>  .SH BUGS
>  On 64-bit kernels before Linux 3.19,
>  .\" commit e30ab185c490e9a9381385529e0fd32f0a399495
> 


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux