|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 7/7] lib/ukboot: Call constructors from initarrays
Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
Simon Kuenzer <simon.kuenzer@xxxxxxxxx> writes:
> Call initialization/constructor functions listed in
> preinit_array and init_array during early bootstrapping.
>
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> ---
> lib/ukboot/boot.c | 32 ++++++++++++++++++++++++++++----
> 1 file changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c
> index acbae6e..afa9cfb 100644
> --- a/lib/ukboot/boot.c
> +++ b/lib/ukboot/boot.c
> @@ -48,6 +48,7 @@
> #endif
> #include <uk/arch/lcpu.h>
> #include <uk/plat/bootstrap.h>
> +#include <uk/plat/ctors.h>
> #include <uk/plat/memory.h>
> #include <uk/plat/time.h>
> #include <uk/essentials.h>
> @@ -107,13 +108,13 @@ void ukplat_entry(int argc, char *argv[])
> {
> int i;
> struct thread_main_arg tma;
> -#if LIBUKALLOC || LIBUKSCHED
> +#if LIBUKALLOC
> struct uk_alloc *a = NULL;
> #endif
> #if LIBUKALLOC && LIBUKALLOCBBUDDY && LIBUKBOOT_INITALLOC
> struct ukplat_memregion_desc md;
> #endif
> -#if HAVE_SCHED
> +#if LIBUKSCHED
> struct uk_sched *s = NULL;
> struct uk_thread *main_thread = NULL;
> #endif
> @@ -127,8 +128,31 @@ void ukplat_entry(int argc, char *argv[])
> STRINGIFY(UK_CODENAME) " " STRINGIFY(UK_FULLVERSION));
> #endif
>
> + uk_printd(DLVL_INFO, "Initialize platform time...\n");
> ukplat_time_init();
>
> + uk_printd(DLVL_INFO, "Pre-init table at %p - %p\n",
> + __preinit_array_start, &__preinit_array_end);
> + ukplat_ctor_foreach(__preinit_array_start, __preinit_array_end, i) {
> + if (__preinit_array_start[i]) {
> + uk_printd(DLVL_EXTRA, "Call pre-init constructor (entry
> %d (%p): %p())...\n",
> + i, &__preinit_array_start[i],
> + __preinit_array_start[i]);
> + __preinit_array_start[i]();
> + }
> + }
> +
> + uk_printd(DLVL_INFO, "Constructor table at %p - %p\n",
> + __init_array_start, &__init_array_end);
> + ukplat_ctor_foreach(__init_array_start, __init_array_end, i) {
> + if (__init_array_start[i]) {
> + uk_printd(DLVL_EXTRA, "Call constructor (entry %d (%p):
> %p())...\n",
> + i, &__init_array_start[i],
> + __init_array_start[i]);
> + __init_array_start[i]();
> + }
> + }
> +
> #if LIBUKALLOC && LIBUKALLOCBBUDDY && LIBUKBOOT_INITALLOC
> /* initialize memory allocator
> * FIXME: ukallocbbuddy is hard-coded for now
> @@ -182,7 +206,7 @@ void ukplat_entry(int argc, char *argv[])
> uk_printd(DLVL_WARN, "No suitable memory region for memory
> allocator. Continue without heap\n");
> #endif
>
> -#if HAVE_SCHED
> +#if LIBUKSCHED
> /* Init scheduler. */
> s = uk_schedcoop_init(a);
> if (unlikely(!s))
> @@ -192,7 +216,7 @@ void ukplat_entry(int argc, char *argv[])
> tma.argc = argc;
> tma.argv = argv;
>
> -#if HAVE_SCHED
> +#if LIBUKSCHED
> main_thread = uk_thread_create("main", main_thread_func, &tma);
> if (unlikely(!main_thread))
> UK_CRASH("Could not create main thread.");
> --
> 2.7.4
>
>
> _______________________________________________
> Minios-devel mailing list
> Minios-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/minios-devel
--
Yuri Volchkov
Software Specialist
NEC Europe Ltd
Kurfürsten-Anlage 36
D-69115 Heidelberg
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |