[uclibc-ng-devel,14/32,ARM,FDPIC] arm/clone.S: Fix threading support

Message ID 20180704155605.1892-15-christophe.lyon@st.com
State New
Headers show
Series
  • FDPIC ABI for ARM
Related show

Commit Message

Christophe Lyon July 4, 2018, 3:55 p.m.
Change clone.S so that in FDPIC case we take into account the fact
that we are given a function descriptor.

	* libc/sysdeps/linux/arm/clone.S (__clone): Support __FDPIC__.

Signed-off-by: Mickaël Guêné <mickael.guene@st.com>
Signed-off-by: Christophe Lyon <christophe.lyon@st.com>

Patch

diff --git a/libc/sysdeps/linux/arm/clone.S b/libc/sysdeps/linux/arm/clone.S
index 8ca50fc..eacf3db 100644
--- a/libc/sysdeps/linux/arm/clone.S
+++ b/libc/sysdeps/linux/arm/clone.S
@@ -130,8 +130,20 @@  PSEUDO_END (__clone)
 	.cantunwind
 	@ pick the function arg and call address off the stack and execute
 	ldr	r0, [sp, #4]
+#if defined(__FDPIC__)
+	ldr	r12, [sp]
+	mov	r4, r9
+	ldr	r9, [r12, #4]
+	mov	lr, pc
+	ldr	pc, [r12]
+#else
 	mov	lr, pc
 	ldr 	pc, [sp]
+#endif
+
+#if defined(__FDPIC__)
+	mov	r9, r4
+#endif
 
 	@ and we are done, passing the return value through r0
 	b	HIDDEN_JUMPTARGET(_exit)