summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S13
2 files changed, 18 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d27b4ca17..ed0555345e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-13 Richard Henderson <rth@redhat.com>
+
+ * sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Add support for
+ __sigsuspend_nocancel.
+
2007-03-06 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/getaddrinfo.c (get_scope): Correct test for
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index 48c3f271c7..6863c07ec1 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -20,6 +20,19 @@
/* sigsuspend is a special syscall since it needs to dereference the
sigset. This will have to change when we have more than 64 signals. */
+#ifndef NO_CANCELLATION
+#include <sysdep.h>
+
+#undef PSEUDO_PREPARE_ARGS
+#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0);
+
+PSEUDO(__sigsuspend_nocancel, sigsuspend, 1)
+ ret
+/* Use END, not PSEUDO_END, so that we don't issue two $syscall_error
+ symbols; we'll jump into __sigsuspend for the error case. */
+END(__sigsuspend_nocancel)
+#endif /* NO_CANCELLATION */
+
#include <sysdep-cancel.h>
#undef PSEUDO_PREPARE_ARGS