OPENSSL_ia32cap_loc(3) vecteur de capacités des processeurs

Other Alias

OPENSSL_ia32cap

SYNOPSIS


 unsigned int *OPENSSL_ia32cap_loc(void);
 #define OPENSSL_ia32cap ((OPENSSL_ia32cap_loc())[0])

DESCRIPTION

La valeur renvoyée par OPENSSL_ia32cap_loc() est l’adresse d’une variable qui contient les capacités d'un processeur IA-32 sous la forme d’un vecteur de bits comme elle apparait dans le couple de registres EDX:ECX après avoir exécuté l'instruction CPUID avec la valeur d'entrée EAX=1 (consultez la note applicative d'Intel nº 241618). Naturellement, cela n'a de sens que pour les plates-formes x86 et x86_64. La variable est normalement définie automatiquement lors de l'initialisation de la boîte à outils, mais peut être manipulée plus tard pour changer le comportement de la bibliothèque cryptographique. À ce jour, les bits suivants sont significatifs :
- le bit nº 4 indique la présence d'un compteur d'horodatage ;
- le bit nº 19 indique la disponibilité d’instruction CLFLUSH ;
- le bit nº 20, réservé par Intel, est utilisé pour choisir parmi les chemins de code RC4 ;
- le bit nº 23 indique la prise en charge de MMX ;
- le bit nº 24, bit FXSR, indique la disponibilité de registres XMM ;
- le bit nº 25 indique la prise en charge de SSE ;
- le bit nº 26 indique la prise en charge de SSE2 ;
- le bit nº 28 indique l'Hyperthreading, utilisé pour distinguer les cœurs avec cache partagé ;
- le bit nº 30, réservé par Intel, est propre aux processeurs Intel ;
- le bit nº 33 indique la disponibilité d’instruction PCLMULQDQ ;
- le bit nº 41 indique la prise en charge de SSSE3, supplément à SSE3 ;
- le bit nº 43 indique la prise en charge de XOP d’AMD (forcé à zéro sur les processeurs non AMD) ;
- le bit nº 57 indique l’extension de jeu d’instructions AES-NI ;
- le bit nº 59, bit OSXSAVE, indique la disponibilité de registres YMM ;
- le bit nº 60 indique l’extension AVX ;
- le bit nº 62 indique la disponibilité d’instruction RDRAND.

Par exemple, la suppression du bit nº 26 à l’exécution désactive l'utilisation du code optimisé pour SSE2 dans la bibliothèque cryptographique, alors que la suppression du bit nº 24 désactive le code SSE2 agissant sur la banque de registres XMM 128 bits. Cette dernière manipulation peut être utile si la cible est un CPU SSE2, mais que le système d'exploitation n’active pas les registres XMM. Même si la valeur peut être modifiée par programmation, définir une variable d'environnement du même nom avant d’exécuter l’application sera probablement plus approprié (par exemple, avec un processeur Intel P4, « env OPENSSL_ia32cap=0x16980010 apps/openssl », ou encore mieux, « env OPENSSL_ia32cap=~0x1000000 apps/openssl » pour obtenir le même résultat sans avoir à modifier le code source de l'application). Vous pouvez sinon reconfigurer la boîte à outils avec l’option no-sse2 et recompiler.

La suppression du bit nº 28 est moins intuitive. En réalité, ce n’est pas copié directement de la sortie de CPUID, mais ajusté pour indiquer si le cache de données est vraiment partagé ou non entre les cœurs logiques. Cela affecte alors la décision d’appliquer ou non des contre-mesures coûteuses contre les attaques temporelles de cache, en particulier sur le module assembleur AES.

Le vecteur est ensuite étendu avec le valeur EBX renvoyée par CPUID avec EAX=7 et ECX=0 en entrée. Les bits suivants sont significatifs :

- le bit nº 64+3 indique la disponibilité d’instructions BMI1, par exemple ANDN ;
- le bit nº 64+5 indique la disponibilité d’instructions AVX2 ;
- le bit nº 64+8 indique la disponibilité d’instructions BMI2, par exemple MUXL et RORX ;
- le bit nº 64+18 indique la disponibilité d’instruction RDSEED ;
- le bit nº 64+19 indique la disponibilité d’instructions ADCX et ADOX.

TRADUCTION

La traduction de cette page de manuel est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.