[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 |