diff options
author | Sami Tolvanen <samitolvanen@google.com> | 2021-03-05 23:21:24 +0300 |
---|---|---|
committer | Marc Zyngier <maz@kernel.org> | 2021-03-09 11:48:24 +0300 |
commit | dbaee836d60a8e1b03e7d53a37893235662ba124 (patch) | |
tree | 9b54253bb7d87bd65da08980876668f986bfa457 /arch/arm64/kvm/arm.c | |
parent | 357ad203d45c0f9d76a8feadbd5a1c5d460c638b (diff) | |
download | linux-dbaee836d60a8e1b03e7d53a37893235662ba124.tar.xz |
KVM: arm64: Don't use cbz/adr with external symbols
allmodconfig + CONFIG_LTO_CLANG_THIN=y fails to build due to following
linker errors:
ld.lld: error: irqbypass.c:(function __guest_enter: .text+0x21CC):
relocation R_AARCH64_CONDBR19 out of range: 2031220 is not in
[-1048576, 1048575]; references hyp_panic
>>> defined in vmlinux.o
ld.lld: error: irqbypass.c:(function __guest_enter: .text+0x21E0):
relocation R_AARCH64_ADR_PREL_LO21 out of range: 2031200 is not in
[-1048576, 1048575]; references hyp_panic
>>> defined in vmlinux.o
This is because with LTO, the compiler ends up placing hyp_panic()
more than 1MB away from __guest_enter(). Use an unconditional branch
and adr_l instead to fix the issue.
Link: https://github.com/ClangBuiltLinux/linux/issues/1317
Reported-by: Nathan Chancellor <nathan@kernel.org>
Suggested-by: Marc Zyngier <maz@kernel.org>
Suggested-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Will Deacon <will@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210305202124.3768527-1-samitolvanen@google.com
Diffstat (limited to 'arch/arm64/kvm/arm.c')
0 files changed, 0 insertions, 0 deletions