[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