On Tue, Mar 08, 2016 at 06:33:57PM +1100, Balbir Singh wrote:
> Changelog v5:
>       1. Removed the mini-stack frame created for klp_return_helper.
>          As a result of the mini-stack frame, function with > 8
>          arguments could not be patched

Did you get my previous mails? Those functions only require special
care, the _can_ be patched. In general, writing replacement functions
always requires attention!

Have you *tested* this patch? Replacing a function in the kernel?
Replacing a function in a module? For local calls? For global calls?
I strongly doubt so because it does not work this way.

To be fair, my last mail still was not 100% correct, but the conclusion
that the mini frame is not needed at all is invalid. Please leave it as it
was, I'm working on a test / demonstrator for how to handle these.

> +      * Why do we need this?
> +      * After patching we need to return to a trampoline return function
> +      * that guarantees that we restore the TOC and return to the correct
> +      * caller back
> +      */
> +     std     r2, 24(r1)      /* save TOC now, unconditionally. */
> +     subf    r0, r2, r0      /* Calculate offset from current TOC */
> +     stw     r0, 12(r1)      /* Of the final LR and save it in CR+4 */
> +     bl      5f
> +5:   mflr    r12
> +     addi    r12, r12, (klp_return_helper + 4 - .)@l
> +     std     r12, LRSAVE(r1)
[...]
> + * maybe inserting a klp_return_helper frame or not.
> +*/
> +klp_return_helper:
> +     ld      r2, 24(r1)      /* restore TOC (saved by ftrace_caller) */
> +     lwa     r0, 12(r1)      /* Load from CR+4, offset of LR w.r.t TOC */
> +     add     r0, r0, r2      /* Add the offset to current TOC */
> +     std     r0, LRSAVE(r1)  /* save the real return address */
> +     mtlr    r0
> +     blr
> +#endif

NAKed-by: Torsten Duwe <d...@suse.de>

        Torsten

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to