Update.
authorUlrich Drepper <drepper@redhat.com>
Sun, 13 Apr 2003 08:04:46 +0000 (08:04 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 13 Apr 2003 08:04:46 +0000 (08:04 +0000)
2003-04-13  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Add
unwind info.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.

* Makefile: Make sure all cancellation points are compiled with
exception and asynchronous unwind tables.

nptl/ChangeLog
nptl/Makefile
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S

index d6aa004..9066a7c 100644 (file)
@@ -1,5 +1,14 @@
+2003-04-13  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Add
+       unwind info.
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
+
 2003-04-12  Ulrich Drepper  <drepper@redhat.com>
 
+       * Makefile: Make sure all cancellation points are compiled with
+       exception and asynchronous unwind tables.
+
        * sysdeps/x86_64/tls.h (THREAD_SETMEM): Word around compiler bug
        which mishandles loading of global object addresses in PIC.
        (THREAD_SETMEM_NC): Likewise.
index 79d28c9..4de004a 100644 (file)
@@ -125,6 +125,11 @@ libpthread-nonshared = pthread_atfork
 CFLAGS-pthread_atfork.c = -DNOT_IN_libc
 CFLAGS-init.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-unwind.c = -fexceptions
+CFLAGS-pthread_testcancel.c = -fexceptions
+CFLAGS-pthread_join.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-pthread_timedjoin.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-pthread_cond_wait.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-pthread_cond_timedwait.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-cancellation.c = -fasynchronous-unwind-tables
 CFLAGS-libc-cancellation.c = -fasynchronous-unwind-tables
 
index dc77ee7..04db819 100644 (file)
        .type   __pthread_cond_timedwait, @function
        .align  16
 __pthread_cond_timedwait:
-
+.LSTARTCODE:
        pushl   %ebp
+.Lpush_ebp:
        pushl   %edi
+.Lpush_edi:
        pushl   %esi
+.Lpush_esi:
        pushl   %ebx
+.Lpush_ebx:
 
        movl    20(%esp), %ebx
        movl    28(%esp), %ebp
@@ -64,6 +68,7 @@ __pthread_cond_timedwait:
 
        /* Unlock the mutex.  */
 2:     pushl   24(%esp)
+.Lpush4:
        call    __pthread_mutex_unlock_internal
 
        testl   %eax, %eax
@@ -81,6 +86,7 @@ __pthread_cond_timedwait:
        leal    __condvar_cleanup, %eax
 #endif
        subl    $40, %esp
+.Lsubl:
        leal    28(%esp), %edx
        movl    %esp, 8(%esp)
        movl    %eax, 4(%esp)
@@ -226,20 +232,26 @@ __pthread_cond_timedwait:
        /* Trick ahead:  (%esp) contains the address of the mutex.  */
        call    __pthread_mutex_lock_internal
        addl    $44, %esp
+.Laddl:
 
        /* We return the result of the mutex_lock operation if it failed.  */
        testl   %eax, %eax
        cmovel  %esi, %eax
 
 18:    popl    %ebx
+.Lpop_ebx:
        popl    %esi
+.Lpop_esi:
        popl    %edi
+.Lpop_edi:
        popl    %ebp
+.Lpop_ebp:
 
        ret
 
        /* Initial locking failed.  */
 1:
+.LSbl1:
 #if cond_lock == 0
        movl    %ebx, %ecx
 #else
@@ -250,6 +262,7 @@ __pthread_cond_timedwait:
 
        /* Unlock in loop requires waekup.  */
 3:
+.LSbl2:
 #if cond_lock == 0
        movl    %ebx, %eax
 #else
@@ -279,7 +292,9 @@ __pthread_cond_timedwait:
        jmp     11b
 
        /* The initial unlocking of the mutex failed.  */
-16:    movl    %eax, (%esp)
+16:
+.LSbl3:
+       movl    %eax, (%esp)
        LOCK
 #if cond_lock == 0
        subl    $1, (%ebx)
@@ -300,6 +315,7 @@ __pthread_cond_timedwait:
 
 #if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
        /* clock_gettime not available.  */
+.LSbl4:
 19:    leal    12(%esp), %ebx
        xorl    %ecx, %ecx
        movl    $SYS_gettimeofday, %eax
@@ -321,6 +337,110 @@ __pthread_cond_timedwait:
        js      13b
        jmp     21b
 #endif
+.LENDCODE:
        .size   __pthread_cond_timedwait, .-__pthread_cond_timedwait
 versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
                  GLIBC_2_3_2)
