set_thread_area(2) System Calls Manual set_thread_area(2) get_thread_area, set_thread_area - (libc -lc) #include /* SYS_* */ #include #if defined __i386__ || defined __x86_64__ # include /* struct user_desc */ int syscall(SYS_get_thread_area, struct user_desc *u_info); int syscall(SYS_set_thread_area, struct user_desc *u_info); #elif defined __m68k__ int syscall(SYS_get_thread_area); int syscall(SYS_set_thread_area, unsigned long tp); #elif defined __mips__ || defined __csky__ int syscall(SYS_set_thread_area, unsigned long addr); #endif : glibc syscall(2). . set_thread_area() m68k MIPS C-SKY x86 ( 32-bit 64-bit) get_thread_area() m68k x86. m68k MIPS C-SKY set_thread_area() ( tp m68k addr MIPS C-SKY) get_thread_area() ( NOTES MIPS). x86 Linux (GDT) . GDT Intel AMD. : 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 }; get_thread_area() GDT u_info->entry_number u_info. set_thread_area() TLS GDT. TLS set_thread_area() u_info->entry_number . set_thread_area() TLS u_info TLS . entry_number -1 set_thread_area() TLS . set_thread_area() TLS u_info->entry_number . user_desc "" read_exec_only seg_not_present 1 0. "" set_thread_area() TLS . BUGS . Linux 3.19 set_thread_area() 16-bit . x86 0 -1 errno . C-SKY MIPS m68k set_thread_area() 0. m68k get_thread_area() ( set_thread_area()). EFAULT u_info . EINVAL u_info->entry_number . ENOSYS get_thread_area() set_thread_area() 64-bit. ESRCH (set_thread_area()) TLS . . set_thread_area() Linux 2.5.29. get_thread_area() Linux 2.5.32. . arch_prctl(2) set_thread_area() x86. arch_prctl(2) . arch_prctl(2) 64 . MIPS : rdhwr dest, $29 . 64 Linux 3.19 user_desc ( modify_ldt(2)). TLS memset(3) user_desc read_exec_only seg_not_present. Linux 3.19 user_desc entry_number TLS . Linux 3.19 DS ES TLS. arch_prctl(2) modify_ldt(2) ptrace(2) (PTRACE_GET_THREAD_AREA PTRACE_SET_THREAD_AREA) 3 . . : . 6.18 8 2026 set_thread_area(2)