From: "Joseph S. Myers" <jos...@codesourcery.com>
Date: Thu, 3 Nov 2011 01:21:35 +0000 (UTC)

> What is new is that you can now put tests in libgcc/configure.ac
> such as the "Check 32bit or 64bit for x86." one, and select t-*
> files based on those tests - whereas in the gcc/ directory there is
> no possibility at all for the choice of t-* files to depend on the
> multilib.

That works for me, I'm bootstrapping the following:

--------------------
[PATCH] Fix multilib build of libgcc on Linux/sparc.

        * configure.ac: Set host_address on sparc too.
        * configure: Regenerate.
        * config.host: Add sparc/t-linux64 and sparc/t-softmul conditionally
        based upon host_address.
        * config/sparc/t-linux64: Set CRTSTUFF_T_CFLAGS unconditionally.
---
 libgcc/ChangeLog              |    8 ++++++++
 libgcc/config.host            |   17 ++++++++++++++---
 libgcc/config/sparc/t-linux64 |    3 +--
 libgcc/configure              |    7 ++++---
 libgcc/configure.ac           |    7 ++++---
 5 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 1bbe29a..3944193 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,11 @@
+2011-11-02  David S. Miller  <da...@davemloft.net>
+
+       * configure.ac: Set host_address on sparc too.
+       * configure: Regenerate.
+       * config.host: Add sparc/t-linux64 and sparc/t-softmul conditionally
+       based upon host_address.
+       * config/sparc/t-linux64: Set CRTSTUFF_T_CFLAGS unconditionally.
+
 2011-11-02  Rainer Orth  <r...@cebitec.uni-bielefeld.de>
 
        * gthr-single.h, gthr.h: New files.
diff --git a/libgcc/config.host b/libgcc/config.host
index 05f084b..647c6a1 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -1008,7 +1008,10 @@ sparc-*-elf*)
        extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
        ;;
 sparc-*-linux*)                # SPARC's running GNU/Linux, libc6
-       tmake_file="${tmake_file} t-crtfm sparc/t-linux64"
+       tmake_file="${tmake_file} t-crtfm"
+       if test "${host_address}" = 64; then
+               tmake_file="$tmake_file sparc/t-linux64"
+       fi
        case ${host} in
        *-leon*)
                tmake_file="${tmake_file} t-fdpbit"
@@ -1021,7 +1024,9 @@ sparc-*-linux*)           # SPARC's running GNU/Linux, 
libc6
        *-leon[3-9]*)
                ;;
        *)
-               tmake_file="$tmake_file sparc/t-softmul"
+               if test "${host_address}" = 32; then
+                       tmake_file="$tmake_file sparc/t-softmul"
+               fi
                ;;
        esac
        extra_parts="$extra_parts crtfastmath.o"
@@ -1052,7 +1057,13 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*)
        ;;
 sparc64-*-linux*)              # 64-bit SPARC's running GNU/Linux
        extra_parts="$extra_parts crtfastmath.o"
-       tmake_file="${tmake_file} t-crtfm sparc/t-linux sparc/t-linux64"
+       tmake_file="${tmake_file} t-crtfm sparc/t-linux"
+       if test "${host_address}" = 64; then
+               tmake_file="${tmake_file} sparc/t-linux64"
+       fi
+       if test "${host_address}" = 32; then
+               tmake_file="${tmake_file} sparc/t-softmul"
+       fi
        md_unwind_header=sparc/linux-unwind.h
        ;;
 sparc64-*-netbsd*)
diff --git a/libgcc/config/sparc/t-linux64 b/libgcc/config/sparc/t-linux64
index ca4a892..6583fe2 100644
--- a/libgcc/config/sparc/t-linux64
+++ b/libgcc/config/sparc/t-linux64
@@ -1,2 +1 @@
-CRTSTUFF_T_CFLAGS = `if test x$$($(CC) -print-multi-os-directory) \
-                       = x../lib64; then echo -mcmodel=medany; fi`
+CRTSTUFF_T_CFLAGS = -mcmodel=medany
diff --git a/libgcc/configure b/libgcc/configure
index 0d91645..0f18037 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -4609,11 +4609,12 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_cfi" >&5
 $as_echo "$libgcc_cv_cfi" >&6; }
 
-# Check 32bit or 64bit for x86.
+# Check 32bit or 64bit for x86 and sparc.
 case ${host} in
-i?86*-*-* | x86_64*-*-*)
+i?86*-*-* | x86_64*-*-* | sparc*-*-*)
   cat > conftest.c <<EOF
-#ifdef __x86_64__
+#if defined(__x86_64__) || \
+    (defined(__sparc__) && defined(__arch64__))
 host_address=64
 #else
 host_address=32
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index a505257..5250be3 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -255,11 +255,12 @@ AC_CACHE_CHECK([whether assembler supports CFI 
directives], [libgcc_cv_cfi],
   [libgcc_cv_cfi=yes],
   [libgcc_cv_cfi=no])])
 
-# Check 32bit or 64bit for x86.
+# Check 32bit or 64bit for x86 and sparc.
 case ${host} in
-i?86*-*-* | x86_64*-*-*)
+i?86*-*-* | x86_64*-*-* | sparc*-*-*)
   cat > conftest.c <<EOF
-#ifdef __x86_64__
+#if defined(__x86_64__) || \
+    (defined(__sparc__) && defined(__arch64__))
 host_address=64
 #else
 host_address=32
-- 
1.7.6.401.g6a319

Reply via email to