This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix alpha nptl


I now get 100% pass for nptl.

Thanks to Uli for stepping me through the debugging process to get
over the "the thread just went away" hump.



r~



        * sysdeps/unix/sysv/linux/alpha/select.S: Fix unwind.  Propagate
        oldvalue from CENABLE to CDISABLE.
nptl/
        * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Propagate
        oldvalue from CENABLE to CDISABLE.

Index: nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
===================================================================
RCS file: /cvs/glibc/libc/nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h,v
retrieving revision 1.2
diff -c -p -d -u -r1.2 sysdep-cancel.h
--- nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h	13 Jan 2004 09:36:22 -0000	1.2
+++ nptl/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h	13 Mar 2004 05:26:46 -0000
@@ -63,9 +63,14 @@ __LABEL($pseudo_cancel)						\
 	SAVE_ARGS_##args;					\
 	CENABLE;						\
 	LOAD_ARGS_##args;					\
+	/* Save the CENABLE return value in RA.  That register	\
+	   is preserved across syscall and the real return 	\
+	   address is saved on the stack.  */			\
+	mov	v0, ra;						\
 	lda	v0, SYS_ify(syscall_name);			\
 	call_pal PAL_callsys;					\
 	stq	v0, 8(sp);					\
+	mov	ra, a0;						\
 	bne	a3, $multi_error;				\
 	CDISABLE;						\
 	ldq	ra, 0(sp);					\
Index: sysdeps/unix/sysv/linux/alpha/select.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/alpha/select.S,v
retrieving revision 1.10
diff -c -p -d -u -r1.10 select.S
--- sysdeps/unix/sysv/linux/alpha/select.S	20 Jun 2003 16:24:36 -0000	1.10
+++ sysdeps/unix/sysv/linux/alpha/select.S	13 Mar 2004 05:26:47 -0000
@@ -53,6 +53,8 @@ LEAF(SELECT, 64)
 	jsr	AT, (AT), _mcount
 	.set at
 #endif
+	stq	ra, 40(sp)
+	.mask	0x4000000, 40-64
 	.prologue 1
 
 #ifdef CENABLE
@@ -131,9 +133,9 @@ $do_cancel:
 	stq	a1, 16(sp)
 	stq	a2, 24(sp)
 	stq	a3, 32(sp)
-	stq	ra, 40(sp)
 
 	CENABLE
+	mov	v0, ra
 
 	ldl	t0, __libc_missing_axp_tv64
 	bne	t0, $do_cancel32
@@ -147,6 +149,8 @@ $do_cancel:
 
 	ldi	v0, SYS_ify(select)
 	callsys
+
+	mov	ra, a0
 	bne	a3, $cancel_err64
 
 	stq	v0, 8(sp)
@@ -184,6 +188,8 @@ $do_cancel32:
 
 1:	ldi	v0, SYS_ify(osf_select)
 	callsys
+
+	mov	ra, a0
 	bne	a3, $cancel_error
 
 	/* ... and bounce the remaining timeout back.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]