powerpc/tm: Fix GOT save offset for ABIv2
authorAnton Blanchard <anton@samba.org>
Sun, 9 Mar 2014 23:52:17 +0000 (10:52 +1100)
committerAnton Blanchard <anton@samba.org>
Wed, 23 Apr 2014 00:05:25 +0000 (10:05 +1000)
The r2 TOC/GOT save offset is 40 on ABIv1 and 24 on ABIv2.

Signed-off-by: Anton Blanchard <anton@samba.org>
arch/powerpc/include/asm/ppc_asm.h
arch/powerpc/kernel/tm.S

index 3185d11..2cc2511 100644 (file)
@@ -190,8 +190,10 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
 #define STK_REG(i)     __STK_REG(__REG_##i)
 
 #if defined(_CALL_ELF) && _CALL_ELF == 2
+#define STK_GOT                24
 #define __STK_PARAM(i) (32 + ((i)-3)*8)
 #else
+#define STK_GOT                40
 #define __STK_PARAM(i) (48 + ((i)-3)*8)
 #endif
 #define STK_PARAM(i)   __STK_PARAM(__REG_##i)
index 27aad24..cf1027e 100644 (file)
@@ -107,7 +107,7 @@ _GLOBAL(tm_reclaim)
        mflr    r0
        stw     r6, 8(r1)
        std     r0, 16(r1)
-       std     r2, 40(r1)
+       std     r2, STK_GOT(r1)
        stdu    r1, -TM_FRAME_SIZE(r1)
 
        /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD]. */
@@ -288,7 +288,7 @@ dont_backup_fp:
        ld      r0, 16(r1)
        mtcr    r4
        mtlr    r0
-       ld      r2, 40(r1)
+       ld      r2, STK_GOT(r1)
 
        /* Load system default DSCR */
        ld      r4, DSCR_DEFAULT@toc(r2)
@@ -311,7 +311,7 @@ _GLOBAL(__tm_recheckpoint)
        mflr    r0
        stw     r5, 8(r1)
        std     r0, 16(r1)
-       std     r2, 40(r1)
+       std     r2, STK_GOT(r1)
        stdu    r1, -TM_FRAME_SIZE(r1)
 
        /* We've a struct pt_regs at [r1+STACK_FRAME_OVERHEAD].
@@ -447,7 +447,7 @@ restore_gprs:
        ld      r0, 16(r1)
        mtcr    r4
        mtlr    r0
-       ld      r2, 40(r1)
+       ld      r2, STK_GOT(r1)
 
        /* Load system default DSCR */
        ld      r4, DSCR_DEFAULT@toc(r2)