Anatomie d'un bug
By Samuel D. - 14/12/2004
Sommaire:

 

Résolution du Bug

 

Comme nous l'avons vu précédemment, le bug de Memtest86+ provient d'un problème au niveau de l'initialisation de la FPU par le BIOS des cartes Asus 915/925. Nous allons donc remédier à ce problème en refaisant l'initialisation de la FPU qui n'a pas été faite correctement par le BIOS. Pour cela, intéressons nous à la manière de réinitialisé la stack FPU, et donc, de remettre le Tag Word à FFFF :

 

 

Selon la bible (comprenez le "IA-32 Intel® Architecture Software Developer’s Manual"), la meilleure façon de réinitialiser la FPU est d'utiliser l'instruction FINIT. Voici un descriptif plus complet de cette fonction :

 

 

Nous avons donc ajouté, directement dans le fichier head.S de Memtest86+, un simple FINIT. Celui-ci est exécuté si le CPU contient une FPU :

 

 

Vérifions ensuite que ce code est bien compilé dans Memtest86+ en désassemblant le code du FINIT :

 

 

Bref, pas de problème. Reste à voir l'effet du FINIT sur notre bug :

 

Sans "FINIT" :

 

Avec "FINIT" :

 

Comme on le voit, le problème est ici résolu et ne réapparaîtra plus. Si on pouvait croire à un bug matériel au début, force est de constater que le software peut parfois causer d'étrange bug. De même, il est étonnant de constater que ce problème n'est jamais survenu sur une carte Asus i865 ou i875, qui utilise pourtant le même BIOS. Il est également étonnant de constater qu'il ne survient que rarement sur P4 EE (nous n'avons pas reproduit le bug sur P4EE). Probablement une initialisation différente pour les deux CPUs. Quoi qu'il en soit, le problème est désormais entre les mains d'Asus qui, nous l'espérons, pourra nous fournir l'ultime explication...

 

 

 

Fermer