diff options
author | Anton Blanchard <anton@samba.org> | 2014-03-09 19:52:17 -0400 |
---|---|---|
committer | Anton Blanchard <anton@samba.org> | 2014-04-22 20:05:25 -0400 |
commit | 6403105bfda4d6934b39aeb85ff818b185b42de8 (patch) | |
tree | 6f014b53f9fe560c48d90e137a38b6176683bc36 | |
parent | c2e31bdc120d992a90b75d94c7fa403fea362e43 (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.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/tm.S | 8 |
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) |