From nobody Thu Oct 01 08:26:24 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hwQ460dwbz6vG6f for ; Thu, 01 Oct 2026 08:26:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hwQ456x6yz4f79 for ; Thu, 01 Oct 2026 08:26:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790843190; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=M3XBEAclRzjcLppyZ0UAHdhmhkp2zNdozRBlV9myw+E=; b=cXJrHBybSb9bjh00gJxKua1AFbeqjusd7YRy3wlI+ubYfikLLEC75g4tU3rqr3LbjAwBKj 3J+V+BrieuDoeHWUzherQm7AGKbhyjXVYBwG/9LyLNO+AiB5owdIhidadaN2pezAykQXOs ePFw6v4as2gHTzanSzN4Ok5cAsOgbotBjBrC1QiWnXpbe+Q7+mf59OzG1SoWqdwieHC4cA UNg2ImLKtTcYy9mA0BmPB3BbRP8IwiFEngBBNaroqhykS+Up6/F3gpWN6+Vvdeo8OI3S6f mZXuV6/bbgweODDs3enx3WP+4R22z+nfbzfyLzTZ2FlB5vkGRga/0Fmaahechg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790843190; b=BP1GU6N5r8Bu0DoqJM7reeA+hSr7GzRGPIXx6NcKY5kziyS6dLhFHtTWcywaZ5AWdhruvz WX0E1zI7zgQ4MAF9acnhH5Cx+mh33nNKl8E6V4xU79g32LlIT8DPGXbdUXe8qEdfAyqjGo Rr4a4mArGYdaLRDOECMPewHh8OHxIaU5Zr9VSNXp8nbpGitQ9vZEz14IG5hmoOFJH4tl9N FbQWPTEoQmyu96QyL9SDqcb6+YT68OC3hAXN1RUZtpRxm+WYBsWENWfm8xZg7R5etCnJQD dxrlKXipeBbbEPWM0QWJMAEnkOqiXEHJXxo5L2hEAXJVjlnjbD+HBPaXIkgR6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790843190; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=M3XBEAclRzjcLppyZ0UAHdhmhkp2zNdozRBlV9myw+E=; b=f5Ns1l8wkPiZihevd7mBZlroEfEM6ra+dsUx2Mxf3RG50UVWkbUm3hS9e/ThQIh6S2s4po OVldq6IZYAja8TCK1X88h2KwHtYkyimx/lpPLE/nq2tgLswfhdifZcH2E+IuPQQ70wZ6nA hD/k9Ws7cRVY45Aq2NPVpstlmaIsq/4yBjeNpu2wM8sZgN/VggEoWXdtsYI2Hg7WaAJBMx GzfwWaPW6j/dhSJa+KB48wsNP2LKzrupznHMO4usIHzAnBV8igFuuBjFUaALkxmVPLfsXA Uok8Yma0+ckt5JYbbRArIIITn/phxmLw5VEJade1f4uUs4kDhvmju0uOdsnqwQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hwQ455yzyzNX8 for ; Thu, 01 Oct 2026 08:26:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 273e9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 01 Oct 2026 08:26:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: ab9fcc5a553a - main - ifuncs: Have DEFINE_*IFUNC() macros expand the passed name List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ab9fcc5a553a25804b9535190e914e3ba0e746cf Auto-Submitted: auto-generated Date: Thu, 01 Oct 2026 08:26:24 +0000 Message-Id: <6abe1930.273e9.290028de@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=ab9fcc5a553a25804b9535190e914e3ba0e746cf commit ab9fcc5a553a25804b9535190e914e3ba0e746cf Author: Olivier Certner AuthorDate: 2026-09-30 08:44:16 +0000 Commit: Olivier Certner CommitDate: 2026-10-01 08:23:29 +0000 ifuncs: Have DEFINE_*IFUNC() macros expand the passed name While here, make each header include so that it can be included standalone. Reviewed by: kib MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D60167 --- sys/arm/include/ifunc.h | 18 +++++++++++------- sys/arm64/include/ifunc.h | 16 ++++++++++------ sys/powerpc/include/ifunc.h | 14 ++++++++------ sys/riscv/include/ifunc.h | 19 ++++++++++++------- sys/x86/include/ifunc.h | 18 +++++++++++------- 5 files changed, 52 insertions(+), 33 deletions(-) diff --git a/sys/arm/include/ifunc.h b/sys/arm/include/ifunc.h index 98cc354ae6ca..ec9e9281844d 100644 --- a/sys/arm/include/ifunc.h +++ b/sys/arm/include/ifunc.h @@ -8,17 +8,21 @@ #ifndef __ARM_IFUNC_H #define __ARM_IFUNC_H +#include + #define DEFINE_IFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(void))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(void))args + static ret_type (*__CONCAT(name, _resolver)(void))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)(void))args #ifdef __not_yet__ #define DEFINE_UIFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(uint32_t, uint32_t, uint32_t, \ - uint32_t))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver( \ + static ret_type (*__CONCAT(name, _resolver)(uint32_t, uint32_t, \ + uint32_t, uint32_t))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)( \ uint32_t elf_hwcap __unused, \ uint32_t elf_hwcap2 __unused, \ uint32_t arg3 __unused, \ diff --git a/sys/arm64/include/ifunc.h b/sys/arm64/include/ifunc.h index 34e783df8fe5..184c6394e02c 100644 --- a/sys/arm64/include/ifunc.h +++ b/sys/arm64/include/ifunc.h @@ -29,6 +29,8 @@ #ifndef __ARM64_IFUNC_H #define __ARM64_IFUNC_H +#include + struct __ifunc_arg_t { unsigned long _size; /* Size of the struct, so it can grow. */ @@ -43,17 +45,19 @@ typedef struct __ifunc_arg_t __ifunc_arg_t; #define _IFUNC_ARG_HWCAP (1ULL << 62) #define DEFINE_IFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(void))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(void))args + static ret_type (*__CONCAT(name, _resolver)(void))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)(void))args #define DEFINE_UIFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(uint64_t, \ + static ret_type (*__CONCAT(name, _resolver)(uint64_t, \ const struct __ifunc_arg_t *ifunc_arg, \ uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, \ uint64_t))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver( \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)( \ uint64_t at_hwcap __unused, \ const struct __ifunc_arg_t *ifunc_arg __unused, \ uint64_t _arg3 __unused, \ diff --git a/sys/powerpc/include/ifunc.h b/sys/powerpc/include/ifunc.h index eac6019b07d7..c8f1f2a7462d 100644 --- a/sys/powerpc/include/ifunc.h +++ b/sys/powerpc/include/ifunc.h @@ -36,16 +36,18 @@ #include #define DEFINE_IFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(void))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(void))args + static ret_type (*__CONCAT(name, _resolver)(void))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)(void))args #define DEFINE_UIFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(register_t, register_t, \ + static ret_type (*__CONCAT(name, _resolver)(register_t, register_t, \ register_t, register_t, register_t, register_t, register_t, \ register_t))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver( \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)( \ register_t cpu_features, \ register_t cpu_features2, \ register_t arg3 __unused, \ diff --git a/sys/riscv/include/ifunc.h b/sys/riscv/include/ifunc.h index 0f9747a2aa14..6efc437cca77 100644 --- a/sys/riscv/include/ifunc.h +++ b/sys/riscv/include/ifunc.h @@ -30,17 +30,22 @@ #ifndef __RISCV_IFUNC_H #define __RISCV_IFUNC_H +#include + #define DEFINE_IFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(void))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(void))args + static ret_type (*__CONCAT(name, _resolver)(void))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)(void))args #define DEFINE_UIFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(unsigned long, unsigned long, \ + static ret_type (*__CONCAT(name, _resolver)(unsigned long, \ unsigned long, unsigned long, unsigned long, unsigned long, \ - unsigned long, unsigned long))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(unsigned long elf_hwcap __unused, \ + unsigned long, unsigned long, unsigned long))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver) \ + (unsigned long elf_hwcap __unused, \ unsigned long _arg2 __unused, unsigned long _arg3 __unused, \ unsigned long _arg4 __unused, unsigned long _arg5 __unused, \ unsigned long _arg6 __unused, unsigned long _arg7 __unused, \ diff --git a/sys/x86/include/ifunc.h b/sys/x86/include/ifunc.h index 51b7cca1dc09..040dc6781aba 100644 --- a/sys/x86/include/ifunc.h +++ b/sys/x86/include/ifunc.h @@ -29,16 +29,20 @@ #ifndef __X86_IFUNC_H #define __X86_IFUNC_H +#include + #define DEFINE_IFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(void))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver(void))args + static ret_type (*__CONCAT(name, _resolver)(void))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)(void))args #define DEFINE_UIFUNC(qual, ret_type, name, args) \ - static ret_type (*name##_resolver(uint32_t, uint32_t, uint32_t, \ - uint32_t))args __used; \ - qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ - static ret_type (*name##_resolver( \ + static ret_type (*__CONCAT(name, _resolver) \ + (uint32_t, uint32_t, uint32_t, uint32_t))args __used; \ + qual ret_type name args \ + __attribute__((ifunc(__XSTRING(name) "_resolver"))); \ + static ret_type (*__CONCAT(name, _resolver)( \ uint32_t cpu_feature __unused, \ uint32_t cpu_feature2 __unused, \ uint32_t cpu_stdext_feature __unused, \