diff options
| author | Chung-Lin Tang <cltang@codesourcery.com> | 2012-05-28 00:06:57 +0200 |
|---|---|---|
| committer | Thomas Schwinge <thomas@codesourcery.com> | 2012-05-28 00:11:06 +0200 |
| commit | 65a4de4e06709264e7e06152cd88aaec1f03fd11 (patch) | |
| tree | 85fadd93664635e1884e1b1ceaa7de63f17e0ab3 | |
| parent | 47e452cf7c13529f168ff2a415107d1c8e9af9c2 (diff) | |
| download | glibc-65a4de4e06709264e7e06152cd88aaec1f03fd11.tar.xz glibc-65a4de4e06709264e7e06152cd88aaec1f03fd11.zip | |
SH: Add CFI directives.
24 files changed, 420 insertions, 33 deletions
@@ -1,3 +1,14 @@ +2012-05-27 Chung-Lin Tang <cltang@codesourcery.com> + + * sysdeps/sh/_mcount.S (_mount): Add CFI directives. + * sysdeps/unix/sh/sysdep.S (__syscall_error): Likewise. + * sysdeps/unix/sysv/linux/sh/sh3/setcontext.S (__setcontext): Likewise. + * sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S (__swapcontext): + Likewise. + * sysdeps/unix/sysv/linux/sh/sh4/setcontext.S (__setcontext): Likewise. + * sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S (__swapcontext): + Likewise. + 2012-05-27 Ulrich Drepper <drepper@gmail.com> * po/h.po: Update from translation team. diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 492668bdeb..bc2e98b2c6 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,36 @@ +2012-05-27 Chung-Lin Tang <cltang@codesourcery.com> + + * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_lock_wait_private) + (__lll_lock_wait, __lll_timedlock_wait, __lll_timedwait_tid): Add CFI + directives. + * sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S + (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S + (pthread_barrier_wait): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S + (__pthread_cond_signal): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S + (__pthread_cond_timedwait): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S (__pthread_cond_wait): + Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S + (__pthread_rwlock_rdlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S + (pthread_rwlock_timedrdlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S + (pthread_rwlock_timedwrlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S + (__pthread_rwlock_unlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S + (__pthread_rwlock_wrlock): Likewise. + * sysdeps/unix/sysv/linux/sh/sem_post.S (__new_sem_post): Likewise. + * sysdeps/unix/sysv/linux/sh/sem_timedwait.S (sem_timedwait): Likewise. + * sysdeps/unix/sysv/linux/sh/sem_trywait.S (__new_sem_trywait): + Likewise. + * sysdeps/unix/sysv/linux/sh/sem_wait.S (__new_sem_wait): Likewise. + 2012-05-26 Siddhesh Poyarekar <siddhesh@redhat.com> [BZ #12416] 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 diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S index 8b1e006712..7a192a9cc5 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S @@ -1,5 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -115,6 +114,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,12 +232,22 @@ __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 + /* Omit CFI for restore in delay slot. */ + cfi_restore_state 7: /* Check whether the time expired. */ @@ -248,6 +259,12 @@ __lll_robust_timedlock_wait: bra 6b mov #ETIMEDOUT, r0 3: + /* Restore initial state for invalid timeout case. */ + cfi_restore (r8) + cfi_restore (r9) + cfi_restore (r10) + cfi_restore (r11) + cfi_def_cfa_offset (0) rts mov #EINVAL, r0 cfi_endproc 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 58a9cdef58..dd32d81dc6 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -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,11 +105,19 @@ pthread_barrier_wait: bf 9f 10: - mov #0, r0 /* != PTHREAD_BARRIER_SERIAL_THREAD */ + 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) rts - mov.l @r15+, r9 + mov #0, r0 /* != PTHREAD_BARRIER_SERIAL_THREAD */ + cfi_restore_state 3: /* The necessary number of threads arrived. */ @@ -140,11 +155,19 @@ pthread_barrier_wait: tst r2, r2 bf 4f 5: - mov #-1, r0 /* == PTHREAD_BARRIER_SERIAL_THREAD */ + 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) rts - mov.l @r15+, r9 + mov #-1, r0 /* == PTHREAD_BARRIER_SERIAL_THREAD */ + cfi_restore_state 1: mov.l @(PRIVATE,r8), r6 @@ -200,6 +223,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 7bd93553d3..fc1791b51f 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -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: - mov #0, 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+, 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+, r10 + mov #0, r0 + cfi_restore_state 4: /* Unlock. */ @@ -153,12 +172,22 @@ __pthread_cond_broadcast: tst r2, r2 bf 5f 6: - mov #0, 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+, 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+, r10 + mov #0, r0 + cfi_restore_state 1: /* Initial locking failed. */ @@ -244,6 +273,7 @@ __pthread_cond_broadcast: SYSCALL_INST_PAD bra 10b nop + cfi_endproc #ifndef __ASSUME_PRIVATE_FUTEX .Lpfoff: 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 320a3e8f05..71a8e57506 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -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: - mov #0, 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) rts - mov.l @r15+, r8 + mov #0, r0 + 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 d945dbf2c6..0937d6c237 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -416,15 +416,31 @@ __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 + /* Omit CFI for restore in delay slot. */ + cfi_restore_state #ifndef __ASSUME_PRIVATE_FUTEX .Lpfoff: 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 d06673cd84..4588c6f083 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -285,14 +285,28 @@ __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 + /* Omit CFI for restore in delay slot. */ + cfi_restore_state #ifndef __ASSUME_PRIVATE_FUTEX .Lpfoff0: 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 ee88089527..8d261bc7b8 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -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_res |
