This is the mail archive of the libc-alpha@sourceware.org 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]

[PATCH 1/2] Update cfi offsets for pthread_cond_broadcast andsignal


The following fixes cfi offsets for i486/pthread_cond_broadcast and
i486/pthread_cond_signal. Also removed redundant code.

2009-11-18  Dinakar Guniguntala  <dino@in.ibm.com>

        * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S:
        Remove redundant code. Fix cfi offsets.
        * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S:
        Fix cfi offsets.


diff -X ignore -Nurp glibc-20091118.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S glibc-20091118.cfi/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S
--- glibc-20091118.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S	2009-10-12 00:51:20.000000000 -0400
+++ glibc-20091118.cfi/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S	2009-11-18 06:03:11.000000000 -0500
@@ -35,16 +35,17 @@ __pthread_cond_broadcast:
 	cfi_startproc
 	pushl	%ebx
 	cfi_adjust_cfa_offset(4)
+	cfi_rel_offset(%ebx, 0)
 	pushl	%esi
 	cfi_adjust_cfa_offset(4)
+	cfi_rel_offset(%esi, 0)
 	pushl	%edi
 	cfi_adjust_cfa_offset(4)
+	cfi_rel_offset(%edi, 0)
 	pushl	%ebp
 	cfi_adjust_cfa_offset(4)
-	cfi_offset(%ebx, -8)
-	cfi_offset(%esi, -12)
-	cfi_offset(%edi, -16)
-	cfi_offset(%ebp, -20)
+	cfi_rel_offset(%ebp, 0)
+	cfi_remember_state
 
 	movl	20(%esp), %ebx
 
@@ -120,7 +121,7 @@ __pthread_cond_broadcast:
 	cmpl	$0xfffff001, %eax
 	jae	9f
 
-10:	xorl	%eax, %eax
+6:	xorl	%eax, %eax
 	popl	%ebp
 	cfi_adjust_cfa_offset(-4)
 	cfi_restore(%ebp)
@@ -135,37 +136,15 @@ __pthread_cond_broadcast:
 	cfi_restore(%ebx)
 	ret
 
-	cfi_adjust_cfa_offset(16)
-	cfi_offset(%ebx, -8)
-	cfi_offset(%esi, -12)
-	cfi_offset(%edi, -16)
-	cfi_offset(%ebp, -20)
+	cfi_restore_state
+
 	.align	16
 	/* Unlock.  */
 4:	LOCK
 	subl	$1, cond_lock-cond_futex(%ebx)
 	jne	5f
+	jmp	6b
 
-6:	xorl	%eax, %eax
-	popl	%ebp
-	cfi_adjust_cfa_offset(-4)
-	cfi_restore(%ebp)
-	popl	%edi
-	cfi_adjust_cfa_offset(-4)
-	cfi_restore(%edi)
-	popl	%esi
-	cfi_adjust_cfa_offset(-4)
-	cfi_restore(%esi)
-	popl	%ebx
-	cfi_adjust_cfa_offset(-4)
-	cfi_restore(%ebx)
-	ret
-
-	cfi_adjust_cfa_offset(16)
-	cfi_offset(%ebx, -8)
-	cfi_offset(%esi, -12)
-	cfi_offset(%edi, -16)
-	cfi_offset(%ebp, -20)
 	/* Initial locking failed.  */
 1:
 #if cond_lock == 0
@@ -232,7 +211,7 @@ __pthread_cond_broadcast:
 	addl	$FUTEX_WAKE, %ecx
 	movl	$SYS_futex, %eax
 	ENTER_KERNEL
-	jmp	10b
+	jmp	6b
 	cfi_endproc
 	.size	__pthread_cond_broadcast, .-__pthread_cond_broadcast
 versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast,
diff -X ignore -Nurp glibc-20091118.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S glibc-20091118.cfi/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
--- glibc-20091118.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S	2009-10-12 00:51:20.000000000 -0400
+++ glibc-20091118.cfi/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S	2009-11-18 04:00:58.000000000 -0500
@@ -36,10 +36,11 @@ __pthread_cond_signal:
 	cfi_startproc
 	pushl	%ebx
 	cfi_adjust_cfa_offset(4)
+	cfi_rel_offset(%ebx, 0)
 	pushl	%edi
 	cfi_adjust_cfa_offset(4)
-	cfi_offset(%ebx, -8)
-	cfi_offset(%edi, -12)
+	cfi_rel_offset(%edi, 0)
+	cfi_remember_state
 
 	movl	12(%esp), %edi
 
@@ -75,10 +76,10 @@ __pthread_cond_signal:
 	/* Wake up one thread.  */
 	pushl	%esi
 	cfi_adjust_cfa_offset(4)
+	cfi_rel_offset(%esi, 0)
 	pushl	%ebp
 	cfi_adjust_cfa_offset(4)
-	cfi_offset(%esi, -16)
-	cfi_offset(%ebp, -20)
+	cfi_rel_offset(%ebp, 0)
 
 #if FUTEX_PRIVATE_FLAG > 255
 	xorl	%ecx, %ecx
@@ -121,9 +122,7 @@ __pthread_cond_signal:
 	cfi_restore(%ebx)
 	ret
 
-	cfi_adjust_cfa_offset(8)
-	cfi_offset(%ebx, -8)
-	cfi_offset(%edi, -12)
+	cfi_restore_state
 
 7:	/* %ecx should be either FUTEX_WAKE_OP or
 	   FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG from the previous syscall.  */


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