|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/ukboot: Call internal constructors
Hey Sharan,
I'll make the necessary changes for the v2 of the patch.
Thanks,
Vlad
On 4/2/19 7:58 PM, Sharan Santhanam wrote:
> 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 .rodata
>
>
> This 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 |