libquadmath: Restore linking against -lm on most targets [PR112963]
The r14-4825 change added AC_CHECK_LIBM to libquadmath configure.ac and replaced unconditional linking with -lm with linking with $(LIBM) determined by that. Unfortunately that broke bare metal targets because AC_CHECK_LIBM attempts to link against -lm and this was after (unconditional) GCC_NO_EXECUTABLES. Then r14-4863 partially reverted that change (no longer AC_CHECK_LIBM), but didn't revert the Makefile.am change of -lm to $(LIBM), which had the effect that libquadmath is not linked against -lm on any arch. That is a serious problem though e.g. on Linux, because libquadmath calls a few libm entrypoints and e.g. on powerpc64le the underlinking can cause crashes in IFUNC resolvers of libm. Instead of adding further reversion of the r14-4825 commit and use -lm unconditionally again, this patch adds an AC_CHECK_LIBM like substitutions with the *-ncr-sysv4.3* target handling removed (I think we don't support such targets, especially not in libquadmath) and with the default case replaced by simple using -lm. That is something in between using -lm unconditionally and what AC_CHECK_LIBM does if it would work on bare metal - we know from GCC 13 and earlier that we can link -lm on all targets libquadmath is built for, and just white list a couple of targets which we know don't have separate -lm and don't want to link against that (like Darwin, Cygwin, ...). 2023-12-12 Jakub Jelinek <jakub@redhat.com> PR libquadmath/112963 * configure.ac (LIBM): Readd AC_CHECK_LIBM-like check without doing AC_CHECK_LIB in it. * configure: Regenerated. * Makefile.in: Regenerated.
This commit is contained in:
parent
d3247bee39
commit
fdce86c9f0
3 changed files with 32 additions and 2 deletions
|
@ -355,6 +355,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
LD = @LD@
|
LD = @LD@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
LIBTOOL = @LIBTOOL@
|
LIBTOOL = @LIBTOOL@
|
||||||
|
|
19
libquadmath/configure
vendored
19
libquadmath/configure
vendored
|
@ -644,6 +644,7 @@ LIBQUAD_USE_SYMVER_GNU_FALSE
|
||||||
LIBQUAD_USE_SYMVER_GNU_TRUE
|
LIBQUAD_USE_SYMVER_GNU_TRUE
|
||||||
LIBQUAD_USE_SYMVER_FALSE
|
LIBQUAD_USE_SYMVER_FALSE
|
||||||
LIBQUAD_USE_SYMVER_TRUE
|
LIBQUAD_USE_SYMVER_TRUE
|
||||||
|
LIBM
|
||||||
toolexeclibdir
|
toolexeclibdir
|
||||||
toolexecdir
|
toolexecdir
|
||||||
MAINT
|
MAINT
|
||||||
|
@ -10921,7 +10922,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 10924 "configure"
|
#line 10925 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -11027,7 +11028,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11030 "configure"
|
#line 11031 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -12260,6 +12261,20 @@ esac
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# AC_CHECK_LIBM variant which avoids AC_CHECK_LIB (that doesn't work
|
||||||
|
# on bare metal). In the past we've used -lm in Makefile.am unconditionally,
|
||||||
|
# let's use it there unless target knows it doesn't need that.
|
||||||
|
LIBM=
|
||||||
|
case $host in
|
||||||
|
*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
|
||||||
|
# These system don't have libm, or don't need it
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
LIBM=-lm
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
for ac_header in fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h
|
for ac_header in fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h
|
||||||
do :
|
do :
|
||||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
|
|
@ -122,6 +122,20 @@ esac
|
||||||
AC_SUBST(toolexecdir)
|
AC_SUBST(toolexecdir)
|
||||||
AC_SUBST(toolexeclibdir)
|
AC_SUBST(toolexeclibdir)
|
||||||
|
|
||||||
|
# AC_CHECK_LIBM variant which avoids AC_CHECK_LIB (that doesn't work
|
||||||
|
# on bare metal). In the past we've used -lm in Makefile.am unconditionally,
|
||||||
|
# let's use it there unless target knows it doesn't need that.
|
||||||
|
LIBM=
|
||||||
|
case $host in
|
||||||
|
*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
|
||||||
|
# These system don't have libm, or don't need it
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
LIBM=-lm
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_SUBST([LIBM])
|
||||||
|
|
||||||
AC_CHECK_HEADERS(fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h)
|
AC_CHECK_HEADERS(fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h)
|
||||||
LIBQUAD_CHECK_MATH_H_SIGNGAM
|
LIBQUAD_CHECK_MATH_H_SIGNGAM
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue