From 68e58c33468f3523c1eb6232d0a4d1e949db3011 Mon Sep 17 00:00:00 2001
From: Geoffrey Keating <geoffk@apple.com>
Date: Mon, 5 Dec 2005 19:37:11 +0000
Subject: [PATCH] host-darwin.c (segv_handler): Unblock SEGV so we don't go
 into an infinite loop.

	* config/rs6000/host-darwin.c (segv_handler): Unblock SEGV so
	we don't go into an infinite loop.

From-SVN: r108070
---
 gcc/ChangeLog                   | 5 +++++
 gcc/config/rs6000/host-darwin.c | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d443ba6a9894..57153ed8e4ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-05  Geoffrey Keating  <geoffk@apple.com>
+
+	* config/rs6000/host-darwin.c (segv_handler): Unblock SEGV so
+	we don't go into an infinite loop.
+
 2005-12-05  Paolo Bonzini  <bonzini@gnu.org>
 
         * config/rs6000/predicates.md (logical_const_operand): Split
diff --git a/gcc/config/rs6000/host-darwin.c b/gcc/config/rs6000/host-darwin.c
index 694d0a1dcd10..75c92a2a25bd 100644
--- a/gcc/config/rs6000/host-darwin.c
+++ b/gcc/config/rs6000/host-darwin.c
@@ -58,11 +58,15 @@ segv_handler (int sig ATTRIBUTE_UNUSED,
 	      void *scp)
 {
   ucontext_t *uc = (ucontext_t *)scp;
+  sigset_t sigset;
   unsigned faulting_insn;
 
   /* The fault might have happened when trying to run some instruction, in
      which case the next line will segfault _again_.  Handle this case.  */
   signal (SIGSEGV, segv_crash_handler);
+  sigemptyset (&sigset);
+  sigaddset (&sigset, SIGSEGV);
+  sigprocmask (SIG_UNBLOCK, &sigset, NULL);
 
   faulting_insn = *(unsigned *)uc->uc_mcontext->ss.srr0;
 
-- 
GitLab