Fix abort(3) to raise SIGABRT rather than causing SIGSEGV.

tgkill() needs the .save stack unwinding directive to get the complete
stack trace.

BUG: https://code.google.com/p/android/issues/detail?id=16672

Change-Id: Ifb447dca2147a592c48baf32769dfc175d8aea72
diff --git a/libc/arch-arm/bionic/tgkill.S b/libc/arch-arm/bionic/tgkill.S
index f46cb58..5f11b20 100644
--- a/libc/arch-arm/bionic/tgkill.S
+++ b/libc/arch-arm/bionic/tgkill.S
@@ -39,6 +39,7 @@
 */
 
 ENTRY(tgkill)
+    .save   {r4-r7, ip, lr}
     stmfd   sp!, {r4-r7, ip, lr}
     ldr     r7, =__NR_tgkill
     swi     #0
diff --git a/libc/unistd/abort.c b/libc/unistd/abort.c
index 4dffbae..4a349bd 100644
--- a/libc/unistd/abort.c
+++ b/libc/unistd/abort.c
@@ -53,9 +53,7 @@
 	 * any errors -- X311J doesn't allow abort to return anyway.
 	 */
 	sigdelset(&mask, SIGABRT);
-    /* temporary, so deliberate seg fault can be caught by debuggerd */
-	sigdelset(&mask, SIGSEGV);
-    /* -- */
+
 	(void)sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL);
 
 	/*
@@ -72,17 +70,7 @@
 		}
 	}
 
-    /* temporary, for bug hunting */
-    /* seg fault seems to produce better debuggerd results than SIGABRT */
-#ifdef __mips__
-    /* An access that will generate SIGSEGV rather than SIGBUS. */
-    *((char*)0xdeadc0c0) = 39;
-#else
-    *((char*)0xdeadbaad) = 39;
-#endif
-    /* -- */
-
-	(void)kill(getpid(), SIGABRT);
+	raise(SIGABRT);
 
 	/*
 	 * if SIGABRT ignored, or caught and the handler returns, do
@@ -99,6 +87,6 @@
         }
 
 	(void)sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL);
-	(void)kill(getpid(), SIGABRT);
+	raise(SIGABRT);
 	_exit(1);
 }