diff options
-rw-r--r-- | nptl/ChangeLog | 9 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S | 27 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S | 15 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S | 6 |
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: |