Re: [PATCH v22 19/20] ftrace: Add ftrace_get_symaddr to convert fentry_ip to symaddr
From: Gabriel de Perthuis <hidden>
Date: 2025-02-04 14:20:24
Also in:
linux-arch
Thank you for the prompt response!
Sorry, this doesn't build.
New, different errors:
AS arch/x86/kernel/ftrace_64.o
In file included from ./include/linux/kcsan-checks.h:13,
from ./include/linux/instrumented.h:12,
from ./include/linux/uaccess.h:6,
from ./arch/x86/include/asm/ftrace.h:20,
from arch/x86/kernel/ftrace_64.S:11:
./include/linux/compiler_attributes.h:91:20: error: missing binary
operator before token "("
91 | #if __has_attribute(__copy__)
| ^
./include/linux/compiler_attributes.h:103:20: error: missing binary
operator before token "("
103 | #if __has_attribute(__diagnose_as_builtin__)
| ^
./include/linux/compiler_attributes.h:126:20: error: missing binary
operator before token "("
126 | #if __has_attribute(__designated_init__)
| ^
./include/linux/compiler_attributes.h:137:20: error: missing binary
operator before token "("
137 | #if __has_attribute(__error__)
| ^
./include/linux/compiler_attributes.h:148:20: error: missing binary
operator before token "("
148 | #if __has_attribute(__externally_visible__)
| ^
./include/linux/compiler_attributes.h:185:20: error: missing binary
operator before token "("
185 | #if __has_attribute(__no_caller_saved_registers__)
| ^
./include/linux/compiler_attributes.h:196:20: error: missing binary
operator before token "("
196 | #if __has_attribute(__noclone__)
| ^
./include/linux/compiler_attributes.h:213:20: error: missing binary
operator before token "("
213 | #if __has_attribute(__fallthrough__)
| ^
./include/linux/compiler_attributes.h:239:20: error: missing binary
operator before token "("
239 | #if __has_attribute(__nonstring__)
| ^
./include/linux/compiler_attributes.h:251:20: error: missing binary
operator before token "("
251 | #if __has_attribute(__no_profile_instrument_function__)
| ^
./include/linux/compiler_attributes.h:270:20: error: missing binary
operator before token "("
270 | #if __has_attribute(__no_stack_protector__)
| ^
./include/linux/compiler_attributes.h:281:20: error: missing binary
operator before token "("
281 | #if __has_attribute(__overloadable__)
| ^
./include/linux/compiler_attributes.h:300:20: error: missing binary
operator before token "("
300 | #if __has_attribute(__pass_dynamic_object_size__)
| ^
./include/linux/compiler_attributes.h:305:20: error: missing binary
operator before token "("
305 | #if __has_attribute(__pass_object_size__)
| ^
./include/linux/compiler_attributes.h:329:20: error: missing binary
operator before token "("
329 | #if __has_attribute(__uninitialized__)
| ^
./include/linux/compiler_attributes.h:375:20: error: missing binary
operator before token "("
375 | #if __has_attribute(__warning__)
| ^
./include/linux/compiler_attributes.h:392:20: error: missing binary
operator before token "("
392 | #if __has_attribute(disable_sanitizer_instrumentation)
| ^
In file included from ./include/linux/mm_types_task.h:11,
from ./include/linux/sched.h:38,
from ./include/linux/uaccess.h:9:
./include/linux/align.h:8:9: warning: "ALIGN" redefined
8 | #define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
| ^~~~~
In file included from ./include/linux/export.h:6,
from arch/x86/kernel/ftrace_64.S:6:
./include/linux/linkage.h:103:9: note: this is the location of the
previous definition
103 | #define ALIGN __ALIGN
| ^~~~~
make[7]: *** [scripts/Makefile.build:339: arch/x86/kernel/ftrace_64.o] Error 1
Am attaching the .config so you can reproduce these easily.
Le mar. 4 févr. 2025 à 10:19, Masami Hiramatsu [off-list ref] a écrit :quoted hunk ↗ jump to hunk
On Mon, 3 Feb 2025 22:33:48 +0100 Gabriel de Perthuis [off-list ref] wrote:quoted
Hello, I got errors building Linux 6.14-rc1 that were solved by reverting this patch and the one after (19/20 and 20/20). Errors look like: In file included from ./arch/x86/include/asm/asm-prototypes.h:2, from <stdin>:3: ./arch/x86/include/asm/ftrace.h: In function 'arch_ftrace_get_symaddr': ./arch/x86/include/asm/ftrace.h:46:21: error: implicit declaration of function 'get_kernel_nofault' [-Wimplicit-function-declaration] 46 | if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE))) | ^~~~~~~~~~~~~~~~~~ Will send .config on request if needed.Thanks for the report! -------<arch/x86/include/asm/asm-prototypes.h> /* SPDX-License-Identifier: GPL-2.0 */ #include <asm/ftrace.h> #include <linux/uaccess.h> ----- Ah, that's why... get_kernel_nofault() is defined in linux/uaccess.h. I also found that is_endbr() is in asm/ibt.h. Can you try this? Thank you,diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h index f9cb4d07df58..d24d7c71253f 100644 --- a/arch/x86/include/asm/ftrace.h +++ b/arch/x86/include/asm/ftrace.h@@ -16,24 +16,9 @@ # include <asm/ibt.h> /* Add offset for endbr64 if IBT enabled */ # define FTRACE_MCOUNT_MAX_OFFSET ENDBR_INSN_SIZE -#endif - -#ifdef CONFIG_DYNAMIC_FTRACE -#define ARCH_SUPPORTS_FTRACE_OPS 1 -#endif - -#ifndef __ASSEMBLY__ -extern void __fentry__(void); - -static inline unsigned long ftrace_call_adjust(unsigned long addr) -{ - /* - * addr is the address of the mcount call instruction. - * recordmcount does the necessary offset calculation. - */ - return addr; -} +#include <linux/uaccess.h> +/* This only supports fentry based ftrace. */ static inline unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip) { #ifdef CONFIG_X86_KERNEL_IBT@@ -55,6 +40,24 @@ static inline unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip) } #define ftrace_get_symaddr(fentry_ip) arch_ftrace_get_symaddr(fentry_ip) +#endif + +#ifdef CONFIG_DYNAMIC_FTRACE +#define ARCH_SUPPORTS_FTRACE_OPS 1 +#endif + +#ifndef __ASSEMBLY__ +extern void __fentry__(void); + +static inline unsigned long ftrace_call_adjust(unsigned long addr) +{ + /* + * addr is the address of the mcount call instruction. + * recordmcount does the necessary offset calculation. + */ + return addr; +} + #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS #include <linux/ftrace_regs.h> --Masami Hiramatsu (Google) [off-list ref]
Attachments
- .config [application/octet-stream] 191001 bytes