diff options
author | Thorsten Glaser <tg@mirbsd.org> | 2012-09-29 19:20:37 +0000 |
---|---|---|
committer | maximilian attems <max@stro.at> | 2012-10-01 14:54:10 +0200 |
commit | 9bdffde924573bf1c2f795a4b57a302d9485d248 (patch) | |
tree | c17518f1c08fd33142f51d8a48c9cb72629416ca | |
parent | 5c04671880a88a706fdbf6218c74737a40ff1f87 (diff) | |
download | klibc-9bdffde924573bf1c2f795a4b57a302d9485d248.tar.gz |
[klibc] arm: fix trashing of callee-saved registers in thumb setjmp()
fixes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634890
(although dynamically-linked binaries seem to have another bug)
Signed-off-by: Thorsten Glaser <tg@mirbsd.org>
Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r-- | usr/klibc/arch/arm/setjmp.S | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/usr/klibc/arch/arm/setjmp.S b/usr/klibc/arch/arm/setjmp.S index d351e0e2da8f8..92ffc434725b5 100644 --- a/usr/klibc/arch/arm/setjmp.S +++ b/usr/klibc/arch/arm/setjmp.S @@ -70,6 +70,7 @@ longjmp: .type setjmp, #function .thumb_func setjmp: + mov r2, r0 mov r3, lr stmia r0!, {r3, r4, r5, r6, r7} mov r3, r8 @@ -78,6 +79,8 @@ setjmp: mov r6, fp mov r7, sp stmia r0!, {r3, r4, r5, r6, r7} + /* Do not trash r4 .. r7 */ + ldmia r2!, {r3, r4, r5, r6, r7} mov r0, #0 BX(lr) .size setjmp,.-setjmp |