ARM: cacheflush: avoid clobbering the frame pointer
authorArd Biesheuvel <ardb@kernel.org>
Wed, 26 Jan 2022 10:40:02 +0000 (11:40 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 9 Feb 2022 09:13:10 +0000 (10:13 +0100)
commit1f640552d9878f2dbcbd46c78078e4ea2eb2b262
tree5be395246addb7b90d391f108614eaad8ca0e30c
parentdd12e97f3c7233a65a0125e5c5c793da16e1137d
ARM: cacheflush: avoid clobbering the frame pointer

Thumb2 uses R7 rather than R11 as the frame pointer, and even if we
rarely use a frame pointer to begin with when building in Thumb2 mode,
there are cases where it is required by the compiler (Clang when
inserting profiling hooks via -pg)

However, preserving and restoring the frame pointer is risky, as any
unhandled exceptions raised in the mean time will produce a bogus
backtrace, and it would be better not to touch the frame pointer at all.
This is the case even when CONFIG_FRAME_POINTER is not set, as the
unwind directive used by the unwinder may also use R7 or R11 as the
unwind anchor, even if the frame pointer is not managed strictly
according to the frame pointer ABI.

So let's tweak the cacheflush asm code not to clobber R7 or R11 at all,
so that we can drop R7 from the clobber lists of the inline asm blocks
that call these routines, and remove the code that preserves/restores
R11.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
arch/arm/include/asm/cacheflush.h
arch/arm/mach-exynos/mcpm-exynos.c
arch/arm/mm/cache-v7.S