Linux/ppc64: Remove assumption on contents of r11 in closure
This commit is contained in:
@@ -697,7 +697,8 @@ ffi_prep_closure_loc_linux64 (ffi_closure *closure,
|
|||||||
|
|
||||||
/* Copy function address and TOC from ffi_closure_LINUX64. */
|
/* Copy function address and TOC from ffi_closure_LINUX64. */
|
||||||
memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
|
memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
|
||||||
tramp[2] = codeloc;
|
tramp[2] = tramp[1];
|
||||||
|
tramp[1] = codeloc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
closure->cif = cif;
|
closure->cif = cif;
|
||||||
|
|||||||
@@ -100,6 +100,10 @@ ffi_closure_LINUX64:
|
|||||||
# load up the pointer to the parm save area
|
# load up the pointer to the parm save area
|
||||||
mr %r5, %r12
|
mr %r5, %r12
|
||||||
# else
|
# else
|
||||||
|
# copy r2 to r11 and load TOC into r2
|
||||||
|
mr %r11, %r2
|
||||||
|
ld %r2, 16(%r11)
|
||||||
|
|
||||||
mflr %r0
|
mflr %r0
|
||||||
# Save general regs into parm save area
|
# Save general regs into parm save area
|
||||||
# This is the parameter save area set up by our caller.
|
# This is the parameter save area set up by our caller.
|
||||||
|
|||||||
Reference in New Issue
Block a user