aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog20
-rw-r--r--libgcc/Makefile.in1
-rw-r--r--libgcc/config.host2
-rw-r--r--libgcc/config/aarch64/t-aarch642
-rw-r--r--libgcc/config/s390/libgcc-glibc.ver14
-rw-r--r--libgcc/config/s390/sfp-exceptions.c61
-rw-r--r--libgcc/config/s390/sfp-machine.h89
-rw-r--r--libgcc/config/s390/t-softfp2
-rwxr-xr-xlibgcc/configure19
-rw-r--r--libgcc/configure.ac14
-rw-r--r--libgcc/enable-execute-stack-mprotect.c1
11 files changed, 223 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 0962ddf..c4cba3b 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,23 @@
+2025-08-07 Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
+
+ * config/s390/libgcc-glibc.ver: Export _BitInt support
+ functions.
+ * config/s390/t-softfp (softfp_extras): Add fixtfbitint
+ floatbitinttf.
+
+2025-08-07 Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
+
+ * config.host: Include makefiles t-softfp for -m64.
+ * config/s390/sfp-exceptions.c: New file.
+ * config/s390/sfp-machine.h: New file.
+ * config/s390/t-softfp: New file.
+
+2025-08-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgcc/121397
+ * enable-execute-stack-mprotect.c (check_enabling): Remove useless
+ forward declaration.
+
2025-07-31 Wilco Dijkstra <wilco.dijkstra@arm.com>
* config/aarch64/cpuinfo.c (__init_cpu_features_constructor):
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index f7b48dc..e258f94 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -87,6 +87,7 @@ CC = @CC@
CFLAGS = @CFLAGS@
RANLIB = @RANLIB@
LN_S = @LN_S@
+WERROR = @WERROR@
PWD_COMMAND = $${PWDCMD-pwd}
diff --git a/libgcc/config.host b/libgcc/config.host
index d36f0e3..92acdd0 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -1397,6 +1397,8 @@ s390x-*-linux*)
tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux t-stack s390/t-stack-s390"
if test "${host_address}" = 32; then
tmake_file="${tmake_file} s390/32/t-floattodi"
+ else
+ tmake_file="${tmake_file} s390/t-softfp t-softfp"
fi
md_unwind_header=s390/linux-unwind.h
;;
diff --git a/libgcc/config/aarch64/t-aarch64 b/libgcc/config/aarch64/t-aarch64
index d4c5922..c7d83c7 100644
--- a/libgcc/config/aarch64/t-aarch64
+++ b/libgcc/config/aarch64/t-aarch64
@@ -30,4 +30,4 @@ LIB2ADDEH += \
$(srcdir)/config/aarch64/__arm_za_disable.S
SHLIB_MAPFILES += $(srcdir)/config/aarch64/libgcc-sme.ver
-LIBGCC2_CFLAGS += -Werror -Wno-prio-ctor-dtor
+LIBGCC2_CFLAGS += $(WERROR) -Wno-prio-ctor-dtor
diff --git a/libgcc/config/s390/libgcc-glibc.ver b/libgcc/config/s390/libgcc-glibc.ver
index 86c55a0..00375b3 100644
--- a/libgcc/config/s390/libgcc-glibc.ver
+++ b/libgcc/config/s390/libgcc-glibc.ver
@@ -114,3 +114,17 @@ GCC_4.1.0 {
__floatditf
%endif
}
+
+%ifdef __s390x__
+%inherit GCC_16.0.0 GCC_4.1.0
+GCC_16.0.0 {
+ __mulbitint3
+ __divmodbitint4
+ __fixsfbitint
+ __fixdfbitint
+ __fixtfbitint
+ __floatbitintsf
+ __floatbitintdf
+ __floatbitinttf
+}
+%endif
diff --git a/libgcc/config/s390/sfp-exceptions.c b/libgcc/config/s390/sfp-exceptions.c
new file mode 100644
index 0000000..a2fc5dd
--- /dev/null
+++ b/libgcc/config/s390/sfp-exceptions.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 2001-2025 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.
+
+ 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/>. */
+
+#include "sfp-machine.h"
+
+#define __math_force_eval_div(x, y) \
+ do { asm ("" : "+f" (x)); asm volatile ("" : : "f" (x / y)); } while (0)
+
+void
+__sfp_handle_exceptions (int _fex)
+{
+ if (_fex & FP_EX_INVALID)
+ {
+ float x = 0.0f;
+ __math_force_eval_div (x, x);
+ }
+ if (_fex & FP_EX_DIVZERO)
+ {
+ float x = 1.0f;
+ float y = 0.0f;
+ __math_force_eval_div (x, y);
+ }
+ if (_fex & FP_EX_OVERFLOW)
+ {
+ float x = __FLT_MAX__;
+ asm ("" : "+f" (x));
+ asm volatile ("" : : "f" (x + x));
+ }
+ if (_fex & FP_EX_UNDERFLOW)
+ {
+ float x = __FLT_MIN__;
+ asm ("" : "+f" (x));
+ asm volatile ("" : : "f" (x * x));
+ }
+ if (_fex & FP_EX_INEXACT)
+ {
+ float x = 1.0f;
+ float y = 3.0f;
+ __math_force_eval_div (x, y);
+ }
+}
diff --git a/libgcc/config/s390/sfp-machine.h b/libgcc/config/s390/sfp-machine.h
new file mode 100644
index 0000000..960bad7
--- /dev/null
+++ b/libgcc/config/s390/sfp-machine.h
@@ -0,0 +1,89 @@
+/* Copyright (C) 2001-2025 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.
+
+ 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/>. */
+
+#if ! __s390x__
+# error "soft-fp implemented for s390x only"
+#endif
+
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long long
+#define _FP_WS_TYPE signed long long
+#define _FP_I_TYPE long long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+#define TI_BITS (__CHAR_BIT__ * (int) sizeof (TItype))
+
+#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1)
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1
+
+#define _FP_NANSIGN_H 0
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define FP_EX_INVALID 0x01
+#define FP_EX_DIVZERO 0x02
+#define FP_EX_OVERFLOW 0x04
+#define FP_EX_UNDERFLOW 0x08
+#define FP_EX_INEXACT 0x10
+#define FP_EX_ALL \
+ (FP_EX_INVALID | FP_EX_DIVZERO | FP_EX_OVERFLOW \
+ | FP_EX_UNDERFLOW | FP_EX_INEXACT)
+
+void __sfp_handle_exceptions (int);
+
+#define FP_HANDLE_EXCEPTIONS \
+ do { \
+ if (__builtin_expect (_fex, 0)) \
+ __sfp_handle_exceptions (_fex); \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define FP_RND_NEAREST 0x0
+#define FP_RND_ZERO 0x1
+#define FP_RND_PINF 0x2
+#define FP_RND_MINF 0x3
+#define FP_RND_MASK 0x3
+
+#define _FP_DECL_EX \
+ unsigned int _fpcr __attribute__ ((unused)) = FP_RND_NEAREST
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ __asm__ __volatile__ ("stfpc %0" \
+ : "=m" (_fpcr)); \
+ } while (0)
+
+#define FP_ROUNDMODE (_fpcr & FP_RND_MASK)
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#define __BYTE_ORDER __BIG_ENDIAN
diff --git a/libgcc/config/s390/t-softfp b/libgcc/config/s390/t-softfp
new file mode 100644
index 0000000..724b15e
--- /dev/null
+++ b/libgcc/config/s390/t-softfp
@@ -0,0 +1,2 @@
+LIB2ADD += $(srcdir)/config/s390/sfp-exceptions.c
+softfp_extras := fixtfbitint floatbitinttf
diff --git a/libgcc/configure b/libgcc/configure
index 1841833..d5e80d2 100755
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -586,6 +586,7 @@ ac_unique_file="static-object.mk"
ac_includes_default='/* none */'
ac_subst_vars='LTLIBOBJS
LIBOBJS
+WERROR
md_unwind_header
md_unwind_def_header
unwind_header
@@ -720,6 +721,7 @@ enable_tm_clone_registry
with_glibc_version
enable_tls
with_gcc_major_version_only
+enable_werror
'
ac_precious_vars='build_alias
host_alias
@@ -1362,6 +1364,7 @@ Optional Features:
installations without PT_GNU_EH_FRAME support
--disable-tm-clone-registry disable TM clone registry
--enable-tls Use thread-local storage [default=yes]
+ --enable-werror build with -Werror for selected targets
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -5789,6 +5792,22 @@ fi
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+ enableval=$enable_werror;
+case ${enable_werror} in
+ no) WERROR="" ;;
+ *) WERROR="-Werror" ;;
+esac
+
+else
+
+WERROR="-Werror"
+
+fi
+
+
+
# We need multilib support.
ac_config_files="$ac_config_files Makefile"
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index 85e4f1b..65cd3c6 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -733,6 +733,20 @@ AC_SUBST(md_unwind_header)
AC_SUBST(sfp_machine_header)
AC_SUBST(thread_header)
+AC_ARG_ENABLE(werror,
+[AS_HELP_STRING([--enable-werror],
+ [build with -Werror for selected targets])],
+[
+case ${enable_werror} in
+ no) WERROR="" ;;
+ *) WERROR="-Werror" ;;
+esac
+],
+[
+WERROR="-Werror"
+])
+AC_SUBST(WERROR)
+
# We need multilib support.
AC_CONFIG_FILES([Makefile])
AC_CONFIG_COMMANDS([default],
diff --git a/libgcc/enable-execute-stack-mprotect.c b/libgcc/enable-execute-stack-mprotect.c
index 08a0d72..7971efb 100644
--- a/libgcc/enable-execute-stack-mprotect.c
+++ b/libgcc/enable-execute-stack-mprotect.c
@@ -30,7 +30,6 @@
static int need_enable_exec_stack;
-static void check_enabling (void) __attribute__ ((unused));
extern void __enable_execute_stack (void *);
#if defined __sun__ && defined __svr4__