Patchwork [freebsd] : Build quad soft-fp library.

login
register
mail settings
Submitter Uros Bizjak
Date Aug. 31, 2010, 7:03 a.m.
Message ID <AANLkTi=vuezoPzNbG9urA1TmYeRjG1c4mqb9nuKZ6bDW@mail.gmail.com>
Download mbox | patch
Permalink /patch/63200/
State New
Headers show

Comments

Uros Bizjak - Aug. 31, 2010, 7:03 a.m.
On Tue, Aug 31, 2010 at 6:31 AM, Steve Kargl
<sgk@troutmask.apl.washington.edu> wrote:

>> I tested your patch on x86_64-*-freebsd.  My ppl and cloog
>> libraries were built with FreeBSD's system gcc (4.2.1).  All
>> tests failed due to missing symbols that are marked GCC_3.0.
>>
>> > Index: gcc/config/i386/t-freebsd
>> > ===================================================================
>> > --- gcc/config/i386/t-freebsd       (revision 0)
>> > +++ gcc/config/i386/t-freebsd       (revision 0)
>> > @@ -0,0 +1 @@
>> > +SHLIB_MAPFILES = $(srcdir)/config/i386/libgcc-bsd.ver
>>
>> Changing the = to += seems to fix the problem.  My
>> regression testing is still running, so I can't
>> report stats.
>>
>
> With my change to +=, on x86_64-*-freebsd I get
>
>                === gcc Summary ===
>
> # of expected passes            72950
> # of unexpected failures        74
> # of unexpected successes       3
> # of expected failures          215
> # of unresolved testcases       3
> # of unsupported tests          1081
> /usr/home/sgk/gcc/obj4x/gcc/xgcc  version 4.6.0 20100830 (experimental) (GCC)
>
>
>                === gfortran Summary ===
>
> # of expected passes            36155
> # of unexpected failures        4
> # of unexpected successes       7
> # of expected failures          59
> # of unsupported tests          53
> /usr/home/sgk/gcc/obj4x/gcc/testsuite/gfortran/../../gfortran  version 4.6.0 20100830 (experimental) (GCC)
>
>
> I quickly looked through the gcc.log file and noticed
> a couple of ICE's but I believe those are unrelated to
> the TFmode patch.
>
> Note, I believe that I do not have the authority to
> approve this patch.

Attached is the final (but untested) patch. The difference is, that
.ver file (and corresponding t-freebsd file) have been moved to
libgcc. I modified existing solaris .ver file (as suggested by Joseph)
and sprinkled it with %if[n]defs (IMO, solaris .ver file also needs
these).

gcc/ChangeLog:

2010-08-31  Uros Bizjak  <ubizjak@gmail.com>

	* config.gcc (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add
	i386/t-fprules-softfp and soft-fp/t-softfp to tmake_file.

libgcc/ChangeLog:

2010-08-31  Uros Bizjak  <ubizjak@gmail.com>

	* config.host (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add
	i386/t-freebsd to tmake_file.
	* config/i386/t-freebsd: New file.
	* config/i386/libgcc-bsd.ver: New file.

Gerald, can you please test this patch?

Uros.
Joseph S. Myers - Aug. 31, 2010, 11:50 a.m.
On Tue, 31 Aug 2010, Uros Bizjak wrote:

> Attached is the final (but untested) patch. The difference is, that

This patch does not add the %inherit and empty GCC_4.6.0 version to 
libgcc-std.ver that should be there.

> .ver file (and corresponding t-freebsd file) have been moved to
> libgcc. I modified existing solaris .ver file (as suggested by Joseph)
> and sprinkled it with %if[n]defs (IMO, solaris .ver file also needs
> these).

They are not needed as symbols not present on a given target are quietly 
ignored there - although having them - very carefully reviewed as being 
exactly right - may avoid some problems arising accidentally in future if 
symbols are added to more targets (e.g. if TImode support is added for 
32-bit x86 - which would require care to ensure no TImode symbols are 
accidentally added to old versions for any affected target).
Gerald Pfeifer - Aug. 31, 2010, 11:56 a.m.
On Tue, 31 Aug 2010, Uros Bizjak wrote:
> 2010-08-31  Uros Bizjak  <ubizjak@gmail.com>
> 
> 	* config.gcc (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add
> 	i386/t-fprules-softfp and soft-fp/t-softfp to tmake_file.
> 
> 2010-08-31  Uros Bizjak  <ubizjak@gmail.com>
> 
> 	* config.host (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add
> 	i386/t-freebsd to tmake_file.
> 	* config/i386/t-freebsd: New file.
> 	* config/i386/libgcc-bsd.ver: New file.
> 
> Gerald, can you please test this patch?

Happy to!  Still looks good, only some additional PASSES versus your
previous patch, presumably due to new tests that have been added in
the meantime:

  http://gcc.gnu.org/ml/gcc-testresults/2010-08/msg03092.html

Gerald

Patch

Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc	(revision 163630)
+++ gcc/config.gcc	(working copy)
@@ -3485,6 +3485,9 @@ 
 	i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
 		;;
+	i[34567]86-*-freebsd* | x86_64-*-freebsd*)
+		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
+		;;
 	ia64*-*-linux*)
 		tmake_file="${tmake_file} ia64/t-fprules-softfp soft-fp/t-softfp"
 		;;
Index: libgcc/config.host
===================================================================
--- libgcc/config.host	(revision 163630)
+++ libgcc/config.host	(working copy)
@@ -279,8 +279,10 @@ 
 x86_64-*-elf*)
 	;;
 i[34567]86-*-freebsd*)
