9 For the sake of efficiency CACAO uses its own stack frame layout that does
10 not comply with the usual frame layout on the native ABI. This document
11 tries to collect the stack frame layouts used on the various architectures.
17 ,--memory address rising
19 V >>>> sp in method (after initial sub) <<<<
21 | u4[] v arguments for calling methods \__ rd->memuse slots
22 V u4[] v local variable slots allocated on stack /
24 | u4[1..2] synchronized object / saved return value (only for synched methods)
26 | u8[] ^ callee-saved float registers
27 | u4[] ^ callee-saved integer registers
29 | >>>> sp on method entry <<<<
32 | u4[] arguments on stack
40 ,--memory address rising
42 V >>>> sp in method (after initial sub) <<<<
44 | u8[] v arguments for calling methods \__ rd->memuse slots
45 V u8[] v local variable slots allocated on stack /
47 | u8 synchronized object / saved return value (only for synched methods)
48 V u8 alignment dummy slot (in non-leaf methods to ensure
49 | 16-byte alignment of stack)
50 | u8[] ^ callee-saved float registers
51 V u8[] ^ callee-saved integer registers
53 | >>>> sp on method entry <<<<
56 | u8[] arguments on stack
64 ,--memory address rising
66 V >>>> sp in method (after initial sub) <<<<
68 | u8[] v arguments for calling methods \__ rd->memuse slots
69 V u8[] v local variable slots allocated on stack /
71 | u8 synchronized object / saved return value (only for synched methods)
73 | u8[] ^ callee-saved float registers
74 | u8[] ^ callee-saved integer registers
75 V u8 ^ saved return address (only for non-leaf methods)
77 | >>>> sp on method entry <<<<
79 | u8[] arguments on stack