Replace hand-coded unwind tables from x86-64 sem_timedwait.
authorUlrich Drepper <drepper@redhat.com>
Fri, 17 Jul 2009 23:26:06 +0000 (16:26 -0700)
committerUlrich Drepper <drepper@redhat.com>
Fri, 17 Jul 2009 23:26:06 +0000 (16:26 -0700)
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S

index 5db47a1..867493c 100644 (file)
@@ -9,6 +9,8 @@
        * sysdeps/unix/sysv/linux/x86_64/pthread_once.S (__pthread_once):
        Likewise.
        * sysdeps/unix/sysv/linux/x86_64/sem_wait.S (sem_wait): Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait):
+       Likewise.
 
 2009-06-12  Ulrich Drepper  <drepper@redhat.com>
 
index 88e99cf..7d66d49 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
        .align  16
 sem_timedwait:
 .LSTARTCODE:
+       cfi_startproc
+#ifdef SHARED
+       cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+                       DW.ref.__gcc_personality_v0)
+       cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+#else
+       cfi_personality(DW_EH_PE_udata4, __gcc_personality_v0)
+       cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
+#endif
 #if VALUE == 0
        movl    (%rdi), %eax
 #else
@@ -56,13 +65,16 @@ sem_timedwait:
 
        /* Check whether the timeout value is valid.  */
 1:     pushq   %r12
-.Lpush_r12:
+       cfi_adjust_cfa_offset(8)
+       cfi_rel_offset(%r12, 0)
        pushq   %r13
-.Lpush_r13:
+       cfi_adjust_cfa_offset(8)
+       cfi_rel_offset(%r13, 0)
        pushq   %r14
-.Lpush_r14:
+       cfi_adjust_cfa_offset(8)
+       cfi_rel_offset(%r14, 0)
        subq    $24, %rsp
-.Lsubq:
+       cfi_adjust_cfa_offset(24)
 
        movq    %rdi, %r12
        movq    %rsi, %r13
@@ -152,16 +164,22 @@ sem_timedwait:
        subq    $1, NWAITERS(%r12)
 
        addq    $24, %rsp
-.Laddq:
+       cfi_adjust_cfa_offset(-24)
        popq    %r14
-.Lpop_r14:
+       cfi_adjust_cfa_offset(-8)
+       cfi_restore(%r14)
        popq    %r13
-.Lpop_r13:
+       cfi_adjust_cfa_offset(-8)
+       cfi_restore(%r13)
        popq    %r12
-.Lpop_r12:
+       cfi_adjust_cfa_offset(-8)
+       cfi_restore(%r12)
        retq
 
-.Lafter_retq:
+       cfi_adjust_cfa_offset(3 * 8 + 24)
+       cfi_rel_offset(%r12, 24 + 2 * 8)
+       cfi_rel_offset(%r13, 24 + 1 * 8)
+       cfi_rel_offset(%r14, 24)
 3:     negq    %r14
 6:
 #if USE___THREAD
@@ -186,6 +204,7 @@ sem_timedwait_cleanup:
        call    _Unwind_Resume@PLT
        hlt
 .LENDCODE:
+       cfi_endproc
        .size   sem_timedwait_cleanup,.-sem_timedwait_cleanup
 
 
@@ -208,118 +227,6 @@ sem_timedwait_cleanup:
 .Lcstend:
 
 
-       .section .eh_frame,"a",@progbits
-.LSTARTFRAME:
-       .long   .LENDCIE-.LSTARTCIE             # Length of the CIE.
-.LSTARTCIE:
-       .long   0                               # CIE ID.
-       .byte   1                               # Version number.
-#ifdef SHARED
-       .string "zPLR"                          # NUL-terminated augmentation
-                                               # string.
-#else
-       .string "zPL"                           # NUL-terminated augmentation
-                                               # string.
-#endif
-       .uleb128 1                              # Code alignment factor.
-       .sleb128 -8                             # Data alignment factor.
-       .byte   16                              # Return address register
-                                               # column.
-#ifdef SHARED
-       .uleb128 7                              # Augmentation value length.
-       .byte   0x9b                            # Personality: DW_EH_PE_pcrel
-                                               # + DW_EH_PE_sdata4
-                                               # + DW_EH_PE_indirect
-       .long   DW.ref.__gcc_personality_v0-.
-       .byte   0x1b                            # LSDA Encoding: DW_EH_PE_pcrel
-                                               # + DW_EH_PE_sdata4.
-       .byte   0x1b                            # FDE Encoding: DW_EH_PE_pcrel
-                                               # + DW_EH_PE_sdata4.
-#else
-       .uleb128 10                             # Augmentation value length.
-       .byte   0x0                             # Personality: absolute
-       .quad   __gcc_personality_v0
-       .byte   0x0                             # LSDA Encoding: absolute
-#endif
-       .byte 0x0c                              # DW_CFA_def_cfa
-       .uleb128 7
-       .uleb128 8
-       .byte   0x90                            # DW_CFA_offset, column 0x10
-       .uleb128 1
-       .align 8
-.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.
-       .long   .LENDCODE-.LSTARTCODE           # Length of the code.
-       .uleb128 4                              # Augmentation size
-       .long   .LexceptSTART-.
-#else
-       .quad   .LSTARTCODE                     # Start address of the code.
-       .quad   .LENDCODE-.LSTARTCODE           # Length of the code.
-       .uleb128 8                              # Augmentation size
-       .quad   .LexceptSTART
-#endif
-
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpush_r12-.LSTARTCODE
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 16
-       .byte   0x8c                            # DW_CFA_offset %r12
-        .uleb128 2
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpush_r13-.Lpush_r12
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 24
-       .byte   0x8d                            # DW_CFA_offset %r13
-        .uleb128 3
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpush_r14-.Lpush_r13
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 32
-       .byte   0x8e                            # DW_CFA_offset %r14
-        .uleb128 4
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lsubq-.Lpush_r14
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 56
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Laddq-.Lsubq
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 32
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpop_r14-.Laddq
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 24
-       .byte   0xce                            # DW_CFA_restore %r14
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpop_r13-.Lpop_r14
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 16
-       .byte   0xcd                            # DW_CFA_restore %r13
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lpop_r12-.Lpop_r13
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 8
-       .byte   0xcc                            # DW_CFA_restore %r12
-       .byte   4                               # DW_CFA_advance_loc4
-       .long   .Lafter_retq-.Lpop_r12
-       .byte   14                              # DW_CFA_def_cfa_offset
-       .uleb128 56
-       .byte   0x8c                            # DW_CFA_offset %r12
-        .uleb128 2
-       .byte   0x8d                            # DW_CFA_offset %r13
-        .uleb128 3
-       .byte   0x8e                            # DW_CFA_offset %r14
-        .uleb128 4
-       .align  8
-.LENDFDE:
-
-
 #ifdef SHARED
        .hidden DW.ref.__gcc_personality_v0
        .weak   DW.ref.__gcc_personality_v0