[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [PATCH 1/2] Makefile.uk: Fix link issues on arm64
Hi Justin, Please see inline. On 12/19/19 11:23 AM, Jia He wrote: > Without this patch, when starting helloworld app with newlib on arm > kvm plat, it will report a link error as follows: > iapps/helloworld.newlib/build/helloworld_kvm-arm64.o: In function `wcstold_l': > apps/helloworld.newlib/build/libnewlibc/origin/newlib-2.5.0.20170922/newlib/libc/stdlib/wcstold.c:77: > undefined reference to `strtold_l' > apps/helloworld.newlib/build/libnewlibc/origin/newlib-2.5.0.20170922/newlib/libc/stdlib/wcstold.c:77:(.text+0x7c4e4): > relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol > `strtold_l' > > I once did configure and build of newlib from uptream, this macro is > defined on my Thunderx2 armv8a server (Unbuntu 18.04 + gcc version 7.4.0) > > Signed-off-by: Jia He <justin.he@xxxxxxx> > --- > Makefile.uk | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/Makefile.uk b/Makefile.uk > index 17d8d7a..54efe1a 100644 > --- a/Makefile.uk > +++ b/Makefile.uk > @@ -85,9 +85,9 @@ LIBNEWLIB_GLOBAL_FLAGS-y += -DMISSING_SYSCALL_NAMES > -DMALLOC_PROVIDED > LIBNEWLIB_GLOBAL_FLAGS-y += -D_POSIX_REALTIME_SIGNALS > LIBNEWLIB_GLOBAL_FLAGS-$(CONFIG_LIBNEWLIBC_WANT_IO_C99_FORMATS) += > -D_WANT_IO_C99_FORMATS > LIBNEWLIB_GLOBAL_FLAGS-$(CONFIG_LIBNEWLIBC_LINUX_ERRNO_EXTENSIONS) += > -D__LINUX_ERRNO_EXTENSIONS__ > +LIBNEWLIB_GLOBAL_FLAGS-y += -D_HAVE_LONG_DOUBLE I don't think it's safe to define this for all architectures. Besides that, when I introduced this flag I didn't check whether this is actually true, i.e. whether sizeof(double) and sizeof(long double) are the same. And they are not, sizeof(double) == 8 while sizeof(long double) == 16. Therefore we have to force the compiler to make them equal in size using `-mlong-double-64` (this means updating global CFLAGS and CXXFLAGS). Now, my question to you is: do these 2 types have the same size? Even if they have, you should set this flag only for your architecture. If not, can you force the compiler to make the equal in size? > ifeq ($(CONFIG_ARCH_X86_64),y) > LIBNEWLIB_GLOBAL_FLAGS-y += -D_LDBL_EQ_DBL > -LIBNEWLIB_GLOBAL_FLAGS-y += -D_HAVE_LONG_DOUBLE > endif > > CFLAGS-y += $(LIBNEWLIB_GLOBAL_FLAGS-y) > _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |