[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/ukboot: Call internal constructors
Hello Vlad, this patch fails when compiling the linuxu platform:In function `ukplat_entry': (.text+0x303): undefined reference to `uk_ctortab' One way of solving the problem is with the following fix: --- a/plat/linuxu/Linker.uk +++ b/plat/linuxu/Linker.uk @@ -4,6 +4,7 @@ LINUXU_LDFLAGS-y += -Wl,-e,_liblinuxuplat_start ## Link image ## LINUXU_IMAGE := $(BUILD_DIR)/$(CONFIG_UK_NAME)_linuxu-$(CONFIG_UK_ARCH)+LINUXU_LD_SCRIPT-$(CONFIG_ARCH_X86_64) += $(LIBLINUXUPLAT_BASE)/x86/link64.lds LINUXU_LD_SCRIPT_FLAGS := $(addprefix -Wl$(comma)-T,\ $(EXTRA_LD_SCRIPT-y) $(LINUXU_LD_SCRIPT-y)) diff --git a/plat/linuxu/x86/link64.lds b/plat/linuxu/x86/link64.lds new file mode 100644 index 00000000..80611859 --- /dev/null +++ b/plat/linuxu/x86/link64.lds @@ -0,0 +1,5 @@ +SECTIONS +{ + INCLUDE plat/common/x86/link64.lds +} +INSERT AFTER .rodataThis above solution depends on the [1], we are hoping to upstream this patch as soon as possible. A similar linker script should also be provided for the arm32 linuxu platform. Thanks & Regards Sharan [1] https://patchwork.unikraft.org/patch/616336/ On 3/21/19 12:40 AM, Vlad-Andrei BĂDOIU (78692) wrote: Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> --- lib/ukboot/boot.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c index 48467828..53b32ba4 100644 --- a/lib/ukboot/boot.c +++ b/lib/ukboot/boot.c @@ -56,6 +56,7 @@ #include <uk/plat/time.h> #include <uk/essentials.h> #include <uk/print.h> +#include <uk/ctors.h> #include <uk/argparse.h> #if CONFIG_LIBUKBUS #include <uk/bus.h> @@ -141,6 +142,7 @@ void ukplat_entry_argp(char *arg0, char *argb, __sz argb_len) void ukplat_entry(int argc, char *argv[]) { int i; + const uk_ctor_func_t *cfn; struct thread_main_arg tma; #if CONFIG_LIBUKALLOC struct uk_alloc *a = NULL; @@ -165,15 +167,10 @@ void ukplat_entry(int argc, char *argv[]) } }- uk_pr_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_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("Unikraft constructors table at %p\n", uk_ctortab); + for (cfn = uk_ctortab; *cfn != NULL; ++cfn) { + uk_pr_debug("Call constructor %p\n", *cfn); + (*cfn)(); }#if CONFIG_LIBUKALLOC && CONFIG_LIBUKALLOCBBUDDY && CONFIG_LIBUKBOOT_INITALLOC@@ -255,6 +252,17 @@ void ukplat_entry(int argc, char *argv[]) tma.argc = argc; tma.argv = argv;+ uk_pr_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_pr_debug("Call constructor (entry %d (%p): %p())...\n", + i, &__init_array_start[i], + __init_array_start[i]); + __init_array_start[i](); + } + } + #if CONFIG_LIBUKSCHED main_thread = uk_thread_create("main", main_thread_func, &tma); if (unlikely(!main_thread)) _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |