[Kos-dev] Bug de l'int $8 sur une machine normale

Thomas Petazzoni kos-dev@yoda.isnpro.com
Fri, 23 Feb 2001 23:14:24 +0100


salut,

bon je rappelle les faits : lorsque je faisais int $8 sous Bochs, ca
fonctionnait sans problemes, mais sur une machine normale, ca faisait
triple fault.

Alors j'ai affiche les adresses des TSS : elles avaient que 4 octets de
difference ! Meme sous Bochs, et pourtant la ca marchait !! Et un TSS ca
fait au minimum 104 octets (sauf si on rajoute des infos
supplementaires, ce que nous ne faisons pas).
J'ai d'abord cru a un bug du kmalloc ... mais nan, c'est un bug de moi !
et de d2, qui avait code ca avec moi.

on avait ecrit une structure tss :
typedef struct {
	tout le bazar qui fait 104 octets (dans task-x86/task-x86.h)
} tss_t;

puis pour allouer les tss on faisait :

	tss_t *double_fault_tss;
	tss_t *system_tss;

	double_fault_tss = kmalloc(sizeof(double_fault_tss));
	system_tss = kmalloc(sizeof(system_tss));

donc ca allouait seulement de la place pour un pointeur, soit 4 octets :
il fallait donc faire :

	double_fault_tss = kmalloc(sizeof(tss_t));
	et idem pour l'autre.

voila, je raconte ma vie, mais c'est pour conclure sur le fait que Bochs
ne detecte pas tous les Bugs, alors pensez a tester sur une machine
'normale' de temps en temps !

amicalement,

thomas

-- 
PETAZZONI Thomas
thomas.petazzoni@meridon.com     UIN : 34937744
Projet KOS : http://kos.enix.org