• Ard Biesheuvel's avatar
    arm64: ftrace: add support for far branches to dynamic ftrace · e71a4e1b
    Ard Biesheuvel authored
    Currently, dynamic ftrace support in the arm64 kernel assumes that all
    core kernel code is within range of ordinary branch instructions that
    occur in module code, which is usually the case, but is no longer
    guaranteed now that we have support for module PLTs and address space
    randomization.
    
    Since on arm64, all patching of branch instructions involves function
    calls to the same entry point [ftrace_caller()], we can emit the modules
    with a trampoline that has unlimited range, and patch both the trampoline
    itself and the branch instruction to redirect the call via the trampoline.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    [will: minor clarification to smp_wmb() comment]
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    e71a4e1b
ftrace.c 7.05 KB