about summary refs log tree commit diff
path: root/ports
diff options
context:
space:
mode:
authorWill Newton <will.newton@linaro.org>2014-01-23 11:11:24 +0000
committerWill Newton <will.newton@linaro.org>2014-01-24 13:15:46 +0000
commit47590bce28616abbcee93457da91d65a7a07589b (patch)
treea0c893f031460849d47a9fb2476a753bdcb6dbd1 /ports
parent5d41dadf31bc8a2f9c34c40d52a442d3794e405c (diff)
downloadglibc-47590bce28616abbcee93457da91d65a7a07589b.tar.gz
glibc-47590bce28616abbcee93457da91d65a7a07589b.tar.xz
glibc-47590bce28616abbcee93457da91d65a7a07589b.zip
ARM: Fix clone build for ARMv4
ARMv4 does not have the blx instruction, so use the BLX macro which
handles abstracting this for us.

Build tested for armv7, armv4t and armv4.

ports/ChangeLog.arm:

2014-01-24  Will Newton  <will.newton@linaro.org>

	[BZ #16499]
	* sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
	of blx instruction directly.
Diffstat (limited to 'ports')
-rw-r--r--ports/ChangeLog.arm6
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/clone.S8
2 files changed, 7 insertions, 7 deletions
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 4371b3ccfb..51bb76b992 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,3 +1,9 @@
+2014-01-24  Will Newton  <will.newton@linaro.org>
+
+	[BZ #16499]
+	* sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
+	of blx instruction directly.
+
 2014-01-14  Will Newton  <will.newton@linaro.org>
 
 	* sysdeps/arm/__longjmp.S: Don't apply pointer encryption
diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
index 44286a5cd0..03fe9ab728 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))