[OSy] zahada: Volani funkce promenneho poctu parametru pred navratem z jine funkci
David Matousek
david at matousec.com
Tue Oct 30 11:27:39 CET 2007
Zdravim,
Ano, ale co kdyz je to chyba kompilatoru?
V jake situaci uz jsem opravnen neco takoveho tvrdit?
Prave jsem vzal Kalisto 0.7.2, pridal jsem printk, panic
do exc.c jsem nakonec exception() pridal pred return
printk("exception done\n");
a konecne do example.c jsem do example() na zacatek dal nasledujici:
int volatile i=0x12345678;
while (i==0x12345678)
{
if (i!=0x12345678) panic("i = 0x%x\n",i);
}
panic("i = 0x%x\n",i);
Todle je svym zpusobem minimalni priklad.
takle nejak vypada printk:
unsigned int printk(const char *format,...)
{
unsigned int res=0;
va_list args;
va_start(args,format);
res=printk_internal(format,args);
va_end(args);
return res;
}
a printk_internal je uz jedno co je (panikari to jak s prazdnym telem funkce, tak s normalni implementaci).
kdyz je printk_internal implementovano, tak panic vypise "i = 0x12345678"
tzn. v takto upravenem Kalisto se stane uplne presne to, co jsem popisoval pro nas kernel.
Uz mi nejak dochazi napady, co bych mel jeste zjistovat.
Proste si myslim, ze va_* funkce nekorektne nakladaji se zasobnikem v pripade,
ze se ta funkce s promennym poctem parametru vola na konci jine funkce.
A zda se byt uplne jedno, ktera funkce to je,
kdyz jsem ted presunul ten
printk("exception done\n");
z konce exception() do konce schedule()
tak je vysledek naprosto stejny, takze to neni tim, ze exception je svym zpusobem specialni
(je volana z rucne psaneho assemblerovskeho kodu). schedule() je normalni C funkce,
ktera je volana z jine normalni C funkce interrupt(). Tim jsem vyloucil chybu v implementaci
handle_general_exception a dal uz nevim, co bych mohl zjistovat.
DM
Martin Decky wrote:
>> -fno-optimize-sibling-calls funguje krasne. Kdyz se nebudete zlobit,
>> tak prozkoumani tohoto bugu odlozim na nejaky volny cas a prozatim
>> se spokojim s vypnutim teto optimalizace.
>
> Pro pruchod testy zakladniho zadani lze toto docasne reseni akceptovat,
> ale urcite se na to zamerte pred odevzdanim pokrocileho zadani (jinak
> bychom to totiz museli klasifikovat jako exemplarni priklad
> "neprirozeneho omezeni").
>
> Pokud je nejaka opravdu dulezita vec, kterou byste si meli z predmetu
> Operacni systemy odnest, tak je to ten fakt, ze chyby nevznikaji a
> neresi se jen tak samy od sebe. Vzdy existuje konkretni pricina a tu je
> potreba velmi precizne a nade vsi pochybnost vypatrat, aby bylo mozne
> chybu odstranit.
>
> Chci tim rici, ze -fno-optimize-sibling-calls je velmi pravdepodobne jen
> symptomaticka lecba .. ale ta chyba tam je nejspis porad a muze se
> projevit nekdy jindy jeste hure ..
>
>
> M.D.
>
> _______________________________________________
> OSy mailing list
> OSy at dsrg.mff.cuni.cz
> https://dsrg.mff.cuni.cz/mailman/listinfo/osy
More information about the NSWI004
mailing list