aboutsummaryrefslogtreecommitdiff
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: