Discussion:
[PATCH] ARM: Fix clone build for ARMv4
Will Newton
2014-01-23 11:49:31 UTC
Permalink
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 <***@linaro.org>

[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
Joseph S. Myers
2014-01-23 16:32:15 UTC
Permalink
Post by Will Newton
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.
[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
***@codesourcery.com
Carlos O'Donell
2014-01-23 17:30:54 UTC
Permalink
Post by Will Newton
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.
[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.
Post by Will Newton
@ 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.
Will Newton
2014-01-23 18:22:16 UTC
Permalink
Post by Carlos O'Donell
Post by Will Newton
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.
[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.
Post by Will Newton
@ 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
Will Newton
2014-01-24 13:17:33 UTC
Permalink
Post by Will Newton
Post by Carlos O'Donell
Post by Will Newton
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.
[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.
Post by Will Newton
@ 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
Mike Frysinger
2014-01-25 10:08:36 UTC
Permalink
Post by Will Newton
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

Loading...