| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _ASM_POWERPC_STATIC_CALL_H |
| #define _ASM_POWERPC_STATIC_CALL_H |
| #define __PPC_SCT(name, inst) \ |
| asm(".pushsection .text, \"ax\" \n" \ |
| ".globl " STATIC_CALL_TRAMP_STR(name) " \n" \ |
| STATIC_CALL_TRAMP_STR(name) ": \n" \ |
| ".type " STATIC_CALL_TRAMP_STR(name) ", @function \n" \ |
| ".size " STATIC_CALL_TRAMP_STR(name) ", . - " STATIC_CALL_TRAMP_STR(name) " \n" \ |
| #define PPC_SCT_RET0 20 /* Offset of label 1 */ |
| #define PPC_SCT_DATA 28 /* Offset of label 2 */ |
| #define ARCH_DEFINE_STATIC_CALL_TRAMP(name, func) __PPC_SCT(name, "b " #func) |
| #define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) __PPC_SCT(name, "blr") |
| #define ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name) __PPC_SCT(name, "b .+20") |
| #endif /* _ASM_POWERPC_STATIC_CALL_H */ |