Hi Hesham,
Thanks for your reply. I get it.

Best Regards,
Shijun

2017-05-31 11:45 GMT+08:00 <Hesham.Almatary@data61.csiro.au>:
Hi Shijun,

_sel4_start sets up the stack (for the root task) as libmusl expects,
and then jumps to _start (from libmuscl) and *NOT* the one at
sel4platsupport/crt0.S. The _start function you're after (called by
_sel4_start) exists in libmuslc for each arch e.g.
libmuslc/arch/arm/crt_arch.h.


Cheers,
Hesham

On 31/05/17 12:59, shijun zhao wrote:
>
> 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
>
>
>
> _______________________________________________
> Devel mailing list
> Devel@sel4.systems
> https://sel4.systems/lists/listinfo/devel