about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2014-05-17 11:25:19 -0700
committerRichard Henderson <rth@twiddle.net>2014-05-17 11:25:19 -0700
commite184a918bb5866a6488257d37ecc4e4ff747b7b7 (patch)
tree136e6a73de4ccd1ed733602a11af223545840902
parentab21431318d99c94e644606dee1e6a4545d98007 (diff)
downloadglibc-e184a918bb5866a6488257d37ecc4e4ff747b7b7.tar.gz
glibc-e184a918bb5866a6488257d37ecc4e4ff747b7b7.tar.xz
glibc-e184a918bb5866a6488257d37ecc4e4ff747b7b7.zip
alpha: Create __syscall_nocancel entry points
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h24
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S13
3 files changed, 23 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 6223f79fe6..7b1feb60cd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-05-17  Richard Henderson  <rth@redhat.com>
+
+	* sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h (PSEUDO):
+	Create the __##syscall_name##_nocancel entry point.
+	* sysdeps/unix/sysv/linux/alpha/sigsuspend.S (__sigsuspend_nocancel):
+	Remove; let the sysdep-cancel.h code create it.
+
 2014-05-17  David S. Miller  <davem@davemloft.net>
 
 	* sysdeps/unix/sysv/linux/sparc/bits/termios.h (PAGEOUT, WRAP):
diff --git a/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h
index 610b583b4a..69809bc9e1 100644
--- a/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h
@@ -28,24 +28,32 @@
 
 # undef PSEUDO
 # define PSEUDO(name, syscall_name, args)			\
-	.globl name;						\
+	.globl	__##syscall_name##_nocancel;			\
+	.type	__##syscall_name##_nocancel, @function;		\
+	.usepv	__##syscall_name##_nocancel, std;		\
 	.align 4;						\
-	.type name, @function;					\
-	.usepv name, std;					\
 	cfi_startproc;						\
-__LABEL(name)							\
+__LABEL(__##syscall_name##_nocancel)				\
 	ldgp	gp, 0(pv);					\
 	PSEUDO_PROF;						\
-	PSEUDO_PREPARE_ARGS					\
-	SINGLE_THREAD_P(t0);					\
-	bne	t0, $pseudo_cancel;				\
+__LABEL($pseudo_nocancel)					\
+	PSEUDO_PREPARE_ARGS;					\
 	lda	v0, SYS_ify(syscall_name);			\
 	call_pal PAL_callsys;					\
 	bne	a3, SYSCALL_ERROR_LABEL;			\
 __LABEL($pseudo_ret)						\
 	.subsection 2;						\
+	.size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
+	.globl	name;						\
+	.type	name, @function;				\
+	.usepv	name, std;					\
+	.align 4;						\
 	cfi_startproc;						\
-__LABEL($pseudo_cancel)						\
+__LABEL(name)							\
+	ldgp	gp, 0(pv);					\
+	PSEUDO_PROF;						\
+	SINGLE_THREAD_P(t0);					\
+	beq	t0, $pseudo_nocancel;				\
 	subq	sp, 64, sp;					\
 	cfi_def_cfa_offset(64);					\
 	stq	ra, 0(sp);					\
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index aa5e6c67d5..8a6816ec82 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -19,19 +19,6 @@
 /* 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