.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 2003 Free Software Foundation, Inc.
.\" Copyright (C) 2015 Andrew Lutomirski
.\" Author: Kent Yoder
.\"
.\" SPDX-License-Identifier: GPL-1.0-or-later
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH set_thread_area 2 "30 octobre 2022" "Pages du manuel de Linux 6.03" 
.SH NOM
get_thread_area, set_thread_area \- Manipuler les informations de la zone de
stockage locale du thread
.SH BIBLIOTHÈQUE
Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP)
.SH SYNOPSIS
.nf
\fB#include <sys/syscall.h>\fP   /* Définition des constantes \fBSYS_*\fP */
\fB#include <unistd.h>\fP
.PP
\fB#if defined __i386__ || defined __x86_64__\fP
\fB# include <asm/ldt.h>\fP      /* Définition de \fBstruct user_desc\fP */
.PP
\fBint syscall(SYS_get_thread_area, struct user_desc *\fP\fIu_info\fP\fB);\fP
\fBint syscall(SYS_set_thread_area, struct user_desc *\fP\fIu_info\fP\fB);\fP
.PP
\fB#elif defined __m68k__\fP
.PP
\fBint syscall(SYS_get_thread_area);\fP
\fBint syscall(SYS_set_thread_area, unsigned long \fP\fItp\fP\fB);\fP
.PP
\fB#elif defined __mips__\fP
.PP
\fBint syscall(SYS_set_thread_area, unsigned long \fP\fIaddr\fP\fB);\fP
.PP
\fB#endif\fP
.fi
.PP
\fINote\fP\ : la glibc ne fournit pas de fonction autour de cet appel système,
l'utilisation de \fBsyscall\fP(2) est requise.
.SH DESCRIPTION
Ces appels fournissent la prise en charge spécifique à l'architecture de
l'implémentation d'un stockage local du thread. Pour le moment,
\fBset_thread_area\fP() est disponible sur m68k, MIPS et x86 (variantes 32 et
64 bits)\ ; \fBget_thread_area\fP() est disponible sur m68k et x86.
.PP
Sur m68k et MIPS, \fBset_thread_area\fP() permet de stocker un pointeur
arbitraire (fourni dans les paramètres \fBtp\fP sur m68k et \fBaddr\fP sur MIPS)
dans la structure de données du noyau associée au thread appelant\ ; ce
pointeur peut être récupéré ensuite en utilisant \fBget_thread_area\fP() (voir
aussi les NOTES pour des informations sur l'obtention du pointeur du thread
sur MIPS).
.PP
Sur x86, Linux consacre trois entrées de la GDT (Table globale de
descripteurs) au stockage local du thread. Pour plus d'informations sur la
GDT, voir le manuel du développeur logiciel d'Intel ou le manuel de
programmation de l'architecture AMD.
.PP
Les deux appels système prennent un argument qui est un pointeur vers une
structure du type suivant\ :
.PP
.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
.PP
\fBget_thread_area\fP() lit l'entrée de la GDT indiquée par
\fIu_info\->entry_number\fP et remplit le reste des champs dans \fIu_info\fP.
.PP
\fBset_thread_area\fP() définit une entrée TLS (Mémoire locale de thread) dans
la GDT.
.PP
L'entrée de la table de stockage local du thread (TLS) définie par
\fBset_thread_area\fP() correspond à la valeur \fIu_info\->entry_number\fP
fournie par l'utilisateur. Si la valeur est dans les limites,
\fBset_thread_area\fP() copie le descripteur TLS pointé par \fIu_info\fP dans la
table TLS du thread.
.PP
Quand \fBset_thread_area\fP() reçoit un nombre \fIentry_number\fP valant \fB\-1\fP, il
cherche une entrée libre dans la table TLS. Si \fBset_thread_area\fP() trouve
une entrée TLS libre, la valeur de \fIu_info\->entry_number\fP est remplie
au retour pour montrer quelle entrée a été modifiée.
.PP
Un \fIuser_desc\fP est considéré comme «\ vide\ » si \fIread_exec_only\fP et
\fIseg_not_present\fP sont positionnés sur \fB1\fP et tous les autres champs
valent \fB0\fP. Si un descripteur «\ vide\ » est passé à \fBset_thread_area\fP(),
l'entrée TLS correspondante sera effacée. Voir BOGUES pour des détails
complémentaires.
.PP
Depuis Linux 3.19, \fBset_thread_area\fP() ne peut pas être utilisé pour écrire
des segments non présents, segments 16 bits ou de code, bien que le vidage
d'un segment soit toujours acceptable.
.SH "VALEUR RENVOYÉE"
Sur x86, ces appels système renvoient \fB0\fP s'ils réussissent et \fB\-1\fP s'ils
échouent en positionnant \fIerrno\fP pour indiquer l'erreur.
.PP
Sur MIPS et m68k, \fBset_thread_area\fP() renvoie toujours \fB0\fP. Sur m68k,
\fBget_thread_area\fP() renvoie la valeur du pointeur de la zone de thread
(précédemment définie à l'aide de \fBset_thread_area\fP()).
.SH ERREURS
.TP 
\fBEFAULT\fP
\fIu_info\fP est un pointeur non valable.
.TP 
\fBEINVAL\fP
\fIu_info\->entry_number\fP est en dehors des limites.
.TP 
\fBENOSYS\fP
\fBget_thread_area\fP() ou \fBset_thread_area\fP() a été appelé en tant qu'appel
système 64\ bits.
.TP 
\fBESRCH\fP
(\fBset_thread_area\fP()) Impossible de trouver une entrée TLS libre.
.SH VERSIONS
\fBset_thread_area\fP() est apparue pour la première fois dans
Linux\ 2.5.29. \fBget_thread_area\fP() est apparu dans Linux\ 2.5.32.
.SH STANDARDS
\fBset_thread_area\fP() et \fBget_thread_area\fP() sont spécifiques à Linux et ne
devraient pas être employés dans des programmes conçus pour être portables.
.SH NOTES
Ces appels système ne sont généralement conçus que pour une utilisation dans
des bibliothèques de segmentation de processus.
.PP
\fBarch_prctl\fP(2) peut interférer avec \fBset_thread_area\fP() sur x86. Voir
\fBarch_prctl\fP(2) pour plus de détails. Il ne s'agit pas d'un problème en
général, car \fBarch_prctl\fP(2) n'est en principe utilisé que par des
programmes 64\ bits.
.PP
Sur MIPS, la valeur actuelle du pointeur de la zone de thread peut être
récupérée en utilisant l'instruction\ :
.PP
.in +4n
.EX
rdhwr dest, $29
.EE
.in
.PP
Cette instruction intercepte et est prise en charge par le noyau.
.SH BOGUES
.\" commit e30ab185c490e9a9381385529e0fd32f0a399495
Sur des noyaux 64\ bits avant Linux\ 3.19, un des bits de remplissage de
\fIuser_desc\fP, s'il est positionné, empêcherait le descripteur d'être
considéré comme vide (voir \fBmodify_ldt\fP(2)). Il s'en suit que la seule
manière fiable d'effacer une entrée TLS est d'utiliser \fBmemset\fP(3) pour
mettre à zéro toute la structure \fIuser_desc\fP, y compris les bits de
remplissage, puis de positionner les bits \fIread_exec_only\fP et
\fIseg_not_present\fP. Sur Linux\ 3.19, un \fIuser_desc\fP consistant entièrement
en zéros sauf \fIentry_number\fP sera aussi interprété comme une requête pour
effacer une entrée TLS, mais le comportement était différent sur les anciens
noyaux.
.PP
Avant Linux 3.19, les registres de segment DS et ES ne doivent pas se
référer aux entrées TLS.
.SH "VOIR AUSSI"
\fBarch_prctl\fP(2), \fBmodify_ldt\fP(2), \fBptrace\fP(2) (\fBPTRACE_GET_THREAD_AREA\fP
et \fBPTRACE_SET_THREAD_AREA\fP)
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et 
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel, 
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .