1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _STATIC_CALL_TYPES_H 3 #define _STATIC_CALL_TYPES_H 4 5 #include <linux/types.h> 6 #include <linux/stringify.h> 7 8 #define STATIC_CALL_KEY_PREFIX __SCK__ 9 #define STATIC_CALL_KEY_PREFIX_STR __stringify(STATIC_CALL_KEY_PREFIX) 10 #define STATIC_CALL_KEY_PREFIX_LEN (sizeof(STATIC_CALL_KEY_PREFIX_STR) - 1) 11 #define STATIC_CALL_KEY(name) __PASTE(STATIC_CALL_KEY_PREFIX, name) 12 13 #define STATIC_CALL_TRAMP_PREFIX __SCT__ 14 #define STATIC_CALL_TRAMP_PREFIX_STR __stringify(STATIC_CALL_TRAMP_PREFIX) 15 #define STATIC_CALL_TRAMP_PREFIX_LEN (sizeof(STATIC_CALL_TRAMP_PREFIX_STR) - 1) 16 #define STATIC_CALL_TRAMP(name) __PASTE(STATIC_CALL_TRAMP_PREFIX, name) 17 #define STATIC_CALL_TRAMP_STR(name) __stringify(STATIC_CALL_TRAMP(name)) 18 19 /* 20 * Flags in the low bits of static_call_site::key. 21 */ 22 #define STATIC_CALL_SITE_TAIL 1UL /* tail call */ 23 #define STATIC_CALL_SITE_INIT 2UL /* init section */ 24 #define STATIC_CALL_SITE_FLAGS 3UL 25 26 /* 27 * The static call site table needs to be created by external tooling (objtool 28 * or a compiler plugin). 29 */ 30 struct static_call_site { 31 s32 addr; 32 s32 key; 33 }; 34 35 #endif /* _STATIC_CALL_TYPES_H */ 36