[PATCH] [v2] iommu, debugobjects: avoid gcc-16.1 section mismatch warnings
Will Deacon
will at kernel.org
Tue May 19 05:06:59 PDT 2026
On Wed, May 13, 2026 at 04:53:54PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd at arndb.de>
>
> gcc-16 has gained some more advanced inter-procedual optimization
> techniques that enable it to inline the dummy_tlb_add_page() and
> dummy_tlb_flush() function pointers into a specialized version of
> __arm_v7s_unmap:
>
> WARNING: modpost: vmlinux: section mismatch in reference: __arm_v7s_unmap+0x2cc (section: .text) -> dummy_tlb_add_page (section: .init.text)
> ERROR: modpost: Section mismatches detected.
>
> From what I can tell, the transformation is correct, as this is only
> called when __arm_v7s_unmap() is called from arm_v7s_do_selftests(),
> which is also __init. Since __arm_v7s_unmap() however is not __init,
> gcc cannot inline the inner function calls directly.
>
> In debug_objects_selftest(), the same thing happens. Both the
> caller and the leaf function are __init, but the IPA pulls
> it into a non-init one:
>
> WARNING: modpost: vmlinux: section mismatch in reference: lookup_object_or_alloc+0x7c (section: .text.lookup_object_or_alloc) -> is_static_object (section: .init.text)
>
> Marking the affected functions as not "__init" would reliably avoid this
> issue but is not a good solution because it removes an otherwise correct
> annotation. I tried marking the functions as 'noinline', but that ended
> up not covering all the affected configurations.
>
> With some more experimenting, I found that marking these functions as
> __attribute__((noipa)) is both logical and reliable.
>
> In order to keep the syntax readable, add a custom macro for this in
> include/linux/compiler_attributes.h next to other related macros and
> use it to annotate both files.
>
> Link: https://lore.kernel.org/all/abRB6g-48ZX6Yl2r@willie-the-truck/
> Cc: Will Deacon <will at kernel.org>
> Cc: Thomas Gleixner <tglx at kernel.org>
> Cc: Andrew Morton <akpm at linux-foundation.org>
> Cc: Miguel Ojeda <ojeda at kernel.org>
> Cc: linux-kbuild at vger.kernel.org
> Cc: stable at vger.kernel.org
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> ---
> v2: I merged both patches into one, to simplify the dependency
> on the new compiler_attributes.h macro.
> ---
> drivers/iommu/io-pgtable-arm-v7s.c | 18 ++++++++++++------
> include/linux/compiler_attributes.h | 11 +++++++++++
> lib/debugobjects.c | 2 +-
> 3 files changed, 24 insertions(+), 7 deletions(-)
For the io-pgtable change:
Acked-by: Will Deacon <will at kernel.org>
Thanks, Arnd.
Will
More information about the linux-arm-kernel
mailing list