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