+
+
+       .section .eh_frame,"a",@progbits
+.LSTARTFRAME:
+       .long   L(ENDCIE)-L(STARTCIE)   # Length of the CIE.
+.LSTARTCIE:
+       .long   0                       # CIE ID.
+       .byte   1                       # Version number.
+#ifdef SHARED
+       .string "zR"                    # NUL-terminated augmentation string.
+#else
+       .ascii  "\0"                    # NUL-terminated augmentation string.
+#endif
+       .uleb128 1                      # Code alignment factor.
+       .sleb128 -4                     # Data alignment factor.
+       .byte   8                       # Return address register column.
+#ifdef SHARED
+       .uleb128 1                      # Augmentation value length.
+       .byte   0x1b                    # Encoding: DW_EH_PE_pcrel
+                                       # + DW_EH_PE_sdata4.
+#endif
+       .byte 0x0c                      # DW_CFA_def_cfa
+       .uleb128 4
+       .uleb128 4
+       .byte   0x88                    # DW_CFA_offset, column 0x8
+       .uleb128 1
+       .align 4
+.LENDCIE:
+
+       .long   .LENDFDE-.LSTARTFDE     # Length of the FDE.
+.LSTARTFDE:
+       .long   .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+#ifdef SHARED
+       .long   .LSTARTCODE-.           # PC-relative start address of the code
+#else
+       .long   .LSTARTCODE             # Start address of the code.
+#endif
+       .long   .LENDCODE-.LSTARTCODE   # Length of the code.
+       .uleb128 0                      # No augmentation data.
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_ebp-.LSTARTCODE
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 8
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_edi-.Lpush_ebp
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 12
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_esi-.Lpush_edi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 16
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_ebx-.Lpush_esi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 20
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush4-.Lpush_ebx
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 24
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lsubl-.Lpush4
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 64
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Laddl-.Lsubl
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 20
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_ebx-.Laddl
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 16
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_esi-.Lpop_ebx
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 12
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_edi-.Lpop_esi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 8
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_ebp-.Lpop_edi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 4
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl1-.Lpop_edi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 20
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl2-.LSbl1
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 64
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl3-.LSbl2
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 24
+#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl4-.LSbl3
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 64
+#endif
+       .align  4
+.LENDFDE:
index 47bdf94..72dcf4d 100644 (file)
@@ -102,10 +102,14 @@ __condvar_cleanup:
        .type   __pthread_cond_wait, @function
        .align  16
 __pthread_cond_wait:
+.LSTARTCODE:
 
        pushl   %edi
+.Lpush_edi:
        pushl   %esi
+.Lpush_esi:
        pushl   %ebx
+.Lpush_ebx:
 
        xorl    %esi, %esi
        movl    16(%esp), %ebx
@@ -123,6 +127,7 @@ __pthread_cond_wait:
 
        /* Unlock the mutex.  */
 2:     pushl   20(%esp)
+.Lpush4:
        call    __pthread_mutex_unlock_internal
 
        testl   %eax, %eax
@@ -140,6 +145,7 @@ __pthread_cond_wait:
        leal    __condvar_cleanup, %eax
 #endif
        subl    $32, %esp
+.Lsubl:
        leal    20(%esp), %edx
        movl    %esp, 8(%esp)
        movl    %eax, 4(%esp)
