Static Call
include/static_call.h View source View on GitHubFunctions
Section titled “Functions”static_call_update_raw
Section titled “static_call_update_raw”void static_call_update_raw(void *trampoline, void *fn) source Macros
Section titled “Macros”STATIC_CALL_DEFINE
Section titled “STATIC_CALL_DEFINE”#define STATIC_CALL_DEFINE(name, default_fn) source Expansion
#define STATIC_CALL_DEFINE(name, default_fn) \
extern typeof(default_fn) name##_trampoline; \
asm(".pushsection .text, \"ax\"\n\t" \
".globl " #name "_trampoline\n\t" #name "_trampoline:\n\t" \
".byte 0xe9\n\t" /* jmp rel32 */ static_call
Section titled “static_call”#define static_call(name) source Expansion
#define static_call(name) name##_trampoline static_call_update
Section titled “static_call_update”#define static_call_update(name, fn) source Expansion
#define static_call_update(name, fn) \
do { \
typeof(&name##_trampoline) _scu_fn = (fn); \
static_call_update_raw((void *) name##_trampoline, (void *) _scu_fn); \
} while (0)