/* ===----- trampoline_setup.c - Implement __trampoline_setup -------------===
 *
 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 * See https://llvm.org/LICENSE.txt for license information.
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 *
 * ===----------------------------------------------------------------------===
 */

#include "int_lib.h"

extern void __clear_cache(void* start, void* end);

/*
 * The ppc compiler generates calls to __trampoline_setup() when creating 
 * trampoline functions on the stack for use with nested functions.
 * This function creates a custom 40-byte trampoline function on the stack 
 * which loads r11 with a pointer to the outer function's locals
 * and then jumps to the target nested function.
 */

#if __ppc__ && !defined(__powerpc64__)
COMPILER_RT_ABI void
__trampoline_setup(uint32_t* trampOnStack, int trampSizeAllocated, 
                   const void* realFunc, void* localsPtr)
{
    /* should never happen, but if compiler did not allocate */
    /* enough space on stack for the trampoline, abort */
    if ( trampSizeAllocated < 40 )
        compilerrt_abort();
    
    /* create trampoline */
    trampOnStack[0] = 0x7c0802a6;    /* mflr r0 */
    trampOnStack[1] = 0x4800000d;    /* bl Lbase */
    trampOnStack[2] = (uint32_t)realFunc;
    trampOnStack[3] = (uint32_t)localsPtr;
    trampOnStack[4] = 0x7d6802a6;    /* Lbase: mflr r11 */
    trampOnStack[5] = 0x818b0000;    /* lwz    r12,0(r11) */
    trampOnStack[6] = 0x7c0803a6;    /* mtlr r0 */
    trampOnStack[7] = 0x7d8903a6;    /* mtctr r12 */
    trampOnStack[8] = 0x816b0004;    /* lwz    r11,4(r11) */
    trampOnStack[9] = 0x4e800420;    /* bctr */
    
    /* clear instruction cache */
    __clear_cache(trampOnStack, &trampOnStack[10]);
}
#endif /* __ppc__ && !defined(__powerpc64__) */