+	tmake_file="${tmake_file} i386/t-freebsd"
 	;;
 x86_64-*-freebsd*)
+	tmake_file="${tmake_file} i386/t-freebsd"
 	;;
 i[34567]86-*-netbsdelf*)
 	;;
@@ -608,7 +610,8 @@ 
   i[34567]86-*-linux* | x86_64-*-linux* | \
   i[34567]86-*-gnu* | \
   i[34567]86-*-solaris2* | \
-  i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
+  i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw* | \
+  i[34567]86-*-freebsd* | x86_64-*-freebsd*)
 	if test "${host_address}" = 32; then
 		tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
 	fi
Index: libgcc/config/i386/libgcc-bsd.ver
===================================================================
--- libgcc/config/i386/libgcc-bsd.ver	(revision 0)
+++ libgcc/config/i386/libgcc-bsd.ver	(revision 0)
@@ -0,0 +1,106 @@ 
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# 128 bit long double support was introduced with GCC 4.6.0 for FreeBSD.
+# These lines make the symbols to get a @@GCC_4.6.0.
+
+%exclude {
+  __addtf3
+  __copysigntf3
+  __divtc3
+  __divtf3
+  __eqtf2
+  __extenddftf2
+  __extendsftf2
+  __extendxftf2
+  __fabstf2
+  __fixtfdi
+  __fixtfsi
+  __fixtfti
+  __fixunstfdi
+  __fixunstfsi
+  __fixunstfti
+  __floatditf
+  __floatsitf
+  __floattitf
+  __floatunditf
+  __floatunsitf
+  __floatuntitf
+  __getf2
+  __gttf2
+  __letf2
+  __lttf2
+  __multc3
+  __multf3
+  __negtf2
+  __netf2
+  __powitf2
+  __subtf3
+  __trunctfdf2
+  __trunctfsf2
+  __trunctfxf2
+  __unordtf2
+}
+
+GCC_4.6.0 {
+  __addtf3
+%ifndef __x86_64__
+  __copysigntf3
+%endif
+  __divtc3
+  __divtf3
+  __eqtf2
+  __extenddftf2
+  __extendsftf2
+  __extendxftf2
+%ifndef __x86_64__
+  __fabstf2
+%endif
+  __fixtfdi
+  __fixtfsi
+%ifdef __x86_64__
+  __fixtfti
+%endif
+  __fixunstfdi
+  __fixunstfsi
+%ifdef __x86_64__
+  __fixunstfti
+%endif
+  __floatditf
+  __floatsitf
+  __floattitf
+  __floatunditf
+  __floatunsitf
+%ifdef __x86_64__
+  __floatuntitf
+%endif
+  __getf2
+  __gttf2
+  __letf2
+  __lttf2
+  __multc3
+  __multf3
+  __negtf2
+  __netf2
+  __powitf2
+  __subtf3
+  __trunctfdf2
+  __trunctfsf2
+  __trunctfxf2
+  __unordtf2
+}
Index: libgcc/config/i386/t-freebsd
===================================================================
--- libgcc/config/i386/t-freebsd	(revision 0)
+++ libgcc/config/i386/t-freebsd	(revision 0)
@@ -0,0 +1,2 @@ 
+# Add support for the introduction of 128-bit long double.
+SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-bsd.ver