arm64: ftrace: fix building without CONFIG_MODULES
When CONFIG_MODULES is disabled, we cannot dereference a module pointer:
arch/arm64/kernel/ftrace.c: In function 'ftrace_make_call':
arch/arm64/kernel/ftrace.c:107:36: error: dereferencing pointer to incomplete type 'struct module'
trampoline = (unsigned long *)mod->arch.ftrace_trampoline;
Also, the within_module() function is not defined:
arch/arm64/kernel/ftrace.c: In function 'ftrace_make_nop':
arch/arm64/kernel/ftrace.c:171:8: error: implicit declaration of function 'within_module'; did you mean 'init_module'? [-Werror=implicit-function-declaration]
This addresses both by adding replacing the IS_ENABLED(CONFIG_ARM64_MODULE_PLTS)
checks with #ifdef versions.
Fixes: e71a4e1beb
("arm64: ftrace: add support for far branches to dynamic ftrace")
Reported-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
1eb34b6e51
commit
687644209a
|
@ -71,11 +71,12 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
|
|||
int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
||||
{
|
||||
unsigned long pc = rec->ip;
|
||||
long offset = (long)pc - (long)addr;
|
||||
u32 old, new;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
|
||||
(offset < -SZ_128M || offset >= SZ_128M)) {
|
||||
#ifdef CONFIG_ARM64_MODULE_PLTS
|
||||
long offset = (long)pc - (long)addr;
|
||||
|
||||
if (offset < -SZ_128M || offset >= SZ_128M) {
|
||||
unsigned long *trampoline;
|
||||
struct module *mod;
|
||||
|
||||
|
@ -121,6 +122,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
|||
}
|
||||
addr = (unsigned long)&trampoline[1];
|
||||
}
|
||||
#endif /* CONFIG_ARM64_MODULE_PLTS */
|
||||
|
||||
old = aarch64_insn_gen_nop();
|
||||
new = aarch64_insn_gen_branch_imm(pc, addr, AARCH64_INSN_BRANCH_LINK);
|
||||
|
@ -135,12 +137,13 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
|
|||
unsigned long addr)
|
||||
{
|
||||
unsigned long pc = rec->ip;
|
||||
long offset = (long)pc - (long)addr;
|
||||
bool validate = true;
|
||||
u32 old = 0, new;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
|
||||
(offset < -SZ_128M || offset >= SZ_128M)) {
|
||||
#ifdef CONFIG_ARM64_MODULE_PLTS
|
||||
long offset = (long)pc - (long)addr;
|
||||
|
||||
if (offset < -SZ_128M || offset >= SZ_128M) {
|
||||
u32 replaced;
|
||||
|
||||
/*
|
||||
|
@ -177,6 +180,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
|
|||
old = aarch64_insn_gen_branch_imm(pc, addr,
|
||||
AARCH64_INSN_BRANCH_LINK);
|
||||
}
|
||||
#endif /* CONFIG_ARM64_MODULE_PLTS */
|
||||
|
||||
new = aarch64_insn_gen_nop();
|
||||
|
||||
|
|
Loading…
Reference in New Issue