Man page - arch_prctl(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

arch_prctl

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
NOTES
VOIR AUSSI
TRADUCTION

NOM

arch_prctl - DĂ©finir l’état spĂ©cifique Ă  l’architecture d’un processus

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#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 op , unsigned long addr );
int syscall(SYS_arch_prctl, int
op , unsigned long * addr );

Note : la glibc ne fournit pas d’enveloppe autour de arch_prctl (), nĂ©cessitant l’utilisation de syscall (2).

DESCRIPTION

La fonction arch_prctl () dĂ©finit l’état spĂ©cifique Ă  l’architecture pour le thread ou le processus. op sĂ©lectionne une opĂ©ration 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 :
ARCH_SET_CPUID
(depuis Linux 4.12)

Activer ( addr != 0 ) ou dĂ©sactiver ( addr == 0 ) l’instruction cpuid pour le thread appelant. L’instruction est activĂ©e par dĂ©faut. Si elle est dĂ©sactivĂ©e, l’exĂ©cution de l’instruction cpuid gĂ©nĂ©rera un signal SIGSEGV . Cette fonctionnalitĂ© peut ĂȘtre utilisĂ©e pour Ă©muler des rĂ©sultats de cpuid qui diffĂšrent de ceux obtenus normalement sur le matĂ©riel sous-jacent (par exemple dans un environnement de paravirtualisation).

Le paramĂštre ARCH_SET_CPUID est prĂ©servĂ© pendant un fork (2) et un clone (2) mais il est rĂ©initialisĂ© Ă  l’état par dĂ©faut (donc cpuid activĂ©) en cas de execve (2).

ARCH_GET_CPUID (depuis Linux 4.12)

Renvoyer la position de l’attribut manipulĂ© par ARCH_SET_CPUID sous forme d’un appel systĂšme ( 1 pour activĂ©, 0 pour dĂ©sactivĂ©). addr est ignorĂ©.

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 pointée 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 pointée par addr .

VALEUR RENVOYÉE

S’il rĂ©ussit, 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 affectĂ©e ou est en dehors de l’espace d’adressage.

EINVAL

op n’est pas une opĂ©ration autorisĂ©e.

ENODEV

ARCH_SET_CPUID a été sollicité mais le matériel 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 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.

VOIR AUSSI

mmap (2), modify_ldt (2), prctl (2), set_thread_area (2)

Manuel du programmeur AMD X86-64

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>

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 .