forked from pool/grub2
135 lines
2.8 KiB
Diff
135 lines
2.8 KiB
Diff
|
From 653e20ad39923aace0117fb7b51df27784587652 Mon Sep 17 00:00:00 2001
|
||
|
From: Anton Blanchard <anton@samba.org>
|
||
|
Date: Wed, 29 Jan 2014 10:39:32 +1100
|
||
|
Subject: [PATCH 13/23] Fix powerpc setjmp/longjmp 64bit issues
|
||
|
|
||
|
Fix powerpc setjmp/longjmp 64bit issues
|
||
|
|
||
|
Signed-off-by: Ram Pai <linuxram@us.ibm.com>
|
||
|
From: Anton Blanchard <anton@samba.org>
|
||
|
---
|
||
|
grub-core/lib/powerpc/setjmp.S | 94 +++++++++++++++++++++++-------------------
|
||
|
1 file changed, 52 insertions(+), 42 deletions(-)
|
||
|
|
||
|
diff --git a/grub-core/lib/powerpc/setjmp.S b/grub-core/lib/powerpc/setjmp.S
|
||
|
index 716b563..51fcae9 100644
|
||
|
--- a/grub-core/lib/powerpc/setjmp.S
|
||
|
+++ b/grub-core/lib/powerpc/setjmp.S
|
||
|
@@ -25,33 +25,43 @@ GRUB_MOD_LICENSE "GPLv3+"
|
||
|
|
||
|
.text
|
||
|
|
||
|
+#if defined( __powerpc64__ ) || defined( __powerpc64le__ )
|
||
|
+#define LOAD ld
|
||
|
+#define STORE std
|
||
|
+#define SZ_LONG 8
|
||
|
+#else
|
||
|
+#define LOAD lwz
|
||
|
+#define STORE stw
|
||
|
+#define SZ_LONG 4
|
||
|
+#endif
|
||
|
+
|
||
|
/*
|
||
|
* int grub_setjmp (grub_jmp_buf env)
|
||
|
*/
|
||
|
FUNCTION(grub_setjmp)
|
||
|
- stw 1, 0(3)
|
||
|
- stw 14, 4(3)
|
||
|
- stw 15, 8(3)
|
||
|
- stw 16, 12(3)
|
||
|
- stw 17, 16(3)
|
||
|
- stw 18, 20(3)
|
||
|
- stw 19, 24(3)
|
||
|
- stw 20, 28(3)
|
||
|
- stw 21, 32(3)
|
||
|
- stw 22, 36(3)
|
||
|
- stw 23, 40(3)
|
||
|
- stw 24, 44(3)
|
||
|
- stw 25, 48(3)
|
||
|
- stw 26, 52(3)
|
||
|
- stw 27, 56(3)
|
||
|
- stw 28, 60(3)
|
||
|
- stw 29, 64(3)
|
||
|
- stw 30, 68(3)
|
||
|
- stw 31, 72(3)
|
||
|
+ STORE 1, 0(3)
|
||
|
+ STORE 14, 1*SZ_LONG(3)
|
||
|
+ STORE 15, 2*SZ_LONG(3)
|
||
|
+ STORE 16, 3*SZ_LONG(3)
|
||
|
+ STORE 17, 4*SZ_LONG(3)
|
||
|
+ STORE 18, 5*SZ_LONG(3)
|
||
|
+ STORE 19, 6*SZ_LONG(3)
|
||
|
+ STORE 20, 7*SZ_LONG(3)
|
||
|
+ STORE 21, 8*SZ_LONG(3)
|
||
|
+ STORE 22, 9*SZ_LONG(3)
|
||
|
+ STORE 23, 10*SZ_LONG(3)
|
||
|
+ STORE 24, 11*SZ_LONG(3)
|
||
|
+ STORE 25, 12*SZ_LONG(3)
|
||
|
+ STORE 26, 13*SZ_LONG(3)
|
||
|
+ STORE 27, 14*SZ_LONG(3)
|
||
|
+ STORE 28, 15*SZ_LONG(3)
|
||
|
+ STORE 29, 16*SZ_LONG(3)
|
||
|
+ STORE 30, 17*SZ_LONG(3)
|
||
|
+ STORE 31, 18*SZ_LONG(3)
|
||
|
mflr 4
|
||
|
- stw 4, 76(3)
|
||
|
+ STORE 4, 19*SZ_LONG(3)
|
||
|
mfcr 4
|
||
|
- stw 4, 80(3)
|
||
|
+ STORE 4, 20*SZ_LONG(3)
|
||
|
li 3, 0
|
||
|
blr
|
||
|
|
||
|
@@ -59,28 +69,28 @@ FUNCTION(grub_setjmp)
|
||
|
* int grub_longjmp (grub_jmp_buf env, int val)
|
||
|
*/
|
||
|
FUNCTION(grub_longjmp)
|
||
|
- lwz 1, 0(3)
|
||
|
- lwz 14, 4(3)
|
||
|
- lwz 15, 8(3)
|
||
|
- lwz 16, 12(3)
|
||
|
- lwz 17, 16(3)
|
||
|
- lwz 18, 20(3)
|
||
|
- lwz 19, 24(3)
|
||
|
- lwz 20, 28(3)
|
||
|
- lwz 21, 32(3)
|
||
|
- lwz 22, 36(3)
|
||
|
- lwz 23, 40(3)
|
||
|
- lwz 24, 44(3)
|
||
|
- lwz 25, 48(3)
|
||
|
- lwz 26, 52(3)
|
||
|
- lwz 27, 56(3)
|
||
|
- lwz 28, 60(3)
|
||
|
- lwz 29, 64(3)
|
||
|
- lwz 30, 68(3)
|
||
|
- lwz 31, 72(3)
|
||
|
- lwz 5, 76(3)
|
||
|
+ LOAD 1, 0(3)
|
||
|
+ LOAD 14, 1*SZ_LONG(3)
|
||
|
+ LOAD 15, 2*SZ_LONG(3)
|
||
|
+ LOAD 16, 3*SZ_LONG(3)
|
||
|
+ LOAD 17, 4*SZ_LONG(3)
|
||
|
+ LOAD 18, 5*SZ_LONG(3)
|
||
|
+ LOAD 19, 6*SZ_LONG(3)
|
||
|
+ LOAD 20, 7*SZ_LONG(3)
|
||
|
+ LOAD 21, 8*SZ_LONG(3)
|
||
|
+ LOAD 22, 9*SZ_LONG(3)
|
||
|
+ LOAD 23, 10*SZ_LONG(3)
|
||
|
+ LOAD 24, 11*SZ_LONG(3)
|
||
|
+ LOAD 25, 12*SZ_LONG(3)
|
||
|
+ LOAD 26, 13*SZ_LONG(3)
|
||
|
+ LOAD 27, 14*SZ_LONG(3)
|
||
|
+ LOAD 28, 15*SZ_LONG(3)
|
||
|
+ LOAD 29, 16*SZ_LONG(3)
|
||
|
+ LOAD 30, 17*SZ_LONG(3)
|
||
|
+ LOAD 31, 18*SZ_LONG(3)
|
||
|
+ LOAD 5, 19*SZ_LONG(3)
|
||
|
mtlr 5
|
||
|
- lwz 5, 80(3)
|
||
|
+ LOAD 5, 20*SZ_LONG(3)
|
||
|
mtcr 5
|
||
|
mr. 3, 4
|
||
|
bne 1f
|
||
|
--
|
||
|
1.8.3.1
|