Use CFI statements instead of hand-coding .eh_frame.

This commit is contained in:
Chung-Lin Tang 2012-05-09 17:48:42 +08:00 committed by Thomas Schwinge
parent b9f1922d7e
commit e1b4354e66
5 changed files with 112 additions and 422 deletions

View File

@ -1,3 +1,12 @@
2012-05-09 Chung-Lin Tang <cltang@codesourcery.com>
* sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
(__pthread_cond_timedwait): Use CFI directives.
* sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
(__pthread_cond_wait): Likewise.
* sysdeps/unix/sysv/linux/sh/sem_timedwait.S (sem_timedwait): Likewise.
* sysdeps/unix/sysv/linux/sh/sem_wait.S (__new_sem_wait): Likewise.
2012-05-03 David S. Miller <davem@davemloft.net>
* sysdeps/sparc/sparc64/pthread_spin_unlock.S: Fix thinko, we

View File

@ -31,24 +31,41 @@
.globl __pthread_cond_timedwait
.type __pthread_cond_timedwait, @function
.align 5
cfi_startproc
__pthread_cond_timedwait:
.LSTARTCODE:
#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_absptr, __gcc_personality_v0)
cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
#endif
mov.l r8, @-r15
.Lpush_r8:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r8, 0)
mov.l r9, @-r15
.Lpush_r9:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r9, 0)
mov.l r10, @-r15
.Lpush_r10:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
mov.l r11, @-r15
.Lpush_r11:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r11, 0)
mov.l r12, @-r15
.Lpush_r12:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r12, 0)
mov.l r13, @-r15
.Lpush_r13:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r13, 0)
sts.l pr, @-r15
.Lpush_pr:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (pr, 0)
add #-64, r15
.Lalloc:
cfi_adjust_cfa_offset (64)
mov r4, r8
mov r5, r9
mov r6, r13
@ -724,15 +741,15 @@ __condvar_tw_cleanup:
.long _Unwind_Resume
#endif
.LENDCODE:
cfi_endproc
.size __condvar_tw_cleanup, .-__condvar_tw_cleanup
.section .gcc_except_table,"a",@progbits
.LexceptSTART:
.byte 0xff ! @LPStart format (omit)
.byte 0xff ! @TType format (omit)
.byte 0x0b ! call-site format
! DW_EH_PE_sdata4
.byte DW_EH_PE_omit ! @LPStart format (omit)
.byte DW_EH_PE_omit ! @TType format (omit)
.byte DW_EH_PE_sdata4 ! call-site format
.uleb128 .Lcstend-.Lcstbegin
.Lcstbegin:
.ualong .LcleanupSTART-.LSTARTCODE
@ -745,109 +762,6 @@ __condvar_tw_cleanup:
.uleb128 0
.Lcstend:
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
.ualong .LENDCIE-.LSTARTCIE ! Length of the CIE.
.LSTARTCIE:
.ualong 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 -4 ! Data alignment factor.
.byte 0x11 ! 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
.ualong 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 6 ! Augmentation value length.
.byte 0x0 ! Personality: absolute
.ualong __gcc_personality_v0
.byte 0x0 ! LSDA Encoding: absolute
#endif
.byte 0x0c ! DW_CFA_def_cfa
.uleb128 0xf
.uleb128 0
.align 2
.LENDCIE:
.ualong .LENDFDE-.LSTARTFDE ! Length of the FDE.
.LSTARTFDE:
.ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer.
#ifdef SHARED
.ualong .LSTARTCODE-. ! PC-relative start address
! of the code.
#else
.ualong .LSTARTCODE ! Start address of the code.
#endif
.ualong .LENDCODE-.LSTARTCODE ! Length of the code.
.uleb128 4 ! Augmentation size
#ifdef SHARED
.ualong .LexceptSTART-.
#else
.ualong .LexceptSTART
#endif
.byte 0x4
.ualong .Lpush_r8-.LSTARTCODE
.byte 0xe
.uleb128 4
.byte 0x88
.uleb128 1
.byte 0x4
.ualong .Lpush_r9-.Lpush_r8
.byte 0xe
.uleb128 8
.byte 0x89
.uleb128 2
.byte 0x4
.ualong .Lpush_r10-.Lpush_r9
.byte 0xe
.uleb128 12
.byte 0x8a
.uleb128 3
.byte 0x4
.ualong .Lpush_r11-.Lpush_r10
.byte 0xe
.uleb128 16
.byte 0x8b
.uleb128 4
.byte 0x4
.ualong .Lpush_r12-.Lpush_r11
.byte 0xe
.uleb128 20
.byte 0x8c
.uleb128 5
.byte 0x4
.ualong .Lpush_r13-.Lpush_r12
.byte 0xe
.uleb128 24
.byte 0x8d
.uleb128 6
.byte 0x4
.ualong .Lpush_pr-.Lpush_r13
.byte 0xe
.uleb128 28
.byte 0x91
.uleb128 7
.byte 0x4
.ualong .Lalloc-.Lpush_pr
.byte 0xe
.uleb128 92
.align 2
.LENDFDE:
#ifdef SHARED
.hidden DW.ref.__gcc_personality_v0

