[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