summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-11-23 14:30:58 -0500
committerRich Felker <dalias@aerifal.cx>2012-11-23 14:30:58 -0500
commita50136dfe186a3ea3d78a4264187915ad16ab861 (patch)
treebdee28a332ff45d9598ad317476f265ac55b481d
parent0375c68fe7ed39b1173b62574936152645624078 (diff)
downloadmusl-a50136dfe186a3ea3d78a4264187915ad16ab861.tar.gz
musl-a50136dfe186a3ea3d78a4264187915ad16ab861.tar.bz2
musl-a50136dfe186a3ea3d78a4264187915ad16ab861.tar.xz
musl-a50136dfe186a3ea3d78a4264187915ad16ab861.zip
fix powerpc setjmp/longjmp to save/restore float regs; enlarge/align jmp_buf
-rw-r--r--arch/powerpc/bits/setjmp.h2
-rw-r--r--src/setjmp/powerpc/longjmp.s18
-rw-r--r--src/setjmp/powerpc/setjmp.s18
3 files changed, 37 insertions, 1 deletions
diff --git a/arch/powerpc/bits/setjmp.h b/arch/powerpc/bits/setjmp.h
index a4baec4c..ab583aba 100644
--- a/arch/powerpc/bits/setjmp.h
+++ b/arch/powerpc/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long jmp_buf [64];
+typedef unsigned long long jmp_buf [56];
diff --git a/src/setjmp/powerpc/longjmp.s b/src/setjmp/powerpc/longjmp.s
index fd61ae7b..bab17511 100644
--- a/src/setjmp/powerpc/longjmp.s
+++ b/src/setjmp/powerpc/longjmp.s
@@ -35,6 +35,24 @@ longjmp:
lwz 29, 72(3)
lwz 30, 76(3)
lwz 31, 80(3)
+ lfd 14,88(3)
+ lfd 15,96(3)
+ lfd 16,104(3)
+ lfd 17,112(3)
+ lfd 18,120(3)
+ lfd 19,128(3)
+ lfd 20,136(3)
+ lfd 21,144(3)
+ lfd 22,152(3)
+ lfd 23,160(3)
+ lfd 24,168(3)
+ lfd 25,176(3)
+ lfd 26,184(3)
+ lfd 27,192(3)
+ lfd 28,200(3)
+ lfd 29,208(3)
+ lfd 30,216(3)
+ lfd 31,224(3)
#5) put val into return reg r3
mr 3, 4
diff --git a/src/setjmp/powerpc/setjmp.s b/src/setjmp/powerpc/setjmp.s
index eaf7b684..e39687aa 100644
--- a/src/setjmp/powerpc/setjmp.s
+++ b/src/setjmp/powerpc/setjmp.s
@@ -34,6 +34,24 @@ setjmp:
stw 29, 72(3)
stw 30, 76(3)
stw 31, 80(3)
+ stfd 14,88(3)
+ stfd 15,96(3)
+ stfd 16,104(3)
+ stfd 17,112(3)
+ stfd 18,120(3)
+ stfd 19,128(3)
+ stfd 20,136(3)
+ stfd 21,144(3)
+ stfd 22,152(3)
+ stfd 23,160(3)
+ stfd 24,168(3)
+ stfd 25,176(3)
+ stfd 26,184(3)
+ stfd 27,192(3)
+ stfd 28,200(3)
+ stfd 29,208(3)
+ stfd 30,216(3)
+ stfd 31,224(3)
# 4) set return value to 0
li 3, 0
# 5) return