diff options
5 files changed, 167 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 9066a7c..1a3e32f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,7 +1,8 @@ 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/x86_64/pthread_cond_wait.S: Add unwind info. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. 2003-04-12 Ulrich Drepper <drepper@redhat.com> 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 04db819..cd80099 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 @@ -379,7 +379,9 @@ versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait, .long .LSTARTCODE # Start address of the code. #endif .long .LENDCODE-.LSTARTCODE # Length of the code. +#ifdef SHARED .uleb128 0 # No augmentation data. +#endif .byte 4 # DW_CFA_advance_loc4 .long .Lpush_ebp-.LSTARTCODE .byte 14 # DW_CFA_def_cfa_offset 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 72dcf4d..89bd4a6 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 @@ -348,7 +348,9 @@ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, .long .LSTARTCODE # Start address of the code. #endif .long .LENDCODE-.LSTARTCODE # Length of the code. +#ifdef SHARED .uleb128 0 # No augmentation data. +#endif .byte 4 # DW_CFA_advance_loc4 .long .Lpush_edi-.LSTARTCODE .byte 14 # DW_CFA_def_cfa_offset diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index 7a75e0d..79d8a2a 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -44,10 +44,15 @@ .type __pthread_cond_timedwait, @function .align 16 __pthread_cond_timedwait: +.LSTARTCODE: pushq %r12 +.Lpush_r12: pushq %r13 +.Lpush_r13: pushq %r14 +.Lpush_r14: subq $80, %rsp +.Lsubq: /* Stack frame: rsp + 80 @@ -228,14 +233,19 @@ __pthread_cond_timedwait: cmoveq %r14, %rax 18: addq $80, %rsp +.Laddq: popq %r14 +.Lpop_r14: popq %r13 +.Lpop_r13: popq %r12 +.Lpop_r12: retq /* Initial locking failed. */ 1: +.LSbl1: #if cond_lock != 0 addq $cond_lock, %rdi #endif @@ -311,6 +321,86 @@ __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 -8 # Data alignment factor. + .byte 16 # 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 7 + .uleb128 8 + .byte 0x90 # DW_CFA_offset, column 0x8 + .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 +#else + .long .LSTARTCODE # Start address of the code. +#endif + .long .LENDCODE-.LSTARTCODE # Length of the code. +#ifdef SHARED + .uleb128 0 # No augmentation data. +#endif + .byte 4 # DW_CFA_advance_loc4 + .long .Lpush_r12-.LSTARTCODE + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 16 + .byte 4 # DW_CFA_advance_loc4 + .long .Lpush_r13-.Lpush_r12 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 24 + .byte 4 # DW_CFA_advance_loc4 + .long .Lpush_r14-.Lpush_r13 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 32 + .byte 4 # DW_CFA_advance_loc4 + .long .Lsubq-.Lpush_r14 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 112 + .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 4 # DW_CFA_advance_loc4 + .long .Lpop_r13-.Lpop_r14 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 16 + .byte 4 # DW_CFA_advance_loc4 + .long .Lpop_r12-.Lpop_r13 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 8 + .byte 4 # DW_CFA_advance_loc4 + .long .LSbl1-.Lpop_r12 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 112 + .align 8 +.LENDFDE: diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S index 652ddca..a7fcc8c 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S @@ -100,8 +100,11 @@ __condvar_cleanup: .type __pthread_cond_wait, @function .align 16 __pthread_cond_wait: +.LSTARTCODE: pushq %r12 +.Lpush_r12: subq $64, %rsp +.Lsubq: /* Stack frame: rsp + 64 @@ -220,14 +223,17 @@ __pthread_cond_wait: movq 16(%rsp), %rdi callq __pthread_mutex_lock_internal 14: addq $64, %rsp +.Laddq: popq %r12 +.Lpop_r12: /* We return the result of the mutex_lock operation. */ retq /* Initial locking failed. */ 1: +.LSbl1: #if cond_lock != 0 addq $cond_lock, %rdi #endif @@ -279,6 +285,70 @@ __pthread_cond_wait: 13: movq %r10, %rax 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 -8 # Data alignment factor. + .byte 16 # 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 7 + .uleb128 8 + .byte 0x90 # DW_CFA_offset, column 0x8 + .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 +#else + .long .LSTARTCODE # Start address of the code. +#endif + .long .LENDCODE-.LSTARTCODE # Length of the code. +#ifdef SHARED + .uleb128 0 # No augmentation data. +#endif + .byte 4 # DW_CFA_advance_loc4 + .long .Lpush_r12-.LSTARTCODE + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 16 + .byte 4 # DW_CFA_advance_loc4 + .long .Lsubq-.Lpush_r12 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 80 + .byte 4 # DW_CFA_advance_loc4 + .long .Laddq-.Lsubq + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 16 + .byte 4 # DW_CFA_advance_loc4 + .long .Lpop_r12-.Laddq + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 8 + .byte 4 # DW_CFA_advance_loc4 + .long .LSbl1-.Lpop_r12 + .byte 14 # DW_CFA_def_cfa_offset + .uleb128 80 + .align 8 +.LENDFDE: |