X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=doc%2Fstack_frames.txt;h=700c2e54ca31007707e7066b8896f26324b91637;hb=3b23931d1826144ec30695d9c0ba8b147a21191d;hp=b9cb04413831cad8cbddfe4f76d24a8a5f8a709c;hpb=611bfe887e3f7534ac513107a108605e780a8c2e;p=cacao.git diff --git a/doc/stack_frames.txt b/doc/stack_frames.txt index b9cb04413..700c2e54c 100644 --- a/doc/stack_frames.txt +++ b/doc/stack_frames.txt @@ -26,7 +26,7 @@ V | u8[] ^ callee-saved float registers | u4[] ^ callee-saved integer registers V -| >>>> sp on method entry <<<< +| >>>> sp on method entry, stack base for replacement <<<< | V u4 return address | u4[] arguments on stack @@ -39,20 +39,23 @@ x86_64 stack frames ,--memory address rising | -V >>>> sp in method (after initial sub) <<<< +V >>>> sp in method (after initial sub) (16-byte aligned in non-leaf methods) <<<< | | u8[] v arguments for calling methods \__ rd->memuse slots V u8[] v local variable slots allocated on stack / | -| u8 synchronized object / saved return value (only for synched methods) -V u8 alignment dummy slot (in non-leaf methods to ensure +| u8 v synchronized object / saved return value (only for synched methods) +V u8[0..1] alignment dummy slot (in non-leaf methods to ensure | 16-byte alignment of stack) | u8[] ^ callee-saved float registers V u8[] ^ callee-saved integer registers | -| >>>> sp on method entry <<<< +| >>>> sp on method entry, stack base for replacement (8-byte odd) <<<< V | u8 return address +| +V >>>>> (16-byte aligned) <<<< +| | u8[] arguments on stack V @@ -69,9 +72,13 @@ V >>>> sp in method (after initial sub) <<<< V u8[] v local variable slots allocated on stack / | | u8 synchronized object / saved return value (only for synched methods) +| u8[0..1] alignment dummy slot V | u8[] ^ callee-saved float registers | u8[] ^ callee-saved integer registers +V +| >>>> !!!replacement code regards this point as stack base!!! <<<< +| V u8 ^ saved return address (only for non-leaf methods) | | >>>> sp on method entry <<<< @@ -81,3 +88,53 @@ V V +mips stack frames +----------------- + +,--memory address rising +| +V >>>> sp in method (after initial sub) (16-byte aligned) <<<< +| +| u8[] v arguments for calling methods \__ rd->memuse slots +V u8[] v local variable slots allocated on stack / +| +| u8 synchronized object / saved return value (only for synched methods) +| u8[0..1] alignment dummy slot (to ensure 16-byte alignment of sp) +V +| u8[] ^ callee-saved float registers +| u8[] ^ callee-saved integer registers +V +| >>>> !!!replacement code regards this point as stack base!!! <<<< +| +V u8 ^ saved return address (only for non-leaf methods) +| +| >>>> sp on method entry (16-byte aligned) <<<< +V +| u8[] arguments on stack +| +V + + +powerpc stack frames +-------------------- + +,--memory address rising +| +V >>>> sp in method (after initial sub) (16-byte aligned) <<<< +| +| u4[] v arguments for calling methods (incl. LA) \__ rd->memuse slots +V u4[] v local variable slots allocated on stack / +| +| u4[2..3] synchronized object / saved return value (only for synched methods) +| u4[0..3] alignment slots +V +| u8[] ^ callee-saved float registers +| u4[] ^ callee-saved integer registers +V +| >>>> sp on method entry, stack base for replacement (16-byte aligned) <<<< +| +| u4[] arguments on stack (inludes LA == linkage area) +| +V + +