[Kos-dev] Stack Fault : expand down segment

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


> STOP ! le registre %ebp dans "imm(%ebp,%0)" utilise toujours implicitement
> %SS comme segment, or GCC peut utiliser cet adressage avec
> %ebp ------------------> BUUUUUUUUUUUUUUUUUG !

effectivement, il a ete confirme sur la pmode-l que GCC est un compilo
pour Flat Model, et qu'il ne peut pas compiler du code qui fonctionne
avec de la segmentation.
donc effectivement, il ne nous resterait que 2 solutions :
	- des piles statiques, ce que tout le monde semble recommander...
	- ou alors une task gate pour gerer le Page Fault, mais il parait que
c'est vraiment tres tres tres lent.

mais, Hlide nous propose :

> Ne cherchez pas des solutions compliquées pour si peu !!!! le double fault
> fonctionne !!! ABORT n'est qu'une étiquette que l'on colle, mais elle est
> rattrapable contrairement à ce qui est écrit (c'est seulement que l'on
> s'attend généralement à une utilisation de type ABORT pour le double fault),
> il suffit de modifier l'esp du TSS avant le double fault (dans le backlink
> du TSS doublefault). Et hop, le tour est joué.

je veux bien te croire (comme je te l'ai dit sur ICQ), mais c'est
curieux que Intel eux memes disent des conneries sur leurs procs. bon
c'est vrai qu'ils a des fonctions et des opcodes non documentees, mais
tout de meme. de toute facon, je vois Hlide samedi pour qu'on inspecte
ce probleme de plus pres.

d'autre part, d2 le sait, mais j'ai un truc curieux : le test de mon
task gate et tout ca sur le double fault, je le faisais via un asm("int
$8"). ca fonctionne nickel sous Bochs, mais quand on teste sur un vrai
PC, ca reboote. pourtant dans le handler du double fault, y'a une boucle
infinie, pour etre sur que ca ne foire pas pour une quelconque raison
lors du retour.
je vais essayer d'inspecter ca, mais vu que ca foire pas pour Bochs, le
debugging est difficile : quand je mets le int, ca chie, quand je le
mets pas ca chie pas. pourtant quand fait dumper la GDT, la Task Gate,
le TSS et tout a Bochs, tout semble correct, donc ca doit l'etre aussi
sur une machine normale.
j'ai note un seul probleme : on initialise SS2 a 0 dans le TSS, et quand
on le dump, on se rend compte que c'est pas egal mais une adresse un peu
inferieur a 6Mo (si bochs est configure avec 6Mo). bref, le mystere
reste complet. la suite dans quelques jours j'espere.

amicalement,

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