This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] S/390: Move libgcc parts into toplevel directory
- From: "Andreas Krebbel" <krebbel at linux dot vnet dot ibm dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 7 Oct 2009 10:35:14 +0200
- Subject: Re: [PATCH] S/390: Move libgcc parts into toplevel directory
- References: <20090929142209.GA14797@bart> <Pine.LNX.4.64.0909291617060.13090@digraph.polyomino.org.uk>
Hi Joseph,
> All these new files should have the Runtime Library Exception wording...
Fixed.
> ... and you should add that wording on 4.4 branch to this file that you
> are removing on trunk, so the licenses in 4.4 are correct.
Done.
I've just applied the attached patch to mainline after verifying that
libgcc doesn't change on s390, s390x and s390x-ibm-tpf.
Bye,
-Andreas-
2009-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config.gcc: Don't include the makefile fragments intended for
libgcc.
* config/s390/fixdfdi.h: File removed.
* config/s390/libgcc-glibc.ver: File removed.
* config/s390/s390.h: Remove the fixdfdi.h hack.
* config/s390/t-crtstuff: File moved to libgcc dir.
* config/s390/t-linux: Likewise.
* config/s390/t-tpf: libgcc specific parts removed.
* config/s390/t-linux64: Likewise.
2009-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config.host: Include the s390 makefile fragments.
* config/s390/32/_fixdfdi.c: New file.
* config/s390/32/_fixsfdi.c: New file.
* config/s390/32/_fixtfdi.c: New file.
* config/s390/32/_fixunsdfdi.c: New file.
* config/s390/32/_fixunssfdi.c: New file.
* config/s390/32/_fixunstfdi.c: New file.
* config/s390/32/t-floattodi: New file.
* config/s390/libgcc-glibc.ver: New file.
* config/s390/t-crtstuff: New file.
* config/s390/t-linux: New file.
* config/s390/t-tpf: New file.
Index: libgcc/config.host
===================================================================
*** libgcc/config.host.orig 2009-10-06 15:32:14.000000000 +0200
--- libgcc/config.host 2009-10-06 15:43:20.000000000 +0200
*************** rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1
*** 483,492 ****
--- 483,495 ----
rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
;;
s390-*-linux*)
+ tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi"
;;
s390x-*-linux*)
+ tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux"
;;
s390x-ibm-tpf*)
+ tmake_file="${tmake_file} s390/t-crtstuff s390/t-tpf"
;;
score-*-elf)
;;
Index: libgcc/config/s390/t-linux
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/t-linux 2009-10-06 16:51:25.000000000 +0200
***************
*** 0 ****
--- 1,7 ----
+ DFP_ENABLE = true
+
+ # Override t-slibgcc-elf-ver to export some libgcc symbols with
+ # the symbol versions that glibc used.
+ SHLIB_MAPFILES = $(gcc_srcdir)/libgcc-std.ver $(srcdir)/config/s390/libgcc-glibc.ver
+
+ HOST_LIBGCC2_CFLAGS += -mlong-double-128
\ No newline at end of file
Index: libgcc/config/s390/t-crtstuff
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/t-crtstuff 2009-10-06 16:51:13.000000000 +0200
***************
*** 0 ****
--- 1,6 ----
+ # crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+ # because then __FRAME_END__ might not be the last thing in .eh_frame
+ # section.
+ CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
+ CRTSTUFF_T_CFLAGS_S += -fno-asynchronous-unwind-tables
+
Index: libgcc/config/s390/32/_fixunssfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixunssfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,90 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXP(fp) (((fp.l) >> 23) & 0xFF)
+ #define EXCESS 126
+ #define SIGNBIT 0x80000000
+ #define SIGN(fp) ((fp.l) & SIGNBIT)
+ #define HIDDEN (1 << 23)
+ #define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
+ #define FRAC(fp) ((fp.l) & 0x7FFFFF)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union float_long
+ {
+ float f;
+ USItype_x l;
+ };
+
+ UDItype_x __fixunssfdi (float a1);
+
+ /* convert float to unsigned int */
+ UDItype_x
+ __fixunssfdi (float a1)
+ {
+ register union float_long fl1;
+ register int exp;
+ register UDItype_x l;
+
+ fl1.f = a1;
+
+ /* +/- 0, denormalized, negative */
+
+ if (!EXP (fl1) || SIGN(fl1))
+ return 0;
+
+ exp = EXP (fl1) - EXCESS - 24;
+
+ /* number < 1 */
+
+ if (exp < -24)
+ return 0;
+
+ /* NaN */
+
+ if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
+ return 0x0ULL;
+
+ /* Number big number & + inf */
+
+ if (exp >= 41) {
+ return 0xFFFFFFFFFFFFFFFFULL;
+ }
+
+ l = MANT(fl1);
+
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return l;
+ }
Index: libgcc/config/s390/32/_fixunsdfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixunsdfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,94 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
+ #define EXCESSD 1022
+ #define SIGNBIT 0x80000000
+ #define SIGND(fp) ((fp.l.upper) & SIGNBIT)
+ #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
+ #define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
+ #define HIDDEND_LL ((UDItype_x)1 << 52)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union double_long {
+ double d;
+ struct {
+ SItype_x upper;
+ USItype_x lower;
+ } l;
+ UDItype_x ll;
+ };
+
+ UDItype_x __fixunsdfdi (double a1);
+
+ /* convert double to unsigned int */
+ UDItype_x
+ __fixunsdfdi (double a1)
+ {
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized, negative */
+
+ if (!EXPD (dl1) || SIGND(dl1))
+ return 0;
+
+ exp = EXPD (dl1) - EXCESSD - 53;
+
+ /* number < 1 */
+
+ if (exp < -53)
+ return 0;
+
+ /* NaN */
+
+ if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
+ return 0x0ULL;
+
+ /* Number big number & + inf */
+
+ if (exp >= 12) {
+ return 0xFFFFFFFFFFFFFFFFULL;
+ }
+
+ l = MANTD_LL(dl1);
+
+ /* shift down until exp < 12 or l = 0 */
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return l;
+ }
Index: libgcc/config/s390/32/_fixunstfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixunstfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,97 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
+ #define EXPONENT_BIAS 16383
+ #define MANTISSA_BITS 112
+ #define PRECISION (MANTISSA_BITS + 1)
+ #define SIGNBIT 0x80000000
+ #define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
+ #define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
+ #define MANTD_LOW_LL(fp) (fp.ll[1])
+ #define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
+ #define HIGH_LL_FRAC_BITS 48
+ #define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
+ #define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union double_long {
+ long double d;
+ struct {
+ SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
+ } l;
+ UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
+ };
+
+ UDItype_x __fixunstfdi (long double a1);
+
+ /* convert double to unsigned int */
+ UDItype_x
+ __fixunstfdi (long double a1)
+ {
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized, negative */
+ if (!EXPD (dl1) || SIGND(dl1))
+ return 0;
+
+ /* The exponent - considered the binary point at the right end of
+ the mantissa. */
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1: If the mantissa would need to be right-shifted more bits than
+ its size (plus the implied one bit on the left) the result would be
+ zero. */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN: All exponent bits set and a nonzero fraction. */
+ if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
+ return 0x0ULL;
+
+ /* One extra bit is needed for the unit bit which is appended by
+ MANTD_HIGH_LL on the left of the matissa. */
+ exp += HIGH_LL_FRAC_BITS + 1;
+
+ /* If the result would still need a left shift it will be too large
+ to be represented. */
+ if (exp > 0)
+ return 0xFFFFFFFFFFFFFFFFULL;
+
+ l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
+ | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
+
+ return l >> -exp;
+ }
Index: libgcc/config/s390/32/t-floattodi
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/t-floattodi 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,5 ----
+ floattodi-functions = _fixsfdi _fixdfdi _fixtfdi _fixunssfdi _fixunsdfdi _fixunstfdi
+ LIB2FUNCS_EXCLUDE += $(floattodi-functions)
+
+ floattodi-src = $(addsuffix .c, $(floattodi-functions))
+ LIB2ADD = $(addprefix $(srcdir)/config/s390/32/, $(floattodi-src))
Index: libgcc/config/s390/32/_fixsfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixsfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,93 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXP(fp) (((fp.l) >> 23) & 0xFF)
+ #define EXCESS 126
+ #define SIGNBIT 0x80000000
+ #define SIGN(fp) ((fp.l) & SIGNBIT)
+ #define HIDDEN (1 << 23)
+ #define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
+ #define FRAC(fp) ((fp.l) & 0x7FFFFF)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union float_long
+ {
+ float f;
+ USItype_x l;
+ };
+
+ DItype_x __fixsfdi (float a1);
+
+ /* convert double to int */
+ DItype_x
+ __fixsfdi (float a1)
+ {
+ register union float_long fl1;
+ register int exp;
+ register DItype_x l;
+
+ fl1.f = a1;
+
+ /* +/- 0, denormalized */
+
+ if (!EXP (fl1))
+ return 0;
+
+ exp = EXP (fl1) - EXCESS - 24;
+
+ /* number < 1 */
+
+ if (exp < -24)
+ return 0;
+
+ /* NaN */
+
+ if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
+ return 0x8000000000000000ULL;
+
+ /* Number big number & +/- inf */
+
+ if (exp >= 40) {
+ l = (long long)1<<63;
+ if (!SIGN(fl1))
+ l--;
+ return l;
+ }
+
+ l = MANT(fl1);
+
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return (SIGN (fl1) ? -l : l);
+ }
Index: libgcc/config/s390/32/_fixdfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixdfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,97 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
+ #define EXCESSD 1022
+ #define SIGNBIT 0x80000000
+ #define SIGND(fp) ((fp.l.upper) & SIGNBIT)
+ #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
+ #define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
+ #define HIDDEND_LL ((UDItype_x)1 << 52)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union double_long {
+ double d;
+ struct {
+ SItype_x upper;
+ USItype_x lower;
+ } l;
+ UDItype_x ll;
+ };
+
+ DItype_x __fixdfdi (double a1);
+
+ /* convert double to int */
+ DItype_x
+ __fixdfdi (double a1)
+ {
+ register union double_long dl1;
+ register int exp;
+ register DItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+
+ if (!EXPD (dl1))
+ return 0;
+
+ exp = EXPD (dl1) - EXCESSD - 53;
+
+ /* number < 1 */
+
+ if (exp < -53)
+ return 0;
+
+ /* NaN */
+
+ if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
+ return 0x8000000000000000ULL;
+
+ /* Number big number & +/- inf */
+
+ if (exp >= 11) {
+ l = (long long)1<<63;
+ if (!SIGND(dl1))
+ l--;
+ return l;
+ }
+
+ l = MANTD_LL(dl1);
+
+ /* shift down until exp < 12 or l = 0 */
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return (SIGND (dl1) ? -l : l);
+ }
Index: libgcc/config/s390/32/_fixtfdi.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/32/_fixtfdi.c 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,102 ----
+ /* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999, 2000, 2001, 2007, 2008 and 2009
+ Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+ 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
+ #define EXPONENT_BIAS 16383
+ #define MANTISSA_BITS 112
+ #define PRECISION (MANTISSA_BITS + 1)
+ #define SIGNBIT 0x80000000
+ #define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
+ #define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
+ #define MANTD_LOW_LL(fp) (fp.ll[1])
+ #define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
+ #define HIGH_LL_FRAC_BITS 48
+ #define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
+ #define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
+
+ typedef int DItype_x __attribute__ ((mode (DI)));
+ typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+ typedef int SItype_x __attribute__ ((mode (SI)));
+ typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+ union double_long {
+ long double d;
+ struct {
+ SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
+ } l;
+ UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
+ };
+
+ DItype_x __fixtfdi (long double a1);
+
+ /* convert double to unsigned int */
+ DItype_x
+ __fixtfdi (long double a1)
+ {
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXPD (dl1))
+ return 0;
+
+ /* The exponent - considered the binary point at the right end of
+ the mantissa. */
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1: If the mantissa would need to be right-shifted more bits than
+ its size the result would be zero. */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN: All exponent bits set and a nonzero fraction. */
+ if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
+ return 0x8000000000000000ULL;
+
+ /* One extra bit is needed for the unit bit which is appended by
+ MANTD_HIGH_LL on the left of the matissa. */
+ exp += HIGH_LL_FRAC_BITS + 1;
+
+ /* If the result would still need a left shift it will be too large
+ to be represented. Compared to the unsigned variant we have to
+ take care that there is still space for the sign bit to be
+ applied. So we can only go on if there is a right-shift by one
+ or more. */
+ if (exp >= 0)
+ {
+ l = 1ULL << 63; /* long long min */
+ return SIGND (dl1) ? l : l - 1;
+ }
+
+ l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
+ | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
+
+ return SIGND (dl1) ? -(l >> -exp) : l >> -exp;
+ }
Index: libgcc/config/s390/t-tpf
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/t-tpf 2009-10-06 16:48:15.000000000 +0200
***************
*** 0 ****
--- 1,8 ----
+ # Compile libgcc2.a with pic.
+ HOST_LIBGCC2_CFLAGS += -fPIC
+
+ # Use unwind-dw2-fde-glibc.
+ LIB2ADDEH = $(gcc_srcdir)/unwind-dw2.c $(gcc_srcdir)/unwind-dw2-fde-glibc.c \
+ $(gcc_srcdir)/unwind-sjlj.c $(gcc_srcdir)/gthr-gnat.c $(gcc_srcdir)/unwind-c.c \
+ $(gcc_srcdir)/emutls.c
+ LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
Index: gcc/config.gcc
===================================================================
*** gcc/config.gcc.orig 2009-10-06 15:32:14.000000000 +0200
--- gcc/config.gcc 2009-10-06 15:43:20.000000000 +0200
*************** rs6000-ibm-aix[6789].* | powerpc-ibm-aix
*** 2051,2057 ****
;;
s390-*-linux*)
tm_file="s390/s390.h dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h s390/linux.h"
- tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux"
;;
s390x-*-linux*)
tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h s390/linux.h"
--- 2051,2056 ----
*************** s390x-*-linux*)
*** 2059,2065 ****
md_file=s390/s390.md
extra_modes=s390/s390-modes.def
out_file=s390/s390.c
! tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux s390/t-linux64"
;;
s390x-ibm-tpf*)
tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h s390/tpf.h"
--- 2058,2064 ----
md_file=s390/s390.md
extra_modes=s390/s390-modes.def
out_file=s390/s390.c
! tmake_file="${tmake_file} s390/t-linux64"
;;
s390x-ibm-tpf*)
tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h s390/tpf.h"
*************** s390x-ibm-tpf*)
*** 2068,2074 ****
extra_modes=s390/s390-modes.def
out_file=s390/s390.c
extra_parts="crtbeginS.o crtendS.o"
- tmake_file="s390/t-crtstuff s390/t-tpf"
thread_file='tpf'
extra_options="${extra_options} s390/tpf.opt"
;;
--- 2067,2072 ----
Index: gcc/config/s390/s390.h
===================================================================
*** gcc/config/s390/s390.h.orig 2009-10-06 15:32:14.000000000 +0200
--- gcc/config/s390/s390.h 2009-10-06 15:43:20.000000000 +0200
*************** along with GCC; see the file COPYING3.
*** 24,35 ****
#ifndef _S390_H
#define _S390_H
- /* Override the __fixdfdi etc. routines when building libgcc2.
- ??? This should be done in a cleaner way ... */
- #if defined (IN_LIBGCC2) && !defined (__s390x__)
- #include <config/s390/fixdfdi.h>
- #endif
-
/* Which processor to generate code or schedule for. The cpu attribute
defines a list that mirrors this list, so changes to s390.md must be
made at the same time. */
--- 24,29 ----
Index: gcc/config/s390/t-tpf
===================================================================
*** gcc/config/s390/t-tpf 2009-10-06 15:32:14.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,9 ****
- # Compile crtbeginS.o and crtendS.o with pic.
- CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
- # Compile libgcc2.a with pic.
- TARGET_LIBGCC2_CFLAGS = -fPIC
-
- # Use unwind-dw2-fde-glibc.
- LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
- $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
- LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
--- 0 ----
Index: gcc/config/s390/t-linux
===================================================================
*** gcc/config/s390/t-linux 2009-10-06 15:32:14.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,3 ****
- # Override t-slibgcc-elf-ver to export some libgcc symbols with
- # the symbol versions that glibc used.
- SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/s390/libgcc-glibc.ver
--- 0 ----
Index: gcc/config/s390/fixdfdi.h
===================================================================
*** gcc/config/s390/fixdfdi.h 2009-10-06 15:32:14.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,462 ****
- /* Definitions of target machine for GNU compiler, for IBM S/390
- Copyright (C) 1999, 2000, 2001, 2007, 2008 Free Software Foundation, Inc.
- Contributed by Hartmut Penner (hpenner@de.ibm.com) and
- Ulrich Weigand (uweigand@de.ibm.com).
-
- 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/>. */
-
- #ifdef L_fixunstfdi
-
- #define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
- #define EXPONENT_BIAS 16383
- #define MANTISSA_BITS 112
- #define PRECISION (MANTISSA_BITS + 1)
- #define SIGNBIT 0x80000000
- #define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
- #define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
- #define MANTD_LOW_LL(fp) (fp.ll[1])
- #define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
- #define HIGH_LL_FRAC_BITS 48
- #define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
- #define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union double_long {
- long double d;
- struct {
- SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
- } l;
- UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
- };
-
- UDItype_x __fixunstfdi (long double a1);
-
- /* convert double to unsigned int */
- UDItype_x
- __fixunstfdi (long double a1)
- {
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized, negative */
- if (!EXPD (dl1) || SIGND(dl1))
- return 0;
-
- /* The exponent - considered the binary point at the right end of
- the mantissa. */
- exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
-
- /* number < 1: If the mantissa would need to be right-shifted more bits than
- its size (plus the implied one bit on the left) the result would be
- zero. */
- if (exp <= -PRECISION)
- return 0;
-
- /* NaN: All exponent bits set and a nonzero fraction. */
- if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
- return 0x0ULL;
-
- /* One extra bit is needed for the unit bit which is appended by
- MANTD_HIGH_LL on the left of the matissa. */
- exp += HIGH_LL_FRAC_BITS + 1;
-
- /* If the result would still need a left shift it will be too large
- to be represented. */
- if (exp > 0)
- return 0xFFFFFFFFFFFFFFFFULL;
-
- l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
- | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
-
- return l >> -exp;
- }
- #define __fixunstfdi ___fixunstfdi
- #endif
- #undef L_fixunstfdi
-
- #ifdef L_fixtfdi
- #define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
- #define EXPONENT_BIAS 16383
- #define MANTISSA_BITS 112
- #define PRECISION (MANTISSA_BITS + 1)
- #define SIGNBIT 0x80000000
- #define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
- #define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
- #define MANTD_LOW_LL(fp) (fp.ll[1])
- #define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
- #define HIGH_LL_FRAC_BITS 48
- #define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
- #define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union double_long {
- long double d;
- struct {
- SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
- } l;
- UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
- };
-
- DItype_x __fixtfdi (long double a1);
-
- /* convert double to unsigned int */
- DItype_x
- __fixtfdi (long double a1)
- {
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized */
- if (!EXPD (dl1))
- return 0;
-
- /* The exponent - considered the binary point at the right end of
- the mantissa. */
- exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
-
- /* number < 1: If the mantissa would need to be right-shifted more bits than
- its size the result would be zero. */
- if (exp <= -PRECISION)
- return 0;
-
- /* NaN: All exponent bits set and a nonzero fraction. */
- if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
- return 0x8000000000000000ULL;
-
- /* One extra bit is needed for the unit bit which is appended by
- MANTD_HIGH_LL on the left of the matissa. */
- exp += HIGH_LL_FRAC_BITS + 1;
-
- /* If the result would still need a left shift it will be too large
- to be represented. Compared to the unsigned variant we have to
- take care that there is still space for the sign bit to be
- applied. So we can only go on if there is a right-shift by one
- or more. */
- if (exp >= 0)
- {
- l = 1ULL << 63; /* long long min */
- return SIGND (dl1) ? l : l - 1;
- }
-
- l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
- | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
-
- return SIGND (dl1) ? -(l >> -exp) : l >> -exp;
- }
- #define __fixtfdi ___fixtfdi
- #endif
- #undef L_fixtfdi
-
- #ifdef L_fixunsdfdi
- #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
- #define EXCESSD 1022
- #define SIGNBIT 0x80000000
- #define SIGND(fp) ((fp.l.upper) & SIGNBIT)
- #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
- #define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
- #define HIDDEND_LL ((UDItype_x)1 << 52)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union double_long {
- double d;
- struct {
- SItype_x upper;
- USItype_x lower;
- } l;
- UDItype_x ll;
- };
-
- UDItype_x __fixunsdfdi (double a1);
-
- /* convert double to unsigned int */
- UDItype_x
- __fixunsdfdi (double a1)
- {
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized, negative */
-
- if (!EXPD (dl1) || SIGND(dl1))
- return 0;
-
- exp = EXPD (dl1) - EXCESSD - 53;
-
- /* number < 1 */
-
- if (exp < -53)
- return 0;
-
- /* NaN */
-
- if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
- return 0x0ULL;
-
- /* Number big number & + inf */
-
- if (exp >= 12) {
- return 0xFFFFFFFFFFFFFFFFULL;
- }
-
- l = MANTD_LL(dl1);
-
- /* shift down until exp < 12 or l = 0 */
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return l;
- }
- #define __fixunsdfdi ___fixunsdfdi
- #endif
- #undef L_fixunsdfdi
-
- #ifdef L_fixdfdi
- #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
- #define EXCESSD 1022
- #define SIGNBIT 0x80000000
- #define SIGND(fp) ((fp.l.upper) & SIGNBIT)
- #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
- #define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
- #define HIDDEND_LL ((UDItype_x)1 << 52)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union double_long {
- double d;
- struct {
- SItype_x upper;
- USItype_x lower;
- } l;
- UDItype_x ll;
- };
-
- DItype_x __fixdfdi (double a1);
-
- /* convert double to int */
- DItype_x
- __fixdfdi (double a1)
- {
- register union double_long dl1;
- register int exp;
- register DItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized */
-
- if (!EXPD (dl1))
- return 0;
-
- exp = EXPD (dl1) - EXCESSD - 53;
-
- /* number < 1 */
-
- if (exp < -53)
- return 0;
-
- /* NaN */
-
- if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
- return 0x8000000000000000ULL;
-
- /* Number big number & +/- inf */
-
- if (exp >= 11) {
- l = (long long)1<<63;
- if (!SIGND(dl1))
- l--;
- return l;
- }
-
- l = MANTD_LL(dl1);
-
- /* shift down until exp < 12 or l = 0 */
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return (SIGND (dl1) ? -l : l);
- }
- #define __fixdfdi ___fixdfdi
- #endif
- #undef L_fixdfdi
-
- #ifdef L_fixunssfdi
- #define EXP(fp) (((fp.l) >> 23) & 0xFF)
- #define EXCESS 126
- #define SIGNBIT 0x80000000
- #define SIGN(fp) ((fp.l) & SIGNBIT)
- #define HIDDEN (1 << 23)
- #define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
- #define FRAC(fp) ((fp.l) & 0x7FFFFF)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union float_long
- {
- float f;
- USItype_x l;
- };
-
- UDItype_x __fixunssfdi (float a1);
-
- /* convert float to unsigned int */
- UDItype_x
- __fixunssfdi (float a1)
- {
- register union float_long fl1;
- register int exp;
- register UDItype_x l;
-
- fl1.f = a1;
-
- /* +/- 0, denormalized, negative */
-
- if (!EXP (fl1) || SIGN(fl1))
- return 0;
-
- exp = EXP (fl1) - EXCESS - 24;
-
- /* number < 1 */
-
- if (exp < -24)
- return 0;
-
- /* NaN */
-
- if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
- return 0x0ULL;
-
- /* Number big number & + inf */
-
- if (exp >= 41) {
- return 0xFFFFFFFFFFFFFFFFULL;
- }
-
- l = MANT(fl1);
-
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return l;
- }
- #define __fixunssfdi ___fixunssfdi
- #endif
- #undef L_fixunssfdi
-
- #ifdef L_fixsfdi
- #define EXP(fp) (((fp.l) >> 23) & 0xFF)
- #define EXCESS 126
- #define SIGNBIT 0x80000000
- #define SIGN(fp) ((fp.l) & SIGNBIT)
- #define HIDDEN (1 << 23)
- #define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
- #define FRAC(fp) ((fp.l) & 0x7FFFFF)
-
- typedef int DItype_x __attribute__ ((mode (DI)));
- typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
- typedef int SItype_x __attribute__ ((mode (SI)));
- typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
- union float_long
- {
- float f;
- USItype_x l;
- };
-
- DItype_x __fixsfdi (float a1);
-
- /* convert double to int */
- DItype_x
- __fixsfdi (float a1)
- {
- register union float_long fl1;
- register int exp;
- register DItype_x l;
-
- fl1.f = a1;
-
- /* +/- 0, denormalized */
-
- if (!EXP (fl1))
- return 0;
-
- exp = EXP (fl1) - EXCESS - 24;
-
- /* number < 1 */
-
- if (exp < -24)
- return 0;
-
- /* NaN */
-
- if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
- return 0x8000000000000000ULL;
-
- /* Number big number & +/- inf */
-
- if (exp >= 40) {
- l = (long long)1<<63;
- if (!SIGN(fl1))
- l--;
- return l;
- }
-
- l = MANT(fl1);
-
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return (SIGN (fl1) ? -l : l);
- }
- #define __fixsfdi ___fixsfdi
- #endif
- #undef L_fixsfdi
--- 0 ----
Index: gcc/config/s390/libgcc-glibc.ver
===================================================================
*** gcc/config/s390/libgcc-glibc.ver 2009-10-06 15:32:14.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,116 ****
- # Copyright (C) 2002, 2006, 2008 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/>.
-
- # In order to work around the very problems that force us to now generally
- # create a libgcc.so, glibc reexported a number of routines from libgcc.a.
- # By now choosing the same version tags for these specific routines, we
- # maintain enough binary compatibility to allow future versions of glibc
- # to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
-
- # Note that we cannot use the default libgcc-glibc.ver file on s390x,
- # because GLIBC_2.0 does not exist on this architecture, as the first
- # ever glibc release on the platform was GLIBC_2.2.
-
- %ifndef __s390x__
- %exclude {
- __divdi3
- __moddi3
- __udivdi3
- __umoddi3
- __register_frame
- __register_frame_table
- __deregister_frame
- __register_frame_info
- __deregister_frame_info
- __frame_state_for
- __register_frame_info_table
- }
-
- %inherit GCC_3.0 GLIBC_2.0
- GLIBC_2.0 {
- __divdi3
- __moddi3
- __udivdi3
- __umoddi3
-
- __register_frame
- __register_frame_table
- __deregister_frame
- __register_frame_info
- __deregister_frame_info
- __frame_state_for
- __register_frame_info_table
- }
- %endif
-
- %ifdef __s390x__
- %exclude {
- __register_frame
- __register_frame_table
- __deregister_frame
- __register_frame_info
- __deregister_frame_info
- __frame_state_for
- __register_frame_info_table
- }
-
- %inherit GCC_3.0 GLIBC_2.2
- GLIBC_2.2 {
- __register_frame
- __register_frame_table
- __deregister_frame
- __register_frame_info
- __deregister_frame_info
- __frame_state_for
- __register_frame_info_table
- }
- %endif
-
- # With GCC 4.1.0 long double 128 bit support was introduced. The
- # following symbols coming from libgcc are enabled when -mlong-double-128
- # is specified. These lines make the symbols to get a @@GCC_4.1.0 attached.
-
- %exclude {
- __divtc3
- __multc3
- __powitf2
- __fixtfti
- __fixunstfti
- __floattitf
-
- __fixtfdi
- __fixunstfdi
- __floatditf
- }
-
- GCC_4.1.0 {
- __divtc3
- __multc3
- __powitf2
-
- %ifdef __s390x__
- __fixtfti
- __fixunstfti
- __floattitf
-
- %else
- __fixtfdi
- __fixunstfdi
- __floatditf
- %endif
- }
--- 0 ----
Index: libgcc/config/s390/libgcc-glibc.ver
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- libgcc/config/s390/libgcc-glibc.ver 2009-10-06 15:43:20.000000000 +0200
***************
*** 0 ****
--- 1,116 ----
+ # Copyright (C) 2002, 2006, 2008 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/>.
+
+ # In order to work around the very problems that force us to now generally
+ # create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+ # By now choosing the same version tags for these specific routines, we
+ # maintain enough binary compatibility to allow future versions of glibc
+ # to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+ # Note that we cannot use the default libgcc-glibc.ver file on s390x,
+ # because GLIBC_2.0 does not exist on this architecture, as the first
+ # ever glibc release on the platform was GLIBC_2.2.
+
+ %ifndef __s390x__
+ %exclude {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+ }
+
+ %inherit GCC_3.0 GLIBC_2.0
+ GLIBC_2.0 {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+ }
+ %endif
+
+ %ifdef __s390x__
+ %exclude {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+ }
+
+ %inherit GCC_3.0 GLIBC_2.2
+ GLIBC_2.2 {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+ }
+ %endif
+
+ # With GCC 4.1.0 long double 128 bit support was introduced. The
+ # following symbols coming from libgcc are enabled when -mlong-double-128
+ # is specified. These lines make the symbols to get a @@GCC_4.1.0 attached.
+
+ %exclude {
+ __divtc3
+ __multc3
+ __powitf2
+ __fixtfti
+ __fixunstfti
+ __floattitf
+
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+ }
+
+ GCC_4.1.0 {
+ __divtc3
+ __multc3
+ __powitf2
+
+ %ifdef __s390x__
+ __fixtfti
+ __fixunstfti
+ __floattitf
+
+ %else
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+ %endif
+ }
Index: gcc/config/s390/t-linux64
===================================================================
*** gcc/config/s390/t-linux64.orig 2009-10-06 15:32:14.000000000 +0200
--- gcc/config/s390/t-linux64 2009-10-06 15:43:20.000000000 +0200
***************
*** 1,8 ****
MULTILIB_OPTIONS = m64/m31
MULTILIB_DIRNAMES = 64 32
MULTILIB_OSDIRNAMES = ../lib64 ../lib
-
- LIBGCC = stmp-multilib
- INSTALL_LIBGCC = install-multilib
-
- EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
--- 1,3 ----
Index: gcc/config/s390/t-crtstuff
===================================================================
*** gcc/config/s390/t-crtstuff 2009-10-06 15:32:14.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,5 ****
- # crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
- # because then __FRAME_END__ might not be the last thing in .eh_frame
- # section.
- CRTSTUFF_T_CFLAGS = -fno-asynchronous-unwind-tables
- TARGET_LIBGCC2_CFLAGS += -mlong-double-128
--- 0 ----