ChorusOS 4.0 Porting Guide

call_and_switch_stack() routine

Example 4-6 is the call_and_switch_stack() routine source code provided in kernel/snippet/nucleus/boot_tools/call_and_switch_stack.s.


Example 4-8 call_and_switch_stack() Routine

			/*
			 *     void
			 * call_and_swithc_stack(void* cookie, void* new_pc, void* new_sp)
			 */

			GLOBAL(call_and_switch_stack)
call_and_switch_stack:
    mr    r5, r1    /* sp = new_sp */
    mtlr  r4, lr    /* (*new_pc) (cookie) */
    blr

The call_and_switch_stack() routine switches to the stack provided as argument three, new_pc, jumps to the function specified by the second argument, new_pc, passing to that function the first argument, cookie.