1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 17:19:20 +00:00

gcc: Fix ldbl-128 support for musl

Let the patch trigger based on target triplet instead of passing via
configure, this lets gcc compile for 64bit otherwise it ends up with
libgcc  build errors

error: unable to emulate 'TF'

(From OE-Core rev: 2259bf5366a9ff654dfaf15baa5df2d943383ce6)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2019-08-30 22:23:14 -07:00
committed by Richard Purdie
parent 3a207a2a5c
commit a4b6d8b7eb
3 changed files with 68 additions and 122 deletions
@@ -1,125 +1,79 @@
From baab61ae3938ee2fa9ec03a20793508516a46dae Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 29 Apr 2016 20:03:28 +0000
Subject: [PATCH 30/36] libgcc: Add knob to use ldbl-128 on ppc
musl does not support ldbl 128 so we can not assume
that linux as a whole supports ldbl-128 bits, instead
act upon configure option passed to gcc and assume no
on musl and yes otherwise if no option is passed since
default behaviour is to assume ldbl128 it does not
change the defaults
From 47467f3ab0fb2f2fcede81060fe8bb339d0909eb Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Wed, 28 Feb 2018 00:54:05 +0000
Subject: [PATCH 10/12] ldbl128 config
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
libgcc/Makefile.in | 1 +
libgcc/config/rs6000/t-linux | 5 ++++-
libgcc/configure | 18 ++++++++++++++++++
libgcc/configure.ac | 12 ++++++++++++
4 files changed, 35 insertions(+), 1 deletion(-)
mode change 100644 => 100755 libgcc/configure
gcc/configure | 13 +++++++++++++
gcc/configure.ac | 16 ++++++++++++++--
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index ea390a5bbea..114c7876304 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -50,6 +50,7 @@ unwind_header = @unwind_header@
md_unwind_header = @md_unwind_header@
sfp_machine_header = @sfp_machine_header@
thread_header = @thread_header@
+with_ldbl128 = @with_ldbl128@
diff --git a/gcc/configure b/gcc/configure
index 6121e163259..07ff8597d48 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -29309,6 +29309,15 @@ if test "${with_long_double_128+set}" = set; then :
withval=$with_long_double_128; gcc_cv_target_ldbl128="$with_long_double_128"
else
host_noncanonical = @host_noncanonical@
real_host_noncanonical = @real_host_noncanonical@
diff --git a/libgcc/config/rs6000/t-linux b/libgcc/config/rs6000/t-linux
index 4f6d4c4a4d2..c50dd94a2da 100644
--- a/libgcc/config/rs6000/t-linux
+++ b/libgcc/config/rs6000/t-linux
@@ -1,3 +1,6 @@
SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-glibc.ver
+ case "$target" in
+ s390*-*-linux-musl*)
+ gcc_cv_target_ldbl128=yes
+ ;;
+ powerpc*-*-linux-musl*)
+ gcc_cv_target_ldbl128=no
+ ;;
+ *)
+
if test $glibc_version_major -gt 2 \
|| ( test $glibc_version_major -eq 2 && test $glibc_version_minor -ge 4 ); then :
gcc_cv_target_ldbl128=yes
@@ -29320,6 +29329,10 @@ else
&& gcc_cv_target_ldbl128=yes
-HOST_LIBGCC2_CFLAGS += -mlong-double-128 -mno-minimal-toc
+ifeq ($(with_ldbl128),yes)
+HOST_LIBGCC2_CFLAGS += -mlong-double-128
+endif
+HOST_LIBGCC2_CFLAGS += -mno-minimal-toc
diff --git a/libgcc/configure b/libgcc/configure
old mode 100644
new mode 100755
index 36dbbc1f699..b5dd5c34e2a
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -651,6 +651,7 @@ build_vendor
build_cpu
build
with_aix_soname
+with_ldbl128
enable_vtable_verify
enable_gcov
enable_shared
@@ -702,6 +703,7 @@ with_ld
enable_shared
enable_gcov
enable_vtable_verify
+with_long_double_128
with_aix_soname
enable_version_specific_runtime_libs
with_slibdir
@@ -1363,6 +1365,7 @@ Optional Packages:
--with-target-subdir=SUBDIR Configuring in a subdirectory for target
--with-cross-host=HOST Configuring with a cross compiler
--with-ld arrange to use the specified ld (full pathname)
+ --with-long-double-128 use 128-bit long double by default
--with-aix-soname=aix|svr4|both
shared library versioning (aka "SONAME") variant to
provide on AIX
@@ -2268,6 +2271,21 @@ fi
fi
+
+ ;;
+ esac
+
fi
+# Check whether --with-long-double-128 was given.
+if test "${with_long_double_128+set}" = set; then :
+ withval=$with_long_double_128; with_ldbl128="$with_long_double_128"
+else
+ case "${host}" in
+ power*-*-musl*)
+ with_ldbl128="no";;
+ *) with_ldbl128="yes";;
+ esac
+
+fi
+
+
+
+
# Check whether --with-aix-soname was given.
if test "${with_aix_soname+set}" = set; then :
withval=$with_aix_soname; case "${host}:${enable_shared}" in
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index 8e96cafdf8b..9247856bf24 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -82,6 +82,18 @@ AC_ARG_ENABLE(vtable-verify,
[enable_vtable_verify=no])
AC_SUBST(enable_vtable_verify)
+AC_ARG_WITH(long-double-128,
+[AS_HELP_STRING([--with-long-double-128],
+ [use 128-bit long double by default])],
+ with_ldbl128="$with_long_double_128",
+[case "${host}" in
+ power*-*-musl*)
+ with_ldbl128="no";;
+ *) with_ldbl128="yes";;
+ esac
+])
+AC_SUBST(with_ldbl128)
+
AC_ARG_WITH(aix-soname,
[AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
[shared library versioning (aka "SONAME") variant to provide on AIX])],
;;
diff --git a/gcc/configure.ac b/gcc/configure.ac
index b066cc609e1..6c15ed898c0 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5971,13 +5971,25 @@ case "$target" in
AC_ARG_WITH(long-double-128,
[AS_HELP_STRING([--with-long-double-128],
[use 128-bit long double by default])],
- gcc_cv_target_ldbl128="$with_long_double_128",
+ gcc_cv_target_ldbl128="$with_long_double_128", [
+ case "$target" in
+ s390*-*-linux-musl*)
+ gcc_cv_target_ldbl128=yes
+ ;;
+ powerpc*-*-linux-musl*)
+ gcc_cv_target_ldbl128=no
+ ;;
+ *)]
[GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
[gcc_cv_target_ldbl128=no
grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
$target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
&& gcc_cv_target_ldbl128=yes
- ]])])
+ ]])]
+ [
+ ;;
+ esac
+ ])
;;
esac
if test x$gcc_cv_target_ldbl128 = xyes; then
--
2.22.1
2.17.1
-7
View File
@@ -41,13 +41,6 @@ def get_gcc_ppc_plt_settings(bb, d):
return "--enable-secureplt"
return ""
def get_long_double_setting(bb, d):
if d.getVar('TRANSLATED_TARGET_ARCH') in [ 'powerpc', 'powerpc64' ] and d.getVar('TCLIBC') in [ 'glibc' ]:
return "--with-long-double-128"
else:
return "--without-long-double-128 libgcc_cv_powerpc_float128=no"
return ""
def get_gcc_multiarch_setting(bb, d):
target_arch = d.getVar('TRANSLATED_TARGET_ARCH')
multiarch_options = {
@@ -36,7 +36,6 @@ EXTRA_OECONF = "\
${EXTRA_OECONF_PATHS} \
${@get_gcc_mips_plt_setting(bb, d)} \
${@get_gcc_ppc_plt_settings(bb, d)} \
${@get_long_double_setting(bb, d)} \
${@get_gcc_multiarch_setting(bb, d)} \
"