View File

@ -29,22 +29,38 @@
.globl __pthread_cond_wait
.type __pthread_cond_wait, @function
.align 5
cfi_startproc
__pthread_cond_wait:
.LSTARTCODE:
#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_absptr, __gcc_personality_v0)
cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
#endif
mov.l r8, @-r15
.Lpush_r8:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r8, 0)
mov.l r9, @-r15
.Lpush_r9:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r9, 0)
mov.l r10, @-r15
.Lpush_r10:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
mov.l r11, @-r15
.Lpush_r11:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r11, 0)
mov.l r12, @-r15
.Lpush_r12:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r12, 0)
sts.l pr, @-r15
.Lpush_pr:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (pr, 0)
add #-48, r15
.Lalloc:
cfi_adjust_cfa_offset (48)
mov r4, r8
mov r5, r9
#ifdef PIC
@ -623,15 +639,15 @@ __condvar_w_cleanup:
.long _Unwind_Resume
#endif
.LENDCODE:
cfi_endproc
.size __condvar_w_cleanup, .-__condvar_w_cleanup
.section .gcc_except_table,"a",@progbits
.LexceptSTART:
.byte 0xff ! @LPStart format (omit)
.byte 0xff ! @TType format (omit)
.byte 0x0b ! call-site format
! DW_EH_PE_sdata4
.byte DW_EH_PE_omit ! @LPStart format (omit)
.byte DW_EH_PE_omit ! @TType format (omit)
.byte DW_EH_PE_sdata4 ! call-site format
.uleb128 .Lcstend-.Lcstbegin
.Lcstbegin:
.ualong .LcleanupSTART-.LSTARTCODE
@ -644,103 +660,6 @@ __condvar_w_cleanup:
.uleb128 0
.Lcstend:
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
.ualong .LENDCIE-.LSTARTCIE ! Length of the CIE.
.LSTARTCIE:
.ualong 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 -4 ! Data alignment factor.
.byte 0x11 ! 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
.ualong 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 6 ! Augmentation value length.
.byte 0x0 ! Personality: absolute
.ualong __gcc_personality_v0
.byte 0x0 ! LSDA Encoding: absolute
#endif
.byte 0x0c ! DW_CFA_def_cfa
.uleb128 0xf
.uleb128 0
.align 2
.LENDCIE:
.ualong .LENDFDE-.LSTARTFDE ! Length of the FDE.
.LSTARTFDE:
.ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer.
#ifdef SHARED
.ualong .LSTARTCODE-. ! PC-relative start address
! of the code.
#else
.ualong .LSTARTCODE ! Start address of the code.
#endif
.ualong .LENDCODE-.LSTARTCODE ! Length of the code.
.uleb128 4 ! Augmentation size
#ifdef SHARED
.ualong .LexceptSTART-.
#else
.ualong .LexceptSTART
#endif
.byte 0x4
.ualong .Lpush_r8-.LSTARTCODE
.byte 0xe
.uleb128 4
.byte 0x88
.uleb128 1
.byte 0x4
.ualong .Lpush_r9-.Lpush_r8
.byte 0xe
.uleb128 8
.byte 0x89
.uleb128 2
.byte 0x4
.ualong .Lpush_r10-.Lpush_r9
.byte 0xe
.uleb128 12
.byte 0x8a
.uleb128 3
.byte 0x4
.ualong .Lpush_r11-.Lpush_r10
.byte 0xe
.uleb128 16
.byte 0x8b
.uleb128 4
.byte 0x4
.ualong .Lpush_r12-.Lpush_r11
.byte 0xe
.uleb128 20
.byte 0x8c
.uleb128 5
.byte 0x4
.ualong .Lpush_pr-.Lpush_r12
.byte 0xe
.uleb128 24
.byte 0x91
.uleb128 6
.byte 0x4
.ualong .Lalloc-.Lpush_pr
.byte 0xe
.uleb128 72
.align 2
.LENDFDE:
#ifdef SHARED
.hidden DW.ref.__gcc_personality_v0

