[OSy] SET_STATIC_STACK
Martin Decky
decky at dsrg.mff.cuni.cz
Mon Dec 14 16:13:39 CET 2009
Hezky den,
mate pravdu, pri blizsim zkoumani je skutecne videt, ze ten kod v
Kalistu je ponekud zmateny (a typicky funguje jen diky tomu, ze za
koncem statickeho zasobniku jednoho procesoru je zasobnik dalsiho
procesoru a tyto dalsi procesory prakticky nevyrizuji zadne vyjimky).
V priloze posilam opravu pro Kalisto. Tato oprava obsahuje nasledujici:
1) Odstranil jsem matouci poznamku o tom, ze se TLB Refill handler
vyhyba General Exception handleru. To je samozrejme pravda, ale
zduvodneni je jine: TLB Refill pouziva staticky zasobnik od vrcholu
(zasobnik roste smerem k nizsim adresam), zatimco General Exception
spravne pouziva staticky zasobnik ode dna (od nejnizsi adresy).
2) TLB Refill handler uz neuklada $badvaddr na staticky zasobnik. Je to
totiz zbytecne, TLB Refill handler neni reentrantni, takze si
$badvaddr nemusi nikam ukladat.
3) General Exception handler musi pouzivat staticky zasobnik pro
docasne ukladani nekterych CP0 registru ode dna, ne od vrcholu.
Proto je tam nyni displacement KERNEL_STACK_SIZE.
Diky za pozorne cteni kodu! Ocenuji, ze jste se skutecne snazil
pochopit, co kod dela a co by mel delat. Zaroven to ukazuje, ze pres
veskerou snahu lze v takovych zalezitostech trivialne udelat chybu.
M.D.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: static_stack.patch
Type: text/x-patch
Size: 2327 bytes
Desc: not available
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20091214/8b0c03bc/attachment.bin>
More information about the NSWI004
mailing list