[PATCH] ARM: Fix clone build for ARMv4

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] ARM: Fix clone build for ARMv4

Will Newton
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.

ports/ChangeLog.arm:

2014-01-23  Will Newton  <[hidden email]>

        [BZ #16499]
        * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
        of blx instruction directly.
---
 ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
index 44286a5..03fe9ab 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
+++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
@@ -88,14 +88,8 @@ PSEUDO_END (__clone)
 #endif
  @ pick the function arg and call address off the stack and execute
  ldr r0, [sp, #4]
-#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
  ldr ip, [sp], #8
- mov lr, pc
- bx      ip
-#else
- ldr lr, [sp], #8
- blx lr
-#endif
+ BLX (ip)
 
  @ and we are done, passing the return value through r0
  b PLTJMP(HIDDEN_JUMPTARGET(_exit))
--
1.8.1.4

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] ARM: Fix clone build for ARMv4

Joseph Myers
On Thu, 23 Jan 2014, Will Newton wrote:

> ARMv4 does not have the blx instruction, so use the BLX macro which
> handles abstracting this for us.
>
> ports/ChangeLog.arm:
>
> 2014-01-23  Will Newton  <[hidden email]>
>
> [BZ #16499]
> * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
> of blx instruction directly.

OK, presuming you've run the testsuite for at least one ARM configuration.

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] ARM: Fix clone build for ARMv4

Carlos O'Donell-6
In reply to this post by Will Newton
On 01/23/2014 06:49 AM, Will Newton wrote:

> ARMv4 does not have the blx instruction, so use the BLX macro which
> handles abstracting this for us.
>
> ports/ChangeLog.arm:
>
> 2014-01-23  Will Newton  <[hidden email]>
>
> [BZ #16499]
> * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
> of blx instruction directly.
> ---
>  ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
> index 44286a5..03fe9ab 100644
> --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
> +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
> @@ -88,14 +88,8 @@ PSEUDO_END (__clone)
>  #endif
>   @ pick the function arg and call address off the stack and execute
>   ldr r0, [sp, #4]
> -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
>   ldr ip, [sp], #8
> - mov lr, pc
> - bx      ip
> -#else
> - ldr lr, [sp], #8
> - blx lr
> -#endif
> + BLX (ip)

Looks good.

>  
>   @ and we are done, passing the return value through r0
>   b PLTJMP(HIDDEN_JUMPTARGET(_exit))
>

Did you test this or ask the submitter to test it?

If he says it works then OK to commit.

Cheers,
Carlos.
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] ARM: Fix clone build for ARMv4

Will Newton
On 23 January 2014 17:30, Carlos O'Donell <[hidden email]> wrote:

> On 01/23/2014 06:49 AM, Will Newton wrote:
>> ARMv4 does not have the blx instruction, so use the BLX macro which
>> handles abstracting this for us.
>>
>> ports/ChangeLog.arm:
>>
>> 2014-01-23  Will Newton  <[hidden email]>
>>
>>       [BZ #16499]
>>       * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
>>       of blx instruction directly.
>> ---
>>  ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +-------
>>  1 file changed, 1 insertion(+), 7 deletions(-)
>>
>> diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
>> index 44286a5..03fe9ab 100644
>> --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
>> +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
>> @@ -88,14 +88,8 @@ PSEUDO_END (__clone)
>>  #endif
>>       @ pick the function arg and call address off the stack and execute
>>       ldr     r0, [sp, #4]
>> -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
>>       ldr     ip, [sp], #8
>> -     mov     lr, pc
>> -     bx      ip
>> -#else
>> -     ldr     lr, [sp], #8
>> -     blx     lr
>> -#endif
>> +     BLX (ip)
>
> Looks good.
>
>>
>>       @ and we are done, passing the return value through r0
>>       b       PLTJMP(HIDDEN_JUMPTARGET(_exit))
>>
>
> Did you test this or ask the submitter to test it?
>
> If he says it works then OK to commit.

I have tested this on armv7, I don't have an armv4 capable toolchain
at the moment to test it for that arch.

I've added Mike to CC so he can take a look.

Thanks,

--
Will Newton
Toolchain Working Group, Linaro
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] ARM: Fix clone build for ARMv4

Will Newton
On 23 January 2014 18:22, Will Newton <[hidden email]> wrote:

> On 23 January 2014 17:30, Carlos O'Donell <[hidden email]> wrote:
>> On 01/23/2014 06:49 AM, Will Newton wrote:
>>> ARMv4 does not have the blx instruction, so use the BLX macro which
>>> handles abstracting this for us.
>>>
>>> ports/ChangeLog.arm:
>>>
>>> 2014-01-23  Will Newton  <[hidden email]>
>>>
>>>       [BZ #16499]
>>>       * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
>>>       of blx instruction directly.
>>> ---
>>>  ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 +-------
>>>  1 file changed, 1 insertion(+), 7 deletions(-)
>>>
>>> diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
>>> index 44286a5..03fe9ab 100644
>>> --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
>>> +++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
>>> @@ -88,14 +88,8 @@ PSEUDO_END (__clone)
>>>  #endif
>>>       @ pick the function arg and call address off the stack and execute
>>>       ldr     r0, [sp, #4]
>>> -#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
>>>       ldr     ip, [sp], #8
>>> -     mov     lr, pc
>>> -     bx      ip
>>> -#else
>>> -     ldr     lr, [sp], #8
>>> -     blx     lr
>>> -#endif
>>> +     BLX (ip)
>>
>> Looks good.
>>
>>>
>>>       @ and we are done, passing the return value through r0
>>>       b       PLTJMP(HIDDEN_JUMPTARGET(_exit))
>>>
>>
>> Did you test this or ask the submitter to test it?
>>
>> If he says it works then OK to commit.
>
> I have tested this on armv7, I don't have an armv4 capable toolchain
> at the moment to test it for that arch.

I figured out the correct value of CFLAGS to get a build for armv4
(and armv4t) and the patch fixes the issue, so I have committed it.

--
Will Newton
Toolchain Working Group, Linaro
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] ARM: Fix clone build for ARMv4

Mike Frysinger
In reply to this post by Will Newton
On Thursday, January 23, 2014 11:49:31 Will Newton wrote:
> ARMv4 does not have the blx instruction, so use the BLX macro which
> handles abstracting this for us.

this fixed building for me.  at some point i'll try to run it ;).
-mike

signature.asc (853 bytes) Download Attachment