[PATCH v8 4/5] arm64: mm: split linear mapping if BBML2 unsupported on secondary CPUs
Ard Biesheuvel
ardb at kernel.org
Sun Feb 1 23:43:32 PST 2026
On Mon, 2 Feb 2026, at 08:18, Arnd Bergmann wrote:
> On Wed, Sep 17, 2025, at 21:02, Yang Shi wrote:
>
>> + .pushsection ".idmap.text", "a"
>> +SYM_TYPED_FUNC_START(wait_linear_map_split_to_ptes)
>> + /* Must be same registers as in idmap_kpti_install_ng_mappings */
>> + swapper_ttb .req x3
>> + flag_ptr .req x4
>> +
>> + mrs swapper_ttb, ttbr1_el1
>> + adr_l flag_ptr, idmap_kpti_bbml2_flag
>> + __idmap_cpu_set_reserved_ttbr1 x16, x17
>
> I'm getting build failures here, using CONFIG_CFI using clang-21:
>
> ld.lld-21: error: undefined symbol: __kcfi_typeid_wait_linear_map_split_to_ptes
>>>> referenced by arch/arm64/mm/proc.o:(.idmap.text+0x298) in archive vmlinux.a
>
> I can get it to build by using plain SYM_FUNC_START() instead of
> SYM_TYPED_FUNC_START(), but I have no idea if that makes any sense:
>
> --- a/arch/arm64/mm/proc.S
> +++ b/arch/arm64/mm/proc.S
> @@ -439,7 +439,7 @@ SYM_FUNC_END(idmap_kpti_install_ng_mappings)
> #endif
>
> .pushsection ".idmap.text", "a"
> -SYM_TYPED_FUNC_START(wait_linear_map_split_to_ptes)
> +SYM_FUNC_START(wait_linear_map_split_to_ptes)
> /* Must be same registers as in idmap_kpti_install_ng_mappings */
> swapper_ttb .req x3
> flag_ptr .req x4
>
This is not the right fix: the indirect call from linear_map_split_to_ptes() will be instrumented, and so it requires the CFI annotation to precede the function entry point, which is what SYM_TYPED_FUNC_START() is supposed to emit.
The typeid symbol is injected by the compiler into every object file that takes the address of the function in question, and so the fact that it is missing seems to suggest that linear_map_split_to_ptes() has been optimized away entirely. Could you double check arch/arm64/mm/mmu.o if that is the case?
More information about the linux-arm-kernel
mailing list