xref: /freebsd/sys/arm/include/ifunc.h (revision d78cbf483fe73c987573967042f57f15bf590629)
1*d78cbf48SMichal Meloun /*-
2*d78cbf48SMichal Meloun  * SPDX-License-Identifier: BSD-2-Clause
3*d78cbf48SMichal Meloun  *
4*d78cbf48SMichal Meloun  * Copyright (c) 2025, Michal Meloun <mmel@freebsd.org>
5*d78cbf48SMichal Meloun  *
603d61fe9SKonstantin Belousov  */
703d61fe9SKonstantin Belousov 
803d61fe9SKonstantin Belousov #ifndef __ARM_IFUNC_H
903d61fe9SKonstantin Belousov #define	__ARM_IFUNC_H
1003d61fe9SKonstantin Belousov 
11*d78cbf48SMichal Meloun #define	DEFINE_IFUNC(qual, ret_type, name, args)			\
12*d78cbf48SMichal Meloun     static ret_type (*name##_resolver(void))args __used;		\
13*d78cbf48SMichal Meloun     qual ret_type name args __attribute__((ifunc(#name "_resolver")));	\
14*d78cbf48SMichal Meloun     static ret_type (*name##_resolver(void))args
15*d78cbf48SMichal Meloun 
16*d78cbf48SMichal Meloun #ifdef __not_yet__
17*d78cbf48SMichal Meloun #define	DEFINE_UIFUNC(qual, ret_type, name, args)			\
18*d78cbf48SMichal Meloun     static ret_type (*name##_resolver(uint32_t, uint32_t, uint32_t,	\
19*d78cbf48SMichal Meloun 	uint32_t))args __used;						\
20*d78cbf48SMichal Meloun     qual ret_type name args __attribute__((ifunc(#name "_resolver")));	\
21*d78cbf48SMichal Meloun     static ret_type (*name##_resolver(					\
22*d78cbf48SMichal Meloun 	uint32_t elf_hwcap __unused,					\
23*d78cbf48SMichal Meloun 	uint32_t elf_hwcap2 __unused,					\
24*d78cbf48SMichal Meloun 	uint32_t arg3 __unused,						\
25*d78cbf48SMichal Meloun 	uint32_t arg4 __unused))args
26*d78cbf48SMichal Meloun #endif
2703d61fe9SKonstantin Belousov 
2803d61fe9SKonstantin Belousov #endif
29