View File

@ -33,8 +33,17 @@
.globl sem_timedwait
.type sem_timedwait,@function
.align 5
cfi_startproc
sem_timedwait:
.LSTARTCODE:
#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_absptr, __gcc_personality_v0)
cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
#endif
mov.l @r4, r0
2:
tst r0, r0
@ -51,17 +60,23 @@ sem_timedwait:
1:
/* Check whether the timeout value is valid. */
mov.l r8, @-r15
.Lpush_r8:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r8, 0)
mov.l r9, @-r15
.Lpush_r9:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r9, 0)
mov.l r10, @-r15
.Lpush_r10:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
mov.l r12, @-r15
.Lpush_r12:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r12, 0)
sts.l pr, @-r15
.Lpush_pr:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (pr, 0)
add #-8, r15
.Lalloc:
cfi_adjust_cfa_offset (8)
mov r4, r8
mov r5, r9
@ -220,15 +235,15 @@ sem_wait_cleanup:
.long _Unwind_Resume
#endif
.LENDCODE:
cfi_endproc
.size sem_wait_cleanup,.-sem_wait_cleanup
.section .gcc_except_table,"a",@progbits
.LexceptSTART:
.byte 0xff ! @LPStart format (omit)
.byte 0xff ! @TType format (omit)
.byte 0x01 ! call-site format
! DW_EH_PE_uleb128
.byte DW_EH_PE_omit ! @LPStart format (omit)
.byte DW_EH_PE_omit ! @TType format (omit)
.byte DW_EH_PE_uleb128 ! call-site format
.uleb128 .Lcstend-.Lcstbegin
.Lcstbegin:
.uleb128 .LcleanupSTART-.LSTARTCODE
@ -241,101 +256,6 @@ sem_wait_cleanup:
.uleb128 0
.Lcstend:
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
.ualong .LENDCIE-.LSTARTCIE ! Length of the CIE.
.LSTARTCIE:
.ualong 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 -4 ! Data alignment factor.
.byte 0x11 ! 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
.ualong 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 6 ! Augmentation value length.
.byte 0x0 ! Personality: absolute
.ualong __gcc_personality_v0
.byte 0x0 ! LSDA Encoding: absolute
#endif
.byte 0x0c ! DW_CFA_def_cfa
.uleb128 0xf
.uleb128 0
.align 4
.LENDCIE:
.ualong .LENDFDE-.LSTARTFDE ! Length of the FDE.
.LSTARTFDE:
.ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer.
#ifdef SHARED
.ualong .LSTARTCODE-. ! PC-relative start address
! of the code.
#else
.ualong .LSTARTCODE ! Start address of the code.
#endif
.ualong .LENDCODE-.LSTARTCODE ! Length of the code.
.uleb128 4 ! Augmentation size
#ifdef SHARED
.ualong .LexceptSTART-.
#else
.ualong .LexceptSTART
#endif
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r8-.LSTARTCODE
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 4
.byte 0x88 ! DW_CFA_offset r8
.uleb128 1
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r9-.Lpush_r8
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 8
.byte 0x89 ! DW_CFA_offset r9
.uleb128 2
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r10-.Lpush_r9
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 12
.byte 0x8a ! DW_CFA_offset r10
.uleb128 3
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r12-.Lpush_r10
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 16
.byte 0x8c ! DW_CFA_offset r12
.uleb128 4
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_pr-.Lpush_r12
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 20
.byte 0x91 ! DW_CFA_offset pr
.uleb128 5
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lalloc-.Lpush_pr
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 28
.align 4
.LENDFDE:
#ifdef SHARED
.hidden DW.ref.__gcc_personality_v0
.weak DW.ref.__gcc_personality_v0

