arch_prctl(2) | System Calls Manual | arch_prctl(2) |
arch_prctl - Définir l'état spécifique à l'architecture d’un processus
Bibliothèque C standard (libc, -lc)
#include <asm/prctl.h> /* Définition des constantes ARCH_* */ #include <sys/syscall.h> /* Définition des constantes SYS_* */ #include <unistd.h>
int syscall(SYS_arch_prctl, int code, unsigned long addr); int syscall(SYS_arch_prctl, int code, unsigned long *addr);
Note : la glibc ne fournit pas d'enveloppe autour de arch_prctl(), nécessitant l'utilisation de syscall(2).
La fonction arch_prctl() définit l'état spécifique à l'architecture pour le thread ou le processus. code sélectionne une sous‐fonction et lui passe l'argument addr ; addr est interprété comme un unsigned long pour les opérations « set », ou comme un unsigned long *, pour les opérations « get ».
Les sous‐fonctions pour les architectures x86 et x86-64 sont :
S'il réussit, arch_prctl() renvoie 0. En cas d'erreur, il renvoie -1 et remplit errno avec la valeur d'erreur.
arch_prctl() est une extension Linux/x86-64 et ne doit pas être employée dans un programme portable.
arch_prctl() n'est pris en charge sur Linux/x86-64 que pour les programmes 64 bits.
La base 64 bits change lorsqu'un nouveau sélecteur de segment 32 bits est chargé.
ARCH_SET_GS est inactif dans certains noyaux.
Les changements de contexte pour les bases 64 bits sont assez coûteux. Pour les optimiser, si une adresse de base 32 bits TLS est utilisée, arch_prctl() peut utiliser une entrée TLS réelle comme si on avait appelé set_thread_area(2) plutôt que de manipuler directement le registre de la base du segment. La mémoire dans les premiers 2 Go d'adressage peut être allouée en utilisant mmap(2) avec l'attribut MAP_32BIT.
Du fait de l'optimisation précitée, l'utilisation de arch_prctl() et de set_thread_area(2) dans le même thread est dangereuse car elles peuvent écraser les entrées TLS entre elles.
FS peut être déjà utilisé par la bibliothèque de threading. Les programmes qui utilisent directement ARCH_SET_FS vont très probablement planter.
mmap(2), modify_ldt(2), prctl(2), set_thread_area(2)
Manuel du programmeur AMD X86-64
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>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
30 octobre 2022 | Pages du manuel de Linux 6.03 |