yann@3242: commit 4f2bcda964d4fff56855e0c66198c9bcb682ea1e yann@3242: Author: Will Newton yann@3242: Date: Thu Aug 29 20:10:26 2013 +0100 yann@3242: yann@3242: ARM: Fix clone code when built for Thumb. yann@3242: yann@3242: The mov lr, pc instruction will lose the Thumb bit from the return address yann@3242: so use blx lr instead. yann@3242: yann@3242: ports/ChangeLog.arm: yann@3242: yann@3242: 2013-08-30 Will Newton yann@3242: yann@3242: [BZ #15909] yann@3242: * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx yann@3242: instead of mov lr, pc. yann@3242: yann@3242: (cherry picked from commit 6b06ac56cdfc9293908724e51e827534e97819aa) yann@3242: yann@3242: diff --git a/NEWS b/NEWS yann@3242: index b023c30..f64fb82 100644 yann@3242: --- a/NEWS yann@3242: +++ b/NEWS yann@3242: @@ -5,6 +5,12 @@ See the end for copying conditions. yann@3242: Please send GNU C library bug reports via yann@3242: using `glibc' in the "product" field. yann@3242: yann@3242: +Version 2.18.1 yann@3242: + yann@3242: +* The following bugs are resolved with this release: yann@3242: + yann@3242: + 15909. yann@3242: + yann@3242: Version 2.18 yann@3242: yann@3242: * The following bugs are resolved with this release: yann@3242: diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm yann@3242: index 1e7a35c..54debd7 100644 yann@3242: --- a/ports/ChangeLog.arm yann@3242: +++ b/ports/ChangeLog.arm yann@3242: @@ -1,3 +1,9 @@ yann@3242: +2013-08-30 Will Newton yann@3242: + yann@3242: + [BZ #15909] yann@3242: + * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx yann@3242: + instead of mov lr, pc. yann@3242: + yann@3242: 2013-07-03 Joseph Myers yann@3242: yann@3242: * sysdeps/arm/include/bits/setjmp.h [_ISOMAC] (JMP_BUF_REGLIST): yann@3242: diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S yann@3242: index ce9c2a5..6e74fa7 100644 yann@3242: --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S yann@3242: +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S yann@3242: @@ -93,8 +93,8 @@ PSEUDO_END (__clone) yann@3242: mov lr, pc yann@3242: bx ip yann@3242: #else yann@3242: - mov lr, pc yann@3242: - ldr pc, [sp], #8 yann@3242: + ldr lr, [sp], #8 yann@3242: + blx lr yann@3242: #endif yann@3242: yann@3242: @ and we are done, passing the return value through r0