re PR libgcj/49315 (Throw_2 SEGVs on Tru64 UNIX)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Fri, 17 Jun 2011 08:33:13 +0000 (08:33 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Fri, 17 Jun 2011 08:33:13 +0000 (08:33 +0000)
PR libgcj/49315
* include/solaris-signal.h: Rename to ...
* include/posix-signal.h: ... this.
(SA_FLAGS): Define.
(SIGNAL_HANDLER): Handle non-SA_SIGINFO case.
(sa_signal_handler): Define.
(_INIT_SIG_HANDLER): New macro.
(INIT_SEGV, INIT_FPE): Use it.
* configure.ac (SIGNAL_HANDLER): Use it on alpha*-dec-osf*,
mips-sgi-irix*, *-*-solaris2*
* configure: Regenerate.
* include/aix-signal.h: Refer to AIX.
* configure.host (alpha*-dec-osf*): Enable can_unwind_signal.
(mips-sgi-irix6*): Likewise.

From-SVN: r175138

libjava/ChangeLog
libjava/configure
libjava/configure.ac
libjava/configure.host
libjava/include/aix-signal.h
libjava/include/posix-signal.h [new file with mode: 0644]
libjava/include/solaris-signal.h [deleted file]

index 4ca6cf4c4e0e7f446899cddae1bbb49cde7f1b17..b253d02a169c0f7ce347317676eac654aa58b2bc 100644 (file)
@@ -1,3 +1,20 @@
+2011-06-17  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR libgcj/49315
+       * include/solaris-signal.h: Rename to ...
+       * include/posix-signal.h: ... this.
+       (SA_FLAGS): Define.
+       (SIGNAL_HANDLER): Handle non-SA_SIGINFO case.
+       (sa_signal_handler): Define.
+       (_INIT_SIG_HANDLER): New macro.
+       (INIT_SEGV, INIT_FPE): Use it.
+       * configure.ac (SIGNAL_HANDLER): Use it on alpha*-dec-osf*,
+       mips-sgi-irix*, *-*-solaris2*
+       * configure: Regenerate.
+       * include/aix-signal.h: Refer to AIX.
+       * configure.host (alpha*-dec-osf*): Enable can_unwind_signal.
+       (mips-sgi-irix6*): Likewise.
+
 2011-05-31  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR libgcj/49193
index 7681b12fdf8b201dace09f36d660233fe61fefca..01e5bf0dfc78b5e7d65c3350081c3de4f0a90e1f 100755 (executable)
@@ -24215,12 +24215,12 @@ SYSDEP_SOURCES=
 SIGNAL_HANDLER_AUX=
 
 case "${host}" in
+ alpha*-dec-osf* | mips-sgi-irix* | *-*-solaris2*)
+    SIGNAL_HANDLER=include/posix-signal.h
+    ;;
  i?86-*-linux*)
     SIGNAL_HANDLER=include/i386-signal.h
     ;;
- *-*-solaris2*)
-    SIGNAL_HANDLER=include/solaris-signal.h
-    ;;
 # ia64-*)
 #    SYSDEP_SOURCES=sysdep/ia64.c
 #    test -d sysdep || mkdir sysdep
index 4cfd49fd56f9f9d254392f8c5243071d9e6d42b6..0e127fc818bfdb496d5b16af8619947f895d35f8 100644 (file)
@@ -1727,12 +1727,12 @@ SYSDEP_SOURCES=
 SIGNAL_HANDLER_AUX=
 
 case "${host}" in
+ alpha*-dec-osf* | mips-sgi-irix* | *-*-solaris2*)
+    SIGNAL_HANDLER=include/posix-signal.h
+    ;;
  i?86-*-linux*)
     SIGNAL_HANDLER=include/i386-signal.h
     ;;
- *-*-solaris2*)
-    SIGNAL_HANDLER=include/solaris-signal.h
-    ;;
 # ia64-*)
 #    SYSDEP_SOURCES=sysdep/ia64.c
 #    test -d sysdep || mkdir sysdep
index 9d4f2b6a1db816dbf4f37ee2f7272dd96145ab70..fab8c603a81fb68a9923feaa29cb1727d7d36f8d 100644 (file)
@@ -274,7 +274,10 @@ EOF
          rm -f conftest conftest.c
        fi
        ;;
-   i[34567]86*-kfreebsd*-gnu | x86_64*-kfreebsd*-gnu)
+  alpha*-dec-osf*)
+       can_unwind_signal=yes
+       ;;
+  i[34567]86*-kfreebsd*-gnu | x86_64*-kfreebsd*-gnu)
         libgcj_ld_symbolic='-Wl,-Bsymbolic'
         slow_pthread_self=
         ;;
@@ -283,6 +286,7 @@ EOF
        DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine
        ;;
   mips-sgi-irix6* )
