Hi,
I’m tracing the path where sel4 kernel jumps to an application, such as hello-1.
From the Makefile for apps I know that the entry of the hello-1.bin is _sel4_start which is defined in the sel4_crt0.S (the directory is sel4_tutorials/projects/sel4_libs_libsel4platsupport/src/arch/arm). The _sel4_start function first calls a C function called sel4_InitBootInfo, and finally jumps to the _start function which is defined in the crt0.S. However the _start in crt0.S calls the sel4_InitBootInfo again. What confuses me is that the sel4_InitBootInfo function requires an input argument passed by R0, however the R0 has been set to zero in the _sel4_start function, so I think the calling of sel4_InitBootInfo in the _start will not run correctly.
Or is the path where the kernel jumps to the app (_sel4_start->_start->main) wrong?
I paste referred codes below:
/******sel4_crt0.S********************/
_sel4_start:
/* Setup a stack for ourselves. */
ldr sp, =_stack_top
/* Setup bootinfo. The pointer to the bootinfo struct starts in 'r0'. */
bl seL4_InitBootInfo
............
mov r0, #0 // The R0 is modified, so it doesn't store the bootinfo structure anymore!
............
/* Now go to actual _start */
ldr pc, =_start
/*********crt0.S********************/
_start:
/* Setup a stack for ourselves. */
ldr sp, =_stack_top
/* Setup bootinfo. The pointer to the bootinfo struct starts in 'r0'. */
bl seL4_InitBootInfo //Since R0 has been modified by _sel4_start, sel4_InitBootInfo will not run correctly.
/* Call constructors and other initialisation functions. */
bl _init
/* Call main. */
bl main
b exit
Best Regards,
Shijun Zhao