arch_prctl(2) System Calls Manual arch_prctl(2) NOM arch_prctl - Definir l'etat specifique a l'architecture d'un processus BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Definition des constantes ARCH_* */ #include /* Definition des constantes SYS_* */ #include 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(), necessitant l'utilisation de syscall(2). DESCRIPTION La fonction arch_prctl() definit l'etat specifique a l'architecture pour le thread ou le processus. code selectionne une sous-fonction et lui passe l'argument addr ; addr est interprete comme un unsigned long pour les operations << set >>, ou comme un unsigned long *, pour les operations << get >>. Les sous-fonctions pour les architectures x86 et x86-64 sont : ARCH_SET_CPUID (depuis Linux 4.12) Activer (addr != 0) ou desactiver (addr == 0) l'instruction cpuid pour le thread appelant. L'instruction est activee par defaut. Si elle est desactivee, l'execution de l'instruction cpuid generera un signal SIGSEGV. Cette fonctionnalite peut etre utilisee pour emuler des resultats de cpuid qui different de ceux obtenus normalement sur le materiel sous-jacent (par exemple dans un environnement de paravirtualisation). Le parametre ARCH_SET_CPUID est preserve pendant un fork(2) et un clone(2) mais il est reinitialise a l'etat par defaut (donc cpuid active) en cas de execve(2). ARCH_GET_CPUID (depuis Linux 4.12) Renvoyer la position de l'attribut manipule par ARCH_SET_CPUID sous forme d'un appel systeme (1 pour active, 0 pour desactive). addr est ignore. Les sous-fonctions pour l'architecture x86-64 sont : ARCH_SET_FS Remplir la base 64 bits pour le registre FS avec addr. ARCH_GET_FS Renvoyer la valeur dans la base 64 bits pour le registre FS du thread appelant dans la variable unsigned long pointee par addr. ARCH_SET_GS Remplir la base 64 bits pour le registre GS avec addr. ARCH_GET_GS Renvoyer la valeur dans la base 64 bits pour le registre GS du thread appelant dans la variable unsigned long pointee par addr. VALEUR RENVOYEE S'il reussit, arch_prctl() renvoie 0. En cas d'erreur, il renvoie -1 et remplit errno avec la valeur d'erreur. ERREURS EFAULT addr pointe vers une adresse non affectee ou est en dehors de l'espace d'adressage. EINVAL code n'est pas une sous-commande autorisee. ENODEV ARCH_SET_CPUID a ete sollicite mais le materiel ne prend pas en charge les erreurs CPUID. EPERM addr pointe en dehors de l'espace d'adressage du processus. STANDARDS Linux/x86-64. NOTES 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 selecteur de segment 32 bits est charge. ARCH_SET_GS est inactif dans certains noyaux. Les changements de contexte pour les bases 64 bits sont assez couteux. Pour les optimiser, si une adresse de base 32 bits TLS est utilisee, arch_prctl() peut utiliser une entree TLS reelle comme si on avait appele set_thread_area(2) plutot que de manipuler directement le registre de la base du segment. La memoire dans les premiers 2 Go d'adressage peut etre allouee en utilisant mmap(2) avec l'attribut MAP_32BIT. Du fait de l'optimisation precitee, l'utilisation de arch_prctl() et de set_thread_area(2) dans le meme thread est dangereuse car elles peuvent ecraser les entrees TLS entre elles. FS peut etre deja utilise par la bibliotheque de threading. Les programmes qui utilisent directement ARCH_SET_FS vont tres probablement planter. VOIR AUSSI mmap(2), modify_ldt(2), prctl(2), set_thread_area(2) Manuel du programmeur AMD X86-64 TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 arch_prctl(2)