Browse Source

arm/clone.S: Fix threading support

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>
Christophe Lyon 5 years ago
parent
commit
bb982429e7
1 changed files with 12 additions and 0 deletions
  1. 12 0
      libc/sysdeps/linux/arm/clone.S

+ 12 - 0
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)