about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog9
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S27
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S15
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S6
4 files changed, 31 insertions, 26 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 7e3de56ec7..534f585f52 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,12 @@
+2004-05-16  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Correct some
+	unwind info.
+
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S:
+	Parametrize frame size.  Correct some unwind info.
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
+
 2004-05-04  Jakub Jelinek  <jakub@redhat.com>
 
 	* tst-stack3.c: Note testing functionality beyond POSIX.
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
index b1c32ea4b1..acc5a6a5f6 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -83,7 +83,8 @@ __pthread_cond_timedwait:
 	addl	$1, total_seq(%ebx)
 	adcl	$0, total_seq+4(%ebx)
 
-	subl	$20, %esp
+#define FRAME_SIZE 20
+	subl	$FRAME_SIZE, %esp
 .Lsubl:
 
 	/* Get and store current wakeup_seq value.  */
@@ -220,9 +221,9 @@ __pthread_cond_timedwait:
 	jne	10f
 
 	/* Remove cancellation handler.  */
-11:	movl	44(%esp), %eax
+11:	movl	24+FRAME_SIZE(%esp), %eax
 	call	__pthread_mutex_cond_lock
-	addl	$20, %esp
+	addl	$FRAME_SIZE, %esp
 .Laddl:
 
 	/* We return the result of the mutex_lock operation if it failed.  */
@@ -257,7 +258,7 @@ __pthread_cond_timedwait:
 	call	__lll_mutex_lock_wait
 	jmp	2b
 
-	/* Unlock in loop requires waekup.  */
+	/* Unlock in loop requires wakeup.  */
 3:
 .LSbl2:
 #if cond_lock == 0
@@ -278,7 +279,7 @@ __pthread_cond_timedwait:
 	call	__lll_mutex_lock_wait
 	jmp	6b
 
-	/* Unlock after loop requires waekup.  */
+	/* Unlock after loop requires wakeup.  */
 10:
 #if cond_lock == 0
 	movl	%ebx, %eax
@@ -341,7 +342,7 @@ versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
 
 	.type	__condvar_tw_cleanup3, @function
 __condvar_tw_cleanup3:
-	movl	40(%esp), %ebx
+	movl	20+FRAME_SIZE(%esp), %ebx
 .LSbl5:
 	jmp	__condvar_tw_cleanup
 	.size	__condvar_tw_cleanup3, .-__condvar_tw_cleanup3
@@ -399,7 +400,7 @@ __condvar_tw_cleanup:
 	movl	$0x7fffffff, %edx
 	ENTER_KERNEL
 
-	movl	44(%esp), %eax
+	movl	24+FRAME_SIZE(%esp), %eax
 	call	__pthread_mutex_cond_lock
 
 	movl	%esi, (%esp)
@@ -525,7 +526,7 @@ __condvar_tw_cleanup:
 	.byte	2				# DW_CFA_advance_loc1
 	.byte	.Lsubl-.Lpush_ebx
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 40
+	.uleb128 20+FRAME_SIZE
 	.byte	3				# DW_CFA_advance_loc2
 	.2byte	.Laddl-.Lsubl
 	.byte	14				# DW_CFA_def_cfa_offset
@@ -551,7 +552,7 @@ __condvar_tw_cleanup:
 	.uleb128 20
 	.byte	0x40+.LSbl2-.LSbl1		# DW_CFA_advance_loc+N
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 64
+	.uleb128 20+FRAME_SIZE
 	.byte	0x85				# DW_CFA_offset %ebp
 	.uleb128 2
 	.byte	0x87				# DW_CFA_offset %edi
@@ -562,19 +563,15 @@ __condvar_tw_cleanup:
 	.uleb128 5
 	.byte	0x40+.LSbl3-.LSbl2		# DW_CFA_advance_loc+N
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 24
+	.uleb128 20
 #if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
 	.byte	0x40+.LSbl4-.LSbl3		# DW_CFA_advance_loc+N
-	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 64
-	.byte	4				# DW_CFA_advance_loc4
-	.long	.LSbl5-.LSbl4
 #else
 	.byte	4				# DW_CFA_advance_loc4
 	.long	.LSbl5-.LSbl3
 #endif
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 40
+	.uleb128 20+FRAME_SIZE
 	.align	4
 .LENDFDE:
 
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index 38cb36ae91..08a0588910 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -80,7 +80,8 @@ __pthread_cond_wait:
 	addl	$1, total_seq(%ebx)
 	adcl	$0, total_seq+4(%ebx)
 
-	subl	$12, %esp
+#define FRAME_SIZE 12
+	subl	$FRAME_SIZE, %esp
 .Lsubl:
 
 	/* Get and store current wakeup_seq value.  */
@@ -153,9 +154,9 @@ __pthread_cond_wait:
 #endif
 	jne	10f
 
-11:	movl	32(%esp), %eax
+11:	movl	20+FRAME_SIZE(%esp), %eax
 	call	__pthread_mutex_cond_lock
-	addl	$12, %esp
+	addl	$FRAME_SIZE, %esp
 .Laddl:
 
 14:	popl	%ebx
@@ -291,7 +292,7 @@ __condvar_w_cleanup:
 	movl	$0x7fffffff, %edx
 	ENTER_KERNEL
 
-	movl	32(%esp), %eax
+	movl	20+FRAME_SIZE(%esp), %eax
 	call	__pthread_mutex_cond_lock
 
 	movl	%esi, (%esp)
@@ -403,7 +404,7 @@ __condvar_w_cleanup:
 	.byte	2				# DW_CFA_advance_loc1
 	.byte	.Lsubl-.Lpush_ebx
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 28
+	.uleb128 16+FRAME_SIZE
 	.byte	2				# DW_CFA_advance_loc1
 	.byte	.Laddl-.Lsubl
 	.byte	14				# DW_CFA_def_cfa_offset
@@ -431,13 +432,13 @@ __condvar_w_cleanup:
 	.uleb128 4
 	.byte	0x40+.LSbl2-.LSbl1		# DW_CFA_advance_loc+N
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 28
+	.uleb128 16+FRAME_SIZE
 	.byte	0x40+.LSbl3-.LSbl2		# DW_CFA_advance_loc+N
 	.byte	14				# DW_CFA_def_cfa_offset
 	.uleb128 16
 	.byte	0x40+.LSbl4-.LSbl3		# DW_CFA_advance_loc+N
 	.byte	14				# DW_CFA_def_cfa_offset
-	.uleb128 28
+	.uleb128 16+FRAME_SIZE
 	.align	4
 .LENDFDE:
 
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
index b48a309f53..5b24476936 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -142,13 +142,11 @@ sem_timedwait:
 	popl	%esi
 	cfi_adjust_cfa_offset(-4)
 	cfi_restore(6)
-	cfi_adjust_cfa_offset(-4)
-	cfi_restore(6)
 	ret
 
 	cfi_adjust_cfa_offset(24)
 	cfi_offset(6, -8)		/* %esi */
-	cfi_offset(7, -12)		/* %edi */
+	cfi_offset(7, -12)	 	/* %edi */
 	cfi_offset(3, -16)		/* %ebx */
 3:	negl	%esi
 6: