[OSy] Stack frame v mips o32 abi
Adam Hraska
smudloadam at gmail.com
Wed Nov 10 23:29:39 CET 2010
Dobry den,
v Mips 32-bit ABI (o32) som sa dozvedel ([1] figure 3-21
na 28 strane pdf), ze volajuci musi na stacku vyhradit
miesto pre prve 4 argumenty funkcie, i ked su predavane
v registroch. Volajuci ma povinnost vyhradit taketo
4 * 4B = 16B miesto dokonca i v pripade, ze volana funkcia
ma menej ako 4 parametre (pozri 3-15 v [1]).
GCC s prepinacom "-mabi=32" [2] pritom skutocne generuje
kod, ktory miesto vyuziva. Napr. funkcia _assert() v nasom
kerneli ma takyto prolog:
80002400 <_assert>:
80002400: 27bdffa8 addiu sp,sp,-88
80002404: afbf0054 sw ra,84(sp)
80002408: afb10050 sw s1,80(sp)
8000240c: afb0004c sw s0,76(sp)
80002410: afa5005c sw a1,92(sp) // <--
80002414: afa60060 sw a2,96(sp) // <--
...
Tutu zaujimavost treba mat na pamati pri inicializacii
stacku pre vstupnu funkciu threadu a pri pisani kuskov
kodu v assembleri, ktore nasledne volaju C-ckove funkcie.
Kalisto 0.8.8 na konvenciu zabuda v init_thread() a
pri funkciach volanych z head.S.
S pozdravom
Adam Hraska
Zdroje:
[1] http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf
[2] http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html
More information about the NSWI004
mailing list