[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH v2 1/6] lib/ukboot: Application constructors right before calling application



Hi Simon,

If we keep moving this code up and down, wouldn't it make more sense to
put it in a function instead?

Cheers,
Costin

On 9/6/19 3:03 PM, Simon Kuenzer wrote:
> preinit and init tables are part of ported libraries and applications.
> Since they are originally run in user space on Linux or BSD, they
> expect fully initialized kernel layers. The constructor functions
> listed in those tables could create threads, allocate memory, or
> interact with the VFS, etc.
> This patch moves calling those constructors at the latest possible point.
> 
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> ---
>  lib/ukboot/boot.c | 52 +++++++++++++++++++++++++++--------------------
>  1 file changed, 30 insertions(+), 22 deletions(-)
> 
> diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c
> index 3b8d641f..7fb0908a 100644
> --- a/lib/ukboot/boot.c
> +++ b/lib/ukboot/boot.c
> @@ -82,28 +82,6 @@ static void main_thread_func(void *arg)
>       int ret;
>       struct thread_main_arg *tma = arg;
>  
> -     uk_pr_info("Pre-init table at %p - %p\n",
> -                __preinit_array_start, &__preinit_array_end);
> -     uk_ctor_foreach(__preinit_array_start, __preinit_array_end, i) {
> -             if (__preinit_array_start[i]) {
> -                     uk_pr_debug("Call pre-init constructor (entry %d (%p): 
> %p())...\n",
> -                                 i, &__preinit_array_start[i],
> -                                 __preinit_array_start[i]);
> -                     __preinit_array_start[i]();
> -             }
> -     }
> -
> -     uk_pr_info("Constructor table at %p - %p\n",
> -                     __init_array_start, &__init_array_end);
> -     uk_ctor_foreach(__init_array_start, __init_array_end, i) {
> -             if (__init_array_start[i]) {
> -                     uk_pr_debug("Call constructor (entry %d (%p): 
> %p())...\n",
> -                                     i, &__init_array_start[i],
> -                                     __init_array_start[i]);
> -                     __init_array_start[i]();
> -             }
> -     }
> -
>  #ifdef CONFIG_LIBUKBUS
>       uk_pr_info("Initialize bus handlers...\n");
>       uk_bus_init_all(uk_alloc_get_default());
> @@ -129,6 +107,36 @@ static void main_thread_func(void *arg)
>       printf("%35s\n",
>              STRINGIFY(UK_CODENAME) " " STRINGIFY(UK_FULLVERSION));
>  #endif
> +     /*
> +      * Application
> +      *
> +      * We are calling the application constructors right before calling
> +      * the application's main(). All of our Unikraft systems, VFS,
> +      * networking stack is initialized at this point. This way we closely
> +      * mimic what a regular user application (e.g., BSD, Linux) would expect
> +      * from its OS being initialized.
> +      */
> +     uk_pr_info("Pre-init table at %p - %p\n",
> +                __preinit_array_start, &__preinit_array_end);
> +     uk_ctor_foreach(__preinit_array_start, __preinit_array_end, i) {
> +             if (__preinit_array_start[i]) {
> +                     uk_pr_debug("Call pre-init constructor (entry %d (%p): 
> %p())...\n",
> +                                 i, &__preinit_array_start[i],
> +                                 __preinit_array_start[i]);
> +                     __preinit_array_start[i]();
> +             }
> +     }
> +
> +     uk_pr_info("Constructor table at %p - %p\n",
> +                     __init_array_start, &__init_array_end);
> +     uk_ctor_foreach(__init_array_start, __init_array_end, i) {
> +             if (__init_array_start[i]) {
> +                     uk_pr_debug("Call constructor (entry %d (%p): 
> %p())...\n",
> +                                     i, &__init_array_start[i],
> +                                     __init_array_start[i]);
> +                     __init_array_start[i]();
> +             }
> +     }
>  
>       uk_pr_info("Calling main(%d, [", tma->argc);
>       for (i = 0; i < tma->argc; ++i) {
> 

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.