Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: signal.c 7356 2007-02-14 11:00:28Z twisti $
+ $Id: signal.c 7592 2007-03-28 20:12:33Z twisti $
*/
#include "vm/types.h"
+#include "arch.h"
+
#include "mm/memory.h"
#if defined(ENABLE_THREADS)
(void) memory_mmap_anon(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
-#if 0
/* Block the following signals (SIGINT for <ctrl>-c, SIGQUIT for
<ctrl>-\). We enable them later in signal_thread, but only for
this thread. */
if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0)
vm_abort("signal_init: sigprocmask failed: %s", strerror(errno));
-#endif
#if defined(ENABLE_GC_BOEHM)
/* Allocate something so the garbage collector's signal handlers
act.sa_sigaction = md_signal_handler_sigsegv;
act.sa_flags = SA_NODEFER | SA_SIGINFO;
-#if defined(SIGSEGV)
+# if defined(SIGSEGV)
sigaction(SIGSEGV, &act, NULL);
-#endif
+# endif
-#if defined(SIGBUS)
+# if defined(SIGBUS)
sigaction(SIGBUS, &act, NULL);
-#endif
+# endif
-#if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
+# if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
/* SIGFPE handler */
act.sa_sigaction = md_signal_handler_sigfpe;
act.sa_flags = SA_NODEFER | SA_SIGINFO;
sigaction(SIGFPE, &act, NULL);
-#endif
+# endif
+
+# if defined(__ARM__)
+ /* XXX use better defines for that (in arch.h) */
+ /* SIGILL handler */
+
+ act.sa_sigaction = md_signal_handler_sigill;
+ act.sa_flags = SA_NODEFER | SA_SIGINFO;
+ sigaction(SIGILL, &act, NULL);
+# endif
+
+# if defined(__POWERPC__)
+ /* XXX use better defines for that (in arch.h) */
+ /* SIGTRAP handler */
+
+ act.sa_sigaction = md_signal_handler_sigtrap;
+ act.sa_flags = SA_NODEFER | SA_SIGINFO;
+ sigaction(SIGTRAP, &act, NULL);
+# endif
# if defined(ENABLE_INTRP)
}
# endif