View File

@ -33,18 +33,31 @@
.globl __new_sem_wait
.type __new_sem_wait,@function
.align 5
cfi_startproc
__new_sem_wait:
.LSTARTCODE:
#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_absptr, __gcc_personality_v0)
cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
#endif
mov.l r8, @-r15
.Lpush_r8:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r8, 0)
mov.l r10, @-r15
.Lpush_r10:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
mov.l r12, @-r15
.Lpush_r12:
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r12, 0)
sts.l pr, @-r15
.Lpush_pr:
mov r4, r8
cfi_adjust_cfa_offset (4)
cfi_rel_offset (pr, 0)
mov r4, r8
mov.l @r8, r0
2:
tst r0, r0
@ -174,15 +187,15 @@ sem_wait_cleanup:
.long _Unwind_Resume
#endif
.LENDCODE:
cfi_endproc
.size sem_wait_cleanup,.-sem_wait_cleanup
.section .gcc_except_table,"a",@progbits
.LexceptSTART:
.byte 0xff ! @LPStart format (omit)
.byte 0xff ! @TType format (omit)
.byte 0x01 ! call-site format
! DW_EH_PE_uleb128
.byte DW_EH_PE_omit ! @LPStart format (omit)
.byte DW_EH_PE_omit ! @TType format (omit)
.byte DW_EH_PE_uleb128 ! call-site format
.uleb128 .Lcstend-.Lcstbegin
.Lcstbegin:
.uleb128 .LcleanupSTART-.LSTARTCODE
@ -195,91 +208,6 @@ sem_wait_cleanup:
.uleb128 0
.Lcstend:
.section .eh_frame,"a",@progbits
.LSTARTFRAME:
.ualong .LENDCIE-.LSTARTCIE ! Length of the CIE.
.LSTARTCIE:
.ualong 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 -4 ! Data alignment factor.
.byte 0x11 ! 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
.ualong 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 6 ! Augmentation value length.
.byte 0x0 ! Personality: absolute
.ualong __gcc_personality_v0
.byte 0x0 ! LSDA Encoding: absolute
#endif
.byte 0x0c ! DW_CFA_def_cfa
.uleb128 0xf
.uleb128 0
.align 4
.LENDCIE:
.ualong .LENDFDE-.LSTARTFDE ! Length of the FDE.
.LSTARTFDE:
.ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer.
#ifdef SHARED
.ualong .LSTARTCODE-. ! PC-relative start address
! of the code.
#else
.ualong .LSTARTCODE ! Start address of the code.
#endif
.ualong .LENDCODE-.LSTARTCODE ! Length of the code.
.uleb128 4 ! Augmentation size
#ifdef SHARED
.ualong .LexceptSTART-.
#else
.ualong .LexceptSTART
#endif
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r8-.LSTARTCODE
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 4
.byte 0x88 ! DW_CFA_offset r8
.uleb128 1
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r10-.Lpush_r8
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 8
.byte 0x8a ! DW_CFA_offset r10
.uleb128 2
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_r12-.Lpush_r10
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 12
.byte 0x8c ! DW_CFA_offset r12
.uleb128 3
.byte 4 ! DW_CFA_advance_loc4
.ualong .Lpush_pr-.Lpush_r12
.byte 14 ! DW_CFA_def_cfa_offset
.uleb128 16
.byte 0x91 ! DW_CFA_offset pr
.uleb128 4
.align 4
.LENDFDE:
#ifdef SHARED
.hidden DW.ref.__gcc_personality_v0
.weak DW.ref.__gcc_personality_v0