diff mbox

ARM: Fix clone code when built for Thumb.

Message ID 521F9E4E.5040906@linaro.org
State Superseded
Headers show

Commit Message

Will Newton Aug. 29, 2013, 7:17 p.m. UTC
The mov lr, pc instruction will lose the Thumb bit from the return address
so use blx lr instead.

ports/ChangeLog.arm:

2013-08-29  Will Newton  <will.newton@linaro.org>

	* sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
	instead of mov lr, pc.
---
 ports/sysdeps/unix/sysv/linux/arm/clone.S | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Joseph Myers Aug. 29, 2013, 7:26 p.m. UTC | #1
On Thu, 29 Aug 2013, Will Newton wrote:

> The mov lr, pc instruction will lose the Thumb bit from the return address
> so use blx lr instead.
> 
> ports/ChangeLog.arm:
> 
> 2013-08-29  Will Newton  <will.newton@linaro.org>
> 
> 	* sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
> 	instead of mov lr, pc.

OK given a bug filed in Bugzilla and appropriate [BZ #N] notation and 
addition of the fixed bug number to NEWS.  Since this is a regression 
arising from the changes to build .S files as Thumb, you should also 
cherry-pick the fix to 2.18 branch.
Will Newton Aug. 29, 2013, 8:19 p.m. UTC | #2
On 29 August 2013 20:26, Joseph S. Myers <joseph@codesourcery.com> wrote:

Hi Joseph,

>> The mov lr, pc instruction will lose the Thumb bit from the return address
>> so use blx lr instead.
>>
>> ports/ChangeLog.arm:
>>
>> 2013-08-29  Will Newton  <will.newton@linaro.org>
>>
>>       * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
>>       instead of mov lr, pc.
>
> OK given a bug filed in Bugzilla and appropriate [BZ #N] notation and
> addition of the fixed bug number to NEWS.  Since this is a regression
> arising from the changes to build .S files as Thumb, you should also
> cherry-pick the fix to 2.18 branch.

I've filed a bug and posted a v2. I don't have commit access so I'm
not sure what the best way to facilitate the cherry pick is. Apart
from the NEWS entry the merge should be trivial.
Joseph Myers Aug. 29, 2013, 8:56 p.m. UTC | #3
On Thu, 29 Aug 2013, Will Newton wrote:

> I've filed a bug and posted a v2. I don't have commit access so I'm
> not sure what the best way to facilitate the cherry pick is. Apart
> from the NEWS entry the merge should be trivial.

It's time for you to get commit access to commit your own patches once 
they've been approved.  Overseers, please add user willnewton to the glibc 
group.
Will Newton Aug. 30, 2013, 10:18 a.m. UTC | #4
On 29 August 2013 20:26, Joseph S. Myers <joseph@codesourcery.com> wrote:
> On Thu, 29 Aug 2013, Will Newton wrote:
>
>> The mov lr, pc instruction will lose the Thumb bit from the return address
>> so use blx lr instead.
>>
>> ports/ChangeLog.arm:
>>
>> 2013-08-29  Will Newton  <will.newton@linaro.org>
>>
>>       * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
>>       instead of mov lr, pc.
>
> OK given a bug filed in Bugzilla and appropriate [BZ #N] notation and
> addition of the fixed bug number to NEWS.  Since this is a regression
> arising from the changes to build .S files as Thumb, you should also
> cherry-pick the fix to 2.18 branch.

Committed to master and the 2.18 branch. Let me know if I missed anything.

Thanks!
Carlos O'Donell Aug. 30, 2013, 5:35 p.m. UTC | #5
On 08/30/2013 06:18 AM, Will Newton wrote:
> On 29 August 2013 20:26, Joseph S. Myers <joseph@codesourcery.com> wrote:
>> On Thu, 29 Aug 2013, Will Newton wrote:
>>
>>> The mov lr, pc instruction will lose the Thumb bit from the return address
>>> so use blx lr instead.
>>>
>>> ports/ChangeLog.arm:
>>>
>>> 2013-08-29  Will Newton  <will.newton@linaro.org>
>>>
>>>       * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
>>>       instead of mov lr, pc.
>>
>> OK given a bug filed in Bugzilla and appropriate [BZ #N] notation and
>> addition of the fixed bug number to NEWS.  Since this is a regression
>> arising from the changes to build .S files as Thumb, you should also
>> cherry-pick the fix to 2.18 branch.
> 
> Committed to master and the 2.18 branch. Let me know if I missed anything.

Please be aware that the release manager for 2.18 should be ACK'ing your
patches going into 2.18 (David Miller). David is responsible for the
branch and it's his responsibility if the branch gets into a bad state.

You can make it easy for David by stating that Joseph said it's OK, and
explaining your testing.

Cheers,
Carlos.
diff mbox

Patch

diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
index ce9c2a5..6e74fa7 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
+++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
@@ -93,8 +93,8 @@  PSEUDO_END (__clone)
 	mov	lr, pc
 	bx      ip
 #else
-	mov	lr, pc
-	ldr 	pc, [sp], #8
+	ldr 	lr, [sp], #8
+	blx	lr
 #endif

 	@ and we are done, passing the return value through r0