This commit adds three patches to uClibc that are needed to make Thumb2 support work properly: uclibc-0006-arm-clone-restore-stack-pointer-just-after-return-fr.patch uclibc-0007-arm-clone.S-Add-missing-IT-instruction-for-Thumb2.patch uclibc-0008-arm-move-check-for-BX-to-its-own-header.patch The first one is a necessary dependency of the second one. Both of those patches have already been merged upstream, after 0.9.33.2. The third one hasn't been merged upstream yet, but it has already been submitted a while ago by Yann E. Morin, without receiving attention from upstream. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
From 963671276c0ef14458e0a7990107bcd2c075f3cd Mon Sep 17 00:00:00 2001
|
|
From: Filippo Arcidiacono <filippo.arcidiacono@st.com>
|
|
Date: Mon, 10 Dec 2012 09:50:52 +0100
|
|
Subject: [PATCH 6/8] arm: clone: restore stack pointer just after return from
|
|
syscall
|
|
|
|
If the syscall returns with an error the stack pointer and r4 register
|
|
are not restored because the instruction 'ldmnefd sp!, {r4}' is executed
|
|
after branching to '__error' label.
|
|
This bug has been spotted out by running './utstest clone 5' from LTP
|
|
built with -fstack-protector-all compiler flag as log below:
|
|
|
|
root@cortex-a9:/usr/tests/ltp/testcases/bin# ./utstest clone 5
|
|
stack smashing detected: ./utstest terminated()
|
|
|
|
Regression introduced by commit e58798e107d652644629a1daaa95d76430808d53
|
|
|
|
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
|
|
Signed-off-by: Giuseppe Di Giore <giuseppe.di-giore@st.com>
|
|
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
---
|
|
libc/sysdeps/linux/arm/clone.S | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/libc/sysdeps/linux/arm/clone.S b/libc/sysdeps/linux/arm/clone.S
|
|
index fdc05b8..e4101ba 100644
|
|
--- a/libc/sysdeps/linux/arm/clone.S
|
|
+++ b/libc/sysdeps/linux/arm/clone.S
|
|
@@ -111,8 +111,8 @@ __clone:
|
|
ldr r4, [sp, #12]
|
|
DO_CALL (clone)
|
|
movs a1, a1
|
|
- blt __error
|
|
ldmnefd sp!, {r4}
|
|
+ blt __error
|
|
IT(t, ne)
|
|
#if defined(__USE_BX__)
|
|
bxne lr
|
|
--
|
|
1.8.1.2
|
|
|