@@ -225,16 +231,21 @@ __pthread_cond_wait:
        /* Trick ahead:  (%esp) contains the address of the mutex.  */
        call    __pthread_mutex_lock_internal
        addl    $36, %esp
+.Laddl:
 
 14:    popl    %ebx
+.Lpop_ebx:
        popl    %esi
+.Lpop_esi:
        popl    %edi
+.Lpop_edi:
 
        /* We return the result of the mutex_lock operation.  */
        ret
 
        /* Initial locking failed.  */
 1:
+.LSbl1:
 #if cond_lock == 0
        movl    %ebx, %ecx
 #else
@@ -245,6 +256,7 @@ __pthread_cond_wait:
 
        /* Unlock in loop requires waekup.  */
 3:
+.LSbl2:
 #if cond_lock == 0
        movl    %ebx, %eax
 #else
@@ -274,7 +286,9 @@ __pthread_cond_wait:
        jmp     11b
 
        /* The initial unlocking of the mutex failed.  */
-12:    movl    %eax, (%esp)
+12:
+.LSbl3:
+       movl    %eax, (%esp)
        LOCK
 #if cond_lock == 0
        subl    $1, (%ebx)
@@ -292,11 +306,101 @@ __pthread_cond_wait:
 
 13:    popl    %eax
        jmp     14b
+.LENDCODE:
        .size   __pthread_cond_wait, .-__pthread_cond_wait
 versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
                  GLIBC_2_3_2)
 
 
+       .section .eh_frame,"a",@progbits
+.LSTARTFRAME:
+       .long   L(ENDCIE)-L(STARTCIE)   # Length of the CIE.
+.LSTARTCIE:
+       .long   0                       # CIE ID.
+       .byte   1                       # Version number.
+#ifdef SHARED
+       .string "zR"                    # NUL-terminated augmentation string.
+#else
+       .ascii  "\0"                    # NUL-terminated augmentation string.
+#endif
+       .uleb128 1                      # Code alignment factor.
+       .sleb128 -4                     # Data alignment factor.
+       .byte   8                       # Return address register column.
+#ifdef SHARED
+       .uleb128 1                      # Augmentation value length.
+       .byte   0x1b                    # Encoding: DW_EH_PE_pcrel
+                                       # + DW_EH_PE_sdata4.
+#endif
+       .byte 0x0c                      # DW_CFA_def_cfa
+       .uleb128 4
+       .uleb128 4
+       .byte   0x88                    # DW_CFA_offset, column 0x8
+       .uleb128 1
+       .align 4
+.LENDCIE:
+
+       .long   .LENDFDE-.LSTARTFDE     # Length of the FDE.
+.LSTARTFDE:
+       .long   .LSTARTFDE-.LSTARTFRAME # CIE pointer.
+#ifdef SHARED
+       .long   .LSTARTCODE-.           # PC-relative start address of the code
+#else
+       .long   .LSTARTCODE             # Start address of the code.
+#endif
+       .long   .LENDCODE-.LSTARTCODE   # Length of the code.
+       .uleb128 0                      # No augmentation data.
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_edi-.LSTARTCODE
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 8
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_esi-.Lpush_edi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 12
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush_ebx-.Lpush_esi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 16
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpush4-.Lpush_ebx
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 20
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lsubl-.Lpush4
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 52
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Laddl-.Lsubl
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 16
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_ebx-.Laddl
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 12
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_esi-.Lpop_ebx
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 8
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .Lpop_edi-.Lpop_esi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 4
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl1-.Lpop_edi
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 16
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl2-.LSbl1
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 52
+       .byte   4                       # DW_CFA_advance_loc4
+       .long   .LSbl3-.LSbl2
+       .byte   14                      # DW_CFA_def_cfa_offset
+       .uleb128 20
+       .align  4
+.LENDFDE:
+
+
 #ifdef PIC
        .section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
        .globl  __i686.get_pc_thunk.cx