diff options
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index fe4e3b628b..0177209638 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 @@ -286,6 +292,7 @@ __lll_timedlock_wait: 5: rts mov.l @r15+, r12 + /* Omit CFI for restore in delay slot. */ # ifndef __ASSUME_FUTEX_CLOCK_REALTIME .align 2 @@ -306,6 +313,8 @@ __lll_timedlock_wait: cmp/hs r0, r1 bt 3f + cfi_remember_state + mov.l r11, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r11, 0) @@ -386,17 +395,32 @@ __lll_timedlock_wait: 2: mov #ETIMEDOUT, r3 6: - 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) + mov.l @r15+, r12 + cfi_adjust_cfa_offset (-4) + cfi_restore (r12) rts - mov.l @r15+, r12 + mov r3, r0 + + cfi_restore_state 3: mov.l @r15+, r12 + cfi_adjust_cfa_offset (-4) + cfi_restore (r12) rts mov #EINVAL, r0 # endif @@ -521,10 +545,16 @@ __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 + /* Omit CFI for restore in delay slot. */ + cfi_restore_state 1: /* Check whether the time expired. */ mov #-ETIMEDOUT, r1 |