162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _ASM_POWERPC_STATIC_CALL_H 362306a36Sopenharmony_ci#define _ASM_POWERPC_STATIC_CALL_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#define __PPC_SCT(name, inst) \ 662306a36Sopenharmony_ci asm(".pushsection .text, \"ax\" \n" \ 762306a36Sopenharmony_ci ".align 5 \n" \ 862306a36Sopenharmony_ci ".globl " STATIC_CALL_TRAMP_STR(name) " \n" \ 962306a36Sopenharmony_ci STATIC_CALL_TRAMP_STR(name) ": \n" \ 1062306a36Sopenharmony_ci inst " \n" \ 1162306a36Sopenharmony_ci " lis 12,2f@ha \n" \ 1262306a36Sopenharmony_ci " lwz 12,2f@l(12) \n" \ 1362306a36Sopenharmony_ci " mtctr 12 \n" \ 1462306a36Sopenharmony_ci " bctr \n" \ 1562306a36Sopenharmony_ci "1: li 3, 0 \n" \ 1662306a36Sopenharmony_ci " blr \n" \ 1762306a36Sopenharmony_ci "2: .long 0 \n" \ 1862306a36Sopenharmony_ci ".type " STATIC_CALL_TRAMP_STR(name) ", @function \n" \ 1962306a36Sopenharmony_ci ".size " STATIC_CALL_TRAMP_STR(name) ", . - " STATIC_CALL_TRAMP_STR(name) " \n" \ 2062306a36Sopenharmony_ci ".popsection \n") 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define PPC_SCT_RET0 20 /* Offset of label 1 */ 2362306a36Sopenharmony_ci#define PPC_SCT_DATA 28 /* Offset of label 2 */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define ARCH_DEFINE_STATIC_CALL_TRAMP(name, func) __PPC_SCT(name, "b " #func) 2662306a36Sopenharmony_ci#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) __PPC_SCT(name, "blr") 2762306a36Sopenharmony_ci#define ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name) __PPC_SCT(name, "b .+20") 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#endif /* _ASM_POWERPC_STATIC_CALL_H */ 30