+       can_unwind_signal=yes
        sysdeps_dir=mips
        ;;
   arm*-linux* )
index abf37229235a1862cde65282015e37867c945107..896aa8e550343af6a50d33e6553d7c1944f15b6d 100644 (file)
@@ -1,7 +1,7 @@
 /* aix-signal.h - Catch runtime signals and turn them into exceptions,
-   on a Darwin system.  */
+   on a AIX system.  */
 
-/* Copyright (C) 2008  Free Software Foundation
+/* Copyright (C) 2008, 2011  Free Software Foundation
 
    This file is part of libgcj.
 
diff --git a/libjava/include/posix-signal.h b/libjava/include/posix-signal.h
new file mode 100644 (file)
index 0000000..726fde3
--- /dev/null
@@ -0,0 +1,60 @@
+// posix-signal.h - Catch runtime signals and turn them into exceptions.
+
+/* Copyright (C) 1998, 1999, 2000, 2009, 2011  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+#ifndef JAVA_SIGNAL_H
+#define JAVA_SIGNAL_H 1
+
+#include <signal.h>
+
+#define HANDLE_SEGV 1
+#define HANDLE_FPE 1
+
+/* Different implementations of MD_FALLBACK_FRAME_STATE_FOR either require
+   SA_SIGINFO being set or fail if so.  Cf. gcc/ada/init.c
+   (__gnat_install_handler) for details.  */
+
+#if (defined __alpha__ && defined __osf__) \
+  || (defined __sun__ && defined __svr4__)
+#define SA_FLAGS SA_NODEFER | SA_SIGINFO
+#elif defined __sgi__
+#define SA_FLAGS SA_NODEFER
+#else
+#error Must define SA_FLAGS.
+#endif
+
+#if SA_FLAGS & SA_SIGINFO
+#define SIGNAL_HANDLER(_name)                                          \
+static void _Jv_##_name (int,                                          \
+                        siginfo_t *_si __attribute__ ((__unused__)),   \
+                        void *_uc __attribute__ ((__unused__)))
+#define sa_signal_handler sa_sigaction
+#else
+#define SIGNAL_HANDLER(_name)                                          \
+static void _Jv_##_name (int)
+#define sa_signal_handler sa_handler
+#endif
+
+#define MAKE_THROW_FRAME(_exception)
+
+#define _INIT_SIG_HANDLER(_SIG, _ACTION)                               \
+do                                                                     \
+  {                                                                    \
+    struct sigaction act;                                              \
+    act.sa_signal_handler = _Jv_##_ACTION;                             \
+    act.sa_flags = SA_FLAGS;                                           \
+    sigemptyset (&act.sa_mask);                                                \
+    sigaction(_SIG, &act, NULL);                                       \
+  }                                                                    \
+while (0)
+
+#define INIT_SEGV      _INIT_SIG_HANDLER (SIGSEGV, catch_segv)
+#define INIT_FPE       _INIT_SIG_HANDLER (SIGFPE, catch_fpe)
+
+#endif /* JAVA_SIGNAL_H */
diff --git a/libjava/include/solaris-signal.h b/libjava/include/solaris-signal.h
deleted file mode 100644 (file)
index a936afe..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// sparc-signal.h - Catch runtime signals and turn them into exceptions.
-
-/* Copyright (C) 1998, 1999, 2000, 2009  Free Software Foundation
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-#ifndef JAVA_SIGNAL_H
-#define JAVA_SIGNAL_H 1
-
-#include <signal.h>
-
-#define HANDLE_SEGV 1
-#define HANDLE_FPE 1
-
-#define SIGNAL_HANDLER(_name)                                          \
-static void _Jv_##_name (int,                                          \
-                        siginfo_t *_si __attribute__ ((__unused__)),   \
-                        void *_uc __attribute__ ((__unused__)))
-
-#define MAKE_THROW_FRAME(_exception)
-
-#define INIT_SEGV                                              \
-do                                                             \
-  {                                                            \
-    struct sigaction act;                                      \
-    act.sa_sigaction = _Jv_catch_segv;                         \
-    act.sa_flags = SA_SIGINFO | SA_NODEFER;                    \
-    sigemptyset (&act.sa_mask);                                        \
-    sigaction (SIGSEGV, &act, NULL);                           \
-  }                                                            \
-while (0)                                                      
-                                                               
-#define INIT_FPE                                               \
-do                                                             \
-  {                                                            \
-    struct sigaction act;                                      \
-    act.sa_sigaction = _Jv_catch_fpe;                          \
-    act.sa_flags = SA_SIGINFO | SA_NODEFER;                    \
-    sigemptyset (&act.sa_mask);                                        \
-    sigaction (SIGFPE, &act, NULL);                            \
-  }                                                            \
-while (0)
-
-#endif /* JAVA_SIGNAL_H */