[PATCH][SH] CFI directives patch
Chung-Lin Tang
cltang@codesourcery.com
Fri May 4 07:03:00 GMT 2012
Hi Thomas, this patch adds CFI directives to epilogues in the SH port
assembly files.
Some of the cancellation point calls were also modified to now use CFI
assembler directives, instead of hard-coding the information.
Thanks,
Chung-Lin
2012-05-04 Chung-Lin Tang <cltang@codesourcery.com>
* sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
(__swapcontext): Add CFI directives for epilogue.
* sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
(__setcontext): Likewise.
* sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
(__swapcontext): Likewise.
* sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
(__setcontext): Likewise.
* sysdeps/sh/_mcount.S (_mount): Add CFI directives for epilogue.
* sysdeps/unix/sh/sysdep.S (__syscall_error): Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER):
Modify to avoid using r12 register.
* nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
(__lll_robust_lock_wait): Add CFI directives for epilogue.
(__lll_robust_timedlock_wait): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
(__lll_lock_wait_private): Add CFI directives for epilogue.
(__lll_lock_wait): Likewise.
(__lll_timedlock_wait): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
(__new_sem_wait): Modify to use CFI directives.
* nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
(sem_timedwait): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
(__pthread_cond_wait): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
(__pthread_cond_timedwait): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO,
LOAD_ARGS_1,LOAD_ARGS_2,LOAD_ARGS_3,LOAD_ARGS_4): Add CFI restores.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
(pthread_barrier_wait): Add CFI directives.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
(_pthread_cond_signal): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
(__pthread_rwlock_unlock): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
(__pthread_rwlock_wrlock): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S
(__pthread_rwlock_rdlock): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
(pthread_rwlock_timedwrlock): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
(pthread_rwlock_timedrdlock): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
(__pthread_cond_broadcast): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
(__new_sem_post): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
(__new_sem_trywait): Likewise.
-------------- next part --------------
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
index fe4e3b6..40f42cb 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
@@ -165,6 +165,8 @@ __lll_lock_wait_private:
bf 1b
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
rts
mov r2, r0
cfi_endproc
@@ -208,7 +210,11 @@ __lll_lock_wait:
bf 1b
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
ret
mov r2, r0
cfi_endproc
@@ -284,8 +290,12 @@ __lll_timedlock_wait:
3:
mov r3, r0
5:
+ cfi_remember_state
rts
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
+ cfi_restore_state
# ifndef __ASSUME_FUTEX_CLOCK_REALTIME
.align 2
@@ -386,17 +396,31 @@ __lll_timedlock_wait:
2: mov #ETIMEDOUT, r3
6:
+ cfi_remember_state
mov r3, r0
add #8, r15
+ cfi_adjust_cfa_offset (-8)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r11
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r11)
rts
mov.l @r15+, r12
-
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
+ cfi_restore_state
3:
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #EINVAL, r0
# endif
@@ -521,10 +545,17 @@ __lll_timedwait_tid:
4:
mov #0, r0
3:
+ cfi_remember_state
add #8, r15
+ cfi_adjust_cfa_offset (-8)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
rts
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
+ cfi_restore_state
1:
/* Check whether the time expired. */
mov #-ETIMEDOUT, r1
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
index 8b1e006..f562ac9 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S
@@ -115,6 +115,8 @@ __lll_robust_lock_wait:
3:
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
ret
mov r4, r0
cfi_endproc
@@ -231,13 +233,23 @@ __lll_robust_timedlock_wait:
mov #0, r0
6:
+ cfi_remember_state
add #8, r15
+ cfi_adjust_cfa_offset (-8)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
rts
mov.l @r15+, r11
-
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r11)
+ cfi_restore_state
7:
/* Check whether the time expired. */
mov #-ETIMEDOUT, r1
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
index 58a9cde..31ea485 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
@@ -25,10 +25,17 @@
.globl pthread_barrier_wait
.type pthread_barrier_wait,@function
.align 5
+ cfi_startproc
pthread_barrier_wait:
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get the mutex. */
@@ -98,12 +105,19 @@ pthread_barrier_wait:
bf 9f
10:
+ cfi_remember_state
mov #0, r0 /* != PTHREAD_BARRIER_SERIAL_THREAD */
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
rts
mov.l @r15+, r9
-
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
+ cfi_restore_state
3:
/* The necessary number of threads arrived. */
mov.l @(CURR_EVENT,r8), r1
@@ -140,11 +154,19 @@ pthread_barrier_wait:
tst r2, r2
bf 4f
5:
+ cfi_remember_state
mov #-1, r0 /* == PTHREAD_BARRIER_SERIAL_THREAD */
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
rts
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
+ cfi_restore_state
1:
mov.l @(PRIVATE,r8), r6
@@ -200,6 +222,7 @@ pthread_barrier_wait:
.Lwake2b:
bra 10b
mov r9, r6
+ cfi_endproc
.align 2
.Lall:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
index 7bd9355..a22c4ba 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S
@@ -30,11 +30,20 @@
.globl __pthread_cond_broadcast
.type __pthread_cond_broadcast, @function
.align 5
+ cfi_startproc
__pthread_cond_broadcast:
mov.l r10, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r10, 0)
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get internal lock. */
@@ -136,12 +145,22 @@ __pthread_cond_broadcast:
add #cond_futex, r4
10:
+ cfi_remember_state
mov #0, r0
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
rts
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
+ cfi_restore_state
4:
/* Unlock. */
@@ -153,12 +172,22 @@ __pthread_cond_broadcast:
tst r2, r2
bf 5f
6:
+ cfi_remember_state
mov #0, r0
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
rts
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
+ cfi_restore_state
1:
/* Initial locking failed. */
@@ -244,7 +273,8 @@ __pthread_cond_broadcast:
SYSCALL_INST_PAD
bra 10b
nop
-
+ cfi_endproc
+
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
.word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
index 320a3e8..e45c3c6 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S
@@ -29,9 +29,14 @@
.globl __pthread_cond_signal
.type __pthread_cond_signal, @function
.align 5
+ cfi_startproc
__pthread_cond_signal:
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get internal lock. */
@@ -109,10 +114,16 @@ __pthread_cond_signal:
bt 7f
6:
+ cfi_remember_state
mov #0, r0
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
rts
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
@@ -178,6 +189,7 @@ __pthread_cond_signal:
.Lwait4b:
bra 2b
nop
+ cfi_endproc
.align 2
.Lwait4:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
index 3a89f12..5e8bc60 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
@@ -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
@@ -399,15 +416,32 @@ __pthread_cond_timedwait:
mov.l @(24,r15), r0
18:
+ cfi_remember_state
add #64, r15
+ cfi_adjust_cfa_offset (-64)
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r13
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r13)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
mov.l @r15+, r11
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r11)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
rts
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
@@ -724,15 +758,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 +779,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
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
index ba0d993..467a6f9 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S
@@ -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
@@ -269,14 +285,29 @@ __pthread_cond_wait:
/* We return the result of the mutex_lock operation. */
14:
+ cfi_remember_state
add #48, r15
+ cfi_adjust_cfa_offset (-48)
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
mov.l @r15+, r11
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r11)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
rts
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff0:
@@ -623,15 +654,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 +675,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
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S
index ee88089..d700555 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S
@@ -29,11 +29,20 @@
.globl __pthread_rwlock_rdlock
.type __pthread_rwlock_rdlock,@function
.align 5
+ cfi_startproc
__pthread_rwlock_rdlock:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get the lock. */
@@ -134,12 +143,22 @@ __pthread_rwlock_rdlock:
tst r2, r2
bf 6f
7:
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov r3, r0
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
@@ -234,6 +253,7 @@ __pthread_rwlock_rdlock:
.Lwait1b:
bra 13b
nop
+ cfi_endproc
.align 2
.Lwait0:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
index a7c524d..5cbc34c 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
@@ -29,13 +29,25 @@
.globl pthread_rwlock_timedrdlock
.type pthread_rwlock_timedrdlock,@function
.align 5
+ cfi_startproc
pthread_rwlock_timedrdlock:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r10, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r10, 0)
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
add #-8, r15
+ cfi_adjust_cfa_offset (8)
mov r4, r8
mov r5, r9
@@ -183,14 +195,27 @@ pthread_rwlock_timedrdlock:
tst r2, r2
bf 6f
7:
+ cfi_remember_state
add #8,r15
+ cfi_adjust_cfa_offset (-8)
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov r3, r0
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
@@ -300,6 +325,7 @@ pthread_rwlock_timedrdlock:
19:
bra 9b
mov #EINVAL, r3
+ cfi_endproc
.align 2
.Lwait2:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
index 04e2c63..4c31a2c 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
@@ -29,13 +29,25 @@
.globl pthread_rwlock_timedwrlock
.type pthread_rwlock_timedwrlock,@function
.align 5
+ cfi_startproc
pthread_rwlock_timedwrlock:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r10, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r10, 0)
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
add #-8, r15
+ cfi_adjust_cfa_offset (8)
mov r4, r8
mov r5, r9
@@ -181,14 +193,27 @@ pthread_rwlock_timedwrlock:
tst r2, r2
bf 6f
7:
+ cfi_remember_state
add #8,r15
+ cfi_adjust_cfa_offset (-8)
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov r3, r0
+ cfi_restore_state
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
@@ -284,6 +309,7 @@ pthread_rwlock_timedwrlock:
16:
bra 17b
mov #-ETIMEDOUT, r3
+ cfi_endproc
.align 2
.Lwait6:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
index bd0b08a..10afcda 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S
@@ -27,10 +27,17 @@
.globl __pthread_rwlock_unlock
.type __pthread_rwlock_unlock,@function
.align 5
+ cfi_startproc
__pthread_rwlock_unlock:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get the lock. */
@@ -108,11 +115,19 @@ __pthread_rwlock_unlock:
trapa #0x14
SYSCALL_INST_PAD
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #0, r0
+ cfi_restore_state
6:
#if MUTEX == 0
DEC (@r8, r2)
@@ -122,11 +137,19 @@ __pthread_rwlock_unlock:
tst r2, r2
bf 3f
4:
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #0, r0
+ cfi_restore_state
1:
mov r8, r5
@@ -159,7 +182,9 @@ __pthread_rwlock_unlock:
7:
mov.l r4, @-r15
+ cfi_adjust_cfa_offset (4)
mov.l r6, @-r15
+ cfi_adjust_cfa_offset (4)
mov r8, r4
#if MUTEX != 0
add #MUTEX, r4
@@ -173,8 +198,12 @@ __pthread_rwlock_unlock:
.Lwake9b:
mov.l @r15+, r6
+ cfi_adjust_cfa_offset (-4)
bra 8b
mov.l @r15+, r4
+ cfi_adjust_cfa_offset (-4)
+
+ cfi_endproc
#ifndef __ASSUME_PRIVATE_FUTEX
.Lpfoff:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
index b378df6..49ebfd9 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
@@ -29,11 +29,20 @@
.globl __pthread_rwlock_wrlock
.type __pthread_rwlock_wrlock,@function
.align 5
+ cfi_startproc
__pthread_rwlock_wrlock:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r9, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r9, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
/* Get the lock. */
@@ -128,12 +137,22 @@ __pthread_rwlock_wrlock:
tst r2, r2
bf 6f
7:
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov r3, r0
+ cfi_restore_state
1:
mov r8, r5
@@ -217,6 +236,8 @@ __pthread_rwlock_wrlock:
bra 13b
nop
+ cfi_endproc
+
.align 2
.Lwait4:
.long __lll_lock_wait-.Lwait4b
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
index b228a32..887287f 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
@@ -28,6 +28,7 @@
.globl __new_sem_post
.type __new_sem_post,@function
.align 5
+ cfi_startproc
__new_sem_post:
mov.l @(VALUE,r4), r2
0:
@@ -66,8 +67,14 @@ __new_sem_post:
mov #EOVERFLOW, r2
4:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mova .Lgot3, r0
mov.l .Lgot3, r12
add r0, r12
@@ -83,10 +90,17 @@ __new_sem_post:
.Lexit:
mov.l r2, @r0
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #-1, r0
+ cfi_endproc
.align 2
.Lmax:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
index c26e5aa..f8f9de5 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
@@ -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
@@ -155,14 +170,27 @@ sem_timedwait:
mov #0, r0
10:
+ cfi_remember_state
add #8, r15
+ cfi_adjust_cfa_offset (-8)
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
mov.l @r15+, r9
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r9)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
rts
nop
+ cfi_restore_state
3:
neg r0, r0
@@ -220,15 +248,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 +269,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
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
index 35ae9b2..39cd07a 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
@@ -27,10 +27,17 @@
.globl __new_sem_trywait
.type __new_sem_trywait,@function
.align 5
+ cfi_startproc
__new_sem_trywait:
mov.l r12, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r12, 0)
mov.l r8, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (r8, 0)
sts.l pr, @-r15
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (pr, 0)
mov r4, r8
mov.l @r8, r0
2:
@@ -44,11 +51,19 @@ __new_sem_trywait:
bf/s 2b
mov r2, r0
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #0, r0
+ cfi_restore_state
1:
mov #EAGAIN, r8
@@ -67,11 +82,19 @@ __new_sem_trywait:
.Lexit:
mov.l r8, @r0
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
rts
mov #-1, r0
+ cfi_endproc
+
.align 2
.Lgot1:
.long _GLOBAL_OFFSET_TABLE_
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
index a0a109d..80416a5 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
@@ -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
@@ -58,11 +71,21 @@ __new_sem_wait:
7:
mov #0, r0
9:
+ cfi_remember_state
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
mov.l @r15+, r10
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r10)
rts
mov.l @r15+, r8
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r8)
+ cfi_restore_state
.Lafter_ret:
1:
@@ -174,15 +197,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 +218,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
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
index 49d98cd..80a391f 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
@@ -71,6 +71,7 @@
CDISABLE; \
mov.l @r15+,r0; \
cfi_adjust_cfa_offset (-4); \
+ cfi_restore (r0); \
lds.l @r15+,pr; \
cfi_adjust_cfa_offset (-4); \
cfi_restore (pr); \
@@ -97,10 +98,10 @@
# define SAVE_ARGS_6 SAVE_ARGS_5
# define LOAD_ARGS_0 /* Nothing. */
-# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4
-# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5
-# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6
-# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7
+# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)
+# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)
+# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)
+# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)
# define LOAD_ARGS_5 LOAD_ARGS_4
# define LOAD_ARGS_6 LOAD_ARGS_5
diff --git a/sysdeps/sh/_mcount.S b/sysdeps/sh/_mcount.S
index 7956c01..056f9eb 100644
--- a/sysdeps/sh/_mcount.S
+++ b/sysdeps/sh/_mcount.S
@@ -58,11 +58,21 @@ C_LABEL(_mcount)
/* Pop the saved registers. */
lds.l @r15+,pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+,r7
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r7)
mov.l @r15+,r6
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r6)
mov.l @r15+,r5
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r5)
rts
mov.l @r15+,r4
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r4)
.align 2
#ifdef SHARED
diff --git a/sysdeps/unix/sh/sysdep.S b/sysdeps/unix/sh/sysdep.S
index e816575..939eb9a 100644
--- a/sysdeps/unix/sh/sysdep.S
+++ b/sysdeps/unix/sh/sysdep.S
@@ -41,13 +41,15 @@ skip:
sts.l pr, @-r15
cfi_adjust_cfa_offset (4)
cfi_rel_offset (pr, 0)
+ cfi_adjust_cfa_offset (4)
jsr @r1
mov.l r0, @-r15
- cfi_adjust_cfa_offset (4)
+
mov.l @r15+, r1
cfi_adjust_cfa_offset (-4)
lds.l @r15+, pr
cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l r1, @r0
#endif
#else
@@ -77,10 +79,15 @@ skip:
jsr @r1
nop
lds.l @r15+, pr
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (pr)
mov.l @r15+, r1
+ cfi_adjust_cfa_offset (-4)
mov.l r1, @r0
#endif
mov.l @r15+, r12
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r12)
#endif
/* And just kick back a -1. */
rts
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
index abe384e..d746028 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
@@ -90,8 +90,10 @@ ENTRY(__setcontext)
mov.l @(oR7,r0), r7
mov.l @(oR8,r0), r8
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
jmp @r0
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
PSEUDO_END(__setcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
index 92c476e..727ca1e 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
@@ -123,9 +123,11 @@ ENTRY(__swapcontext)
mov.l @(oR7,r0), r7
mov.l @(oR8,r0), r8
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
jmp @r0
mov.l @r15+, r0
-
+ cfi_adjust_cfa_offset(-4)
+
PSEUDO_END(__swapcontext)
weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
index a3c0e21..635e70f 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
@@ -132,8 +132,10 @@ ENTRY(__setcontext)
mov.l @(oR7,r0), r7
mov.l @(oR8,r0), r8
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
jmp @r0
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
PSEUDO_END(__setcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
index 3ff7fe4..ecf9ef5 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
@@ -209,8 +209,10 @@ ENTRY(__swapcontext)
mov.l @(oR7,r0), r7
mov.l @(oR8,r0), r8
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
jmp @r0
mov.l @r15+, r0
+ cfi_adjust_cfa_offset(-4)
PSEUDO_END(__swapcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h
index 5215a84..f5e7524 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.h
@@ -120,14 +120,13 @@
# endif
# define SYSCALL_ERROR_HANDLER \
neg r0,r1; \
- mov r12,r2; \
- mov.l 0f,r12; \
+ mov.l 0f,r2; \
mova 0f,r0; \
- add r0,r12; \
+ add r0,r2; \
mov.l 1f,r0; \
stc gbr, r4; \
- mov.l @(r0,r12),r0; \
- mov r2,r12; \
+ add r0,r2; \
+ mov.l @r2,r0; \
add r4,r0; \
mov.l r1,@r0; \
bra .Lpseudo_end; \
@@ -139,13 +138,12 @@
/* Store (-r0) into errno through the GOT. */
# define SYSCALL_ERROR_HANDLER \
neg r0,r1; \
- mov r12,r2; \
- mov.l 0f,r12; \
+ mov.l 0f,r2; \
mova 0f,r0; \
- add r0,r12; \
+ add r0,r2; \
mov.l 1f,r0; \
- mov.l @(r0,r12),r0; \
- mov r2,r12; \
+ add r0,r2; \
+ mov.l @r2,r0; \
mov.l r1,@r0; \
bra .Lpseudo_end; \
mov _IMM1,r0; \
More information about the Libc-alpha
mailing list