[OSy] Stack frame v mips o32 abi
Petr Tuma
petr.tuma at d3s.mff.cuni.cz
Wed Nov 10 23:43:37 CET 2010
Velmi dobry postreh ! Diky, PT
On 11/10/2010 11:29 PM, Adam Hraska wrote:
> 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
>
> _______________________________________________
> OSy mailing list
> OSy at d3s.mff.cuni.cz
> https://d3s.mff.cuni.cz/mailman/listinfo/osy
More information about the NSWI004
mailing list