ARM: ftrace: use trampolines to keep .init.text in branching range
authorArd Biesheuvel <ardb@kernel.org>
Sun, 23 Jan 2022 19:28:39 +0000 (20:28 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 9 Feb 2022 08:12:32 +0000 (09:12 +0100)
commitdc438db5828fd6a379648ab8735ee73a8e40865a
tree61473544020b124dae5572c9d7720b24d7fe9cd8
parentad1c2f39fda0acb51b5a93604c5e1a703b849a7d
ARM: ftrace: use trampolines to keep .init.text in branching range

Kernel images that are large in comparison to the range of a direct
branch may fail to work as expected with ftrace, as patching a direct
branch to one of the core ftrace routines may not be possible from the
.init.text section, if it is emitted too far away from the normal .text
section.

This is more likely to affect Thumb2 builds, given that its range is
only -/+ 16 MiB (as opposed to ARM which has -/+ 32 MiB), but may occur
in either ISA.

To work around this, add a couple of trampolines to .init.text and
swap these in when the ftrace patching code is operating on callers in
.init.text.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
arch/arm/kernel/entry-ftrace.S
arch/arm/kernel/ftrace.c