aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2014-03-09 19:52:17 -0400
committerAnton Blanchard <anton@samba.org>2014-04-22 20:05:25 -0400
commit6403105bfda4d6934b39aeb85ff818b185b42de8 (patch)
tree6f014b53f9fe560c48d90e137a38b6176683bc36
parentc2e31bdc120d992a90b75d94c7fa403fea362e43 (diff)
powerpc/tm: Fix GOT save offset for ABIv2
The r2 TOC/GOT save offset is 40 on ABIv1 and 24 on ABIv2. Signed-off-by: Anton Blanchard <anton@samba.org>
-rw-r--r--arch/powerpc/include/asm/ppc_asm.h2
-rw-r--r--arch/powerpc/kernel/tm.S8
2 files changed, 6 insertions, 4 deletions
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
index 3185d11b6691..2cc2511ff076 100644
--- a/arch/powerpc/include/asm/ppc_asm.h
+++ b/arch/powerpc/include/asm/ppc_asm.h
@@ -190,8 +190,10 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
190#define STK_REG(i) __STK_REG(__REG_##i) 190#define STK_REG(i) __STK_REG(__REG_##i)
191 191
192#if defined(_CALL_ELF) && _CALL_ELF == 2 192#if defined(_CALL_ELF) && _CALL_ELF == 2
193#define STK_GOT 24
193#define __STK_PARAM(i) (32 + ((i)-3)*8) 194#define __STK_PARAM(i) (32 + ((i)-3)*8)
194#else 195#else
196#define STK_GOT 40
195#define __STK_PARAM(i) (48 + ((i)-3)*8) 197#define __STK_PARAM(i) (48 + ((i)-3)*8)
196#endif 198#endif
197#define STK_PARAM(i) __STK_PARAM(__REG_##i) 199#define STK_PARAM(i) __STK_PARAM(__REG_##i)
diff --git a/arch/powerpc/kernel/tm.S b/arch/powerpc/kernel/tm.S
index 27aad248c002..cf1027efca30 100644
--- a/arch/powerpc/kernel/tm.S
+++ b/arch/powerpc/kernel/tm.S
@@ -107,7 +107,7 @@ _GLOBAL(tm_reclaim)
107 mflr r0 107 mflr r0
108 stw r6, 8(r1) 108 stw r6, 8(r1)
109 std r0, 16(r1) 109 std r0, 16(r1)
110 std r2, 40(r1) 110 std r2, STK_GOT(r1)
111 stdu r1, -TM_FRAME_SIZE(r1) 111 stdu r1, -TM_FRAME_SIZE(r1)
112 112
113 /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD]. */ 113 /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD]. */
@@ -288,7 +288,7 @@ dont_backup_fp:
288 ld r0, 16(r1) 288 ld r0, 16(r1)
289 mtcr r4 289 mtcr r4
290 mtlr r0 290 mtlr r0
291 ld r2, 40(r1) 291 ld r2, STK_GOT(r1)
292 292
293 /* Load system default DSCR */ 293 /* Load system default DSCR */
294 ld r4, DSCR_DEFAULT@toc(r2) 294 ld r4, DSCR_DEFAULT@toc(r2)
@@ -311,7 +311,7 @@ _GLOBAL(__tm_recheckpoint)
311 mflr r0 311 mflr r0
312 stw r5, 8(r1) 312 stw r5, 8(r1)
313 std r0, 16(r1) 313 std r0, 16(r1)
314 std r2, 40(r1) 314 std r2, STK_GOT(r1)
315 stdu r1, -TM_FRAME_SIZE(r1) 315 stdu r1, -TM_FRAME_SIZE(r1)
316 316
317 /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD]. 317 /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD].
@@ -447,7 +447,7 @@ restore_gprs:
447 ld r0, 16(r1) 447 ld r0, 16(r1)
448 mtcr r4 448 mtcr r4
449 mtlr r0 449 mtlr r0
450 ld r2, 40(r1) 450 ld r2, STK_GOT(r1)
451 451
452 /* Load system default DSCR */ 452 /* Load system default DSCR */
453 ld r4, DSCR_DEFAULT@toc(r2) 453 ld r4, DSCR_DEFAULT@toc(r2)