Linux/ppc64: Remove assumption on contents of r11 in closure
authorMarcus Comstedt <marcus@mc.pp.se>
Sat, 4 Jan 2014 18:00:08 +0000 (19:00 +0100)
committerMarcus Comstedt <marcus@mc.pp.se>
Sat, 4 Jan 2014 18:00:08 +0000 (19:00 +0100)
src/powerpc/ffi_linux64.c
src/powerpc/linux64_closure.S

index 33f24b3..b087af8 100644 (file)
@@ -697,7 +697,8 @@ ffi_prep_closure_loc_linux64 (ffi_closure *closure,
 
   /* Copy function address and TOC from ffi_closure_LINUX64.  */
   memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
-  tramp[2] = codeloc;
+  tramp[2] = tramp[1];
+  tramp[1] = codeloc;
 #endif
 
   closure->cif = cif;
index 46a9ddf..bc61b5e 100644 (file)
@@ -100,6 +100,10 @@ ffi_closure_LINUX64:
        # load up the pointer to the parm save area
        mr      %r5, %r12
 # else
+       # copy r2 to r11 and load TOC into r2
+       mr      %r11, %r2
+       ld      %r2, 16(%r11)
+
        mflr    %r0
        # Save general regs into parm save area
        # This is the parameter save area set up by our caller.