Re: Wrong unconditional dependency on nanl
Christophe Lyon <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAKdteOaycr6qA-PLJG8f=jWg_S65pZrXax3pgOerHJinsd5cHA@mail.gmail.com> |
On Wed, 10 Oct 2018 at 11:41, Corinna Vinschen <[email protected]> wrote: > > On Oct 8 15:06, Christophe Lyon wrote: > > Hello, > > > > On aarch64 I've notice that a simple hello.c fails to link against > > current newlib master: > > .../aarch64-elf/libc/usr/lib/libc.a(lib_a-strtorx.o): In function `ULtox': > > .../newlib/libc/stdlib/strtorx.c:92: undefined reference to `nanl' > > > > It seems to me that an unconditional dependency on nanl() was > > introduced by commit > > 6c212a8b7873703c4f98c6b68579b234918be83a > > Author: Masamichi Hosoda <[email protected]> > > Date: Thu Aug 16 09:18:50 2018 +0900 > > Fix strtod ("nan") and strtold ("nan") returns wrong negative NaN > > > > but I'm not sure how to fix this as I did not follow the discussion > > around this patch. > > > > It seems to me that nanl() is only defined if _LDBL_EQ_DBL > > (newlib/libm/common/nanl.c), but the patch above introduces a call to > > nanl() in a code path where !defined (_LDBL_EQ_DBL) > > > > This I suspect the problem is present on other targets, too ? > > Cygwin has it's own nanl implemented in winsup/cygwin/math/nanl.c. > > However, dropping it there and using a patch like this: > > diff --git a/newlib/libm/common/nanl.c b/newlib/libm/common/nanl.c > index 40f898109edd..b8ae63ea7539 100644 > --- a/newlib/libm/common/nanl.c > +++ b/newlib/libm/common/nanl.c > @@ -38,5 +38,11 @@ nanl (const char *tagp) > { > return nan(tagp); > } > +#elif __GNUC_PREREQ (3, 3) > +long double > +nanl (const char *tagp) > +{ > + return __builtin_nanl(""); > +} > #endif > > should help along all targets, right? Is there any target still using > a pre-3.3 GCC? > It does help on aarch64-elf, but a change to rdimon.specs is required because libc now depends on libm: this can be seen when compiling a C++ hello.cpp. In addition, there's still a warning: newlib/libc/stdlib/strtorx.c:92:24: warning: implicit declaration of function ‘nanl’ Christophe > > Corinna > > -- > Corinna Vinschen > Cygwin Maintainer > Red Hat