[OSy] zahada: Volani funkce promenneho poctu parametru pred navratem z jine funkci

Martin Decky decky at dsrg.mff.cuni.cz
Mon Oct 29 20:54:07 CET 2007


Hezky vecer,

nedovedu Vam presne rici, co je spatne, protoze bych musel mit
k dispozici cele Vase reseni (prosim, neposilejte mi to :)), jen nekolik
postrehu:

Pokud se pouzivaji funkce s promennym poctem parametru, je potreba
argumenty z registru mit take na zasobniku (protoze se k nim pote
pristupuje pres va_list). To je zrejme smysl tech instrukci

sw a2, 0x28(sp)
sw a3, 0x2c(sp)

Proc se pro ulozeni argumentu na zasobniku nevyhradi dostatecne misto,
mi ovsem z toho, co posilate, jasne neni. Pravdepodobne to bude nejaky
konflikt pouziti funkce s promennym poctem parametru a tail recursion
optimalizace. V pripade -O0 se to neprojevi proto, ze se vsechny
argumenty predavaji na zasobniku a tail recursion je vypnuta. Pripadne
muze byt problem v tom, ze ruzne casti kodu predpokladaji ruzne ABI
(neznam dalsi parametry prekladace, ktere pouzivate).

Zkuste porovnat, co prekladac pri -O2 vytvori, pokud tail recursion
zakazete (-fno-optimize-sibling-calls), resp. obracene povolite pro -O0.
Taky by bylo zajimave videt, proc v tom pripade, kdy se nejedna o tail
recursion, se na zasobniku nic neprepise (jak uvadite).

Zkuste si vyrobit co nejmensi test case, na kterem to budete moci snadno
sledovat. Pochopitelne nelze z principu vyloucit ani chybu v prekladaci
(muzete to vyzkouset v labu na starsi verzi), ale jako u vsech dalsich
chyb musi byt naprosto jasne, ze proste jen nedelate nekde neco, co
nemate ..


M.D.




More information about the NSWI004 mailing list