summaryrefslogtreecommitdiffstats
path: root/man2/set_thread_area.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/set_thread_area.2')
-rw-r--r--man2/set_thread_area.2229
1 files changed, 0 insertions, 229 deletions
diff --git a/man2/set_thread_area.2 b/man2/set_thread_area.2
deleted file mode 100644
index 389d65b..0000000
--- a/man2/set_thread_area.2
+++ /dev/null
@@ -1,229 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\" Copyright (C) 2015 Andrew Lutomirski
-.\" Author: Kent Yoder
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH set_thread_area 2 2023-10-31 "Linux man-pages 6.7"
-.SH NAME
-get_thread_area, set_thread_area \- manipulate thread-local storage information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.P
-.B #if defined __i386__ || defined __x86_64__
-.BR "# include <asm/ldt.h>" " /* Definition of " "struct user_desc" " */"
-.P
-.BI "int syscall(SYS_get_thread_area, struct user_desc *" u_info );
-.BI "int syscall(SYS_set_thread_area, struct user_desc *" u_info );
-.P
-.B #elif defined __m68k__
-.P
-.B "int syscall(SYS_get_thread_area);"
-.BI "int syscall(SYS_set_thread_area, unsigned long " tp );
-.P
-.B #elif defined __mips__ || defined __csky__
-.P
-.BI "int syscall(SYS_set_thread_area, unsigned long " addr );
-.P
-.B #endif
-.fi
-.P
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-These calls provide architecture-specific support for a thread-local storage
-implementation.
-At the moment,
-.BR set_thread_area ()
-is available on m68k, MIPS, C-SKY, and x86 (both 32-bit and 64-bit variants);
-.BR get_thread_area ()
-is available on m68k and x86.
-.P
-On m68k, MIPS and C-SKY,
-.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 and C-SKY)
-in the kernel data structure associated with the calling thread;
-this pointer can later be retrieved using
-.BR get_thread_area ()
-(see also NOTES
-for information regarding obtaining the thread pointer on MIPS).
-.P
-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.
-.P
-Both of these system calls take an argument that is a pointer
-to a structure of the following type:
-.P
-.in +4n
-.EX
-struct user_desc {
- unsigned int entry_number;
- unsigned int base_addr;
- unsigned int limit;
- unsigned int seg_32bit:1;
- unsigned int contents:2;
- unsigned int read_exec_only:1;
- 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
-.P
-.BR get_thread_area ()
-reads the GDT entry indicated by
-.I u_info\->entry_number
-and fills in the rest of the fields in
-.IR u_info .
-.P
-.BR set_thread_area ()
-sets a TLS entry in the GDT.
-.P
-The TLS array entry set by
-.BR set_thread_area ()
-corresponds to the value of
-.I u_info\->entry_number
-passed in by the user.
-If this value is in bounds,
-.BR set_thread_area ()
-writes the TLS descriptor pointed to by
-.I u_info
-into the thread's TLS array.
-.P
-When
-.BR set_thread_area ()
-is passed an
-.I entry_number
-of \-1, it searches for a free TLS entry.
-If
-.BR set_thread_area ()
-finds a free TLS entry, the value of
-.I u_info\->entry_number
-is set upon return to show which entry was changed.
-.P
-A
-.I user_desc
-is considered "empty" if
-.I read_exec_only
-and
-.I seg_not_present
-are set to 1 and all of the other fields are 0.
-If an "empty" descriptor is passed to
-.BR set_thread_area (),
-the corresponding TLS entry will be cleared.
-See BUGS for additional details.
-.P
-Since Linux 3.19,
-.BR set_thread_area ()
-cannot be used to write non-present segments, 16-bit segments, or code
-segments, although clearing a segment is still acceptable.
-.SH RETURN VALUE
-On x86, these system calls
-return 0 on success, and \-1 on failure, with
-.I errno
-set to indicate the error.
-.P
-On C-SKY, MIPS and m68k,
-.BR set_thread_area ()
-always returns 0.
-On m68k,
-.BR get_thread_area ()
-returns the thread area pointer value
-(previously set via
-.BR set_thread_area ()).
-.SH ERRORS
-.TP
-.B EFAULT
-\fIu_info\fP is an invalid pointer.
-.TP
-.B EINVAL
-\fIu_info\->entry_number\fP is out of bounds.
-.TP
-.B ENOSYS
-.BR get_thread_area ()
-or
-.BR set_thread_area ()
-was invoked as a 64-bit system call.
-.TP
-.B ESRCH
-.RB ( set_thread_area ())
-A free TLS entry could not be located.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR set_thread_area ()
-Linux 2.5.29.
-.TP
-.BR get_thread_area ()
-Linux 2.5.32.
-.SH NOTES
-These system calls are generally intended for use only by threading libraries.
-.P
-.BR arch_prctl (2)
-can interfere with
-.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.
-.P
-On MIPS, the current value of the thread area pointer can be obtained
-using the instruction:
-.P
-.in +4n
-.EX
-rdhwr dest, $29
-.EE
-.in
-.P
-This instruction traps and is handled by kernel.
-.SH BUGS
-On 64-bit kernels before Linux 3.19,
-.\" commit e30ab185c490e9a9381385529e0fd32f0a399495
-one of the padding bits in
-.IR user_desc ,
-if set, would prevent the descriptor from being considered empty (see
-.BR modify_ldt (2)).
-As a result, the only reliable way to clear a TLS entry is to use
-.BR memset (3)
-to zero the entire
-.I user_desc
-structure, including padding bits, and then to set the
-.I read_exec_only
-and
-.I seg_not_present
-bits.
-On Linux 3.19, a
-.I user_desc
-consisting entirely of zeros except for
-.I entry_number
-will also be interpreted as a request to clear a TLS entry, but this
-behaved differently on older kernels.
-.P
-Prior to Linux 3.19, the DS and ES segment registers must not reference
-TLS entries.
-.SH SEE ALSO
-.BR arch_prctl (2),
-.BR modify_ldt (2),
-.BR ptrace (2)
-.RB ( PTRACE_GET_THREAD_AREA " and " PTRACE_SET_THREAD_AREA )