mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
5cb0bd0712
commit0daf5cb217
upstream. There's another compilation fail (first here [1]) reported by kernel test robot for W=1 clang build: >> samples/ftrace/ftrace-direct-multi-modify.c:7:6: warning: no previous prototype for function 'my_direct_func1' [-Wmissing-prototypes] void my_direct_func1(unsigned long ip) Direct functions in ftrace direct sample modules need to have prototypes defined. They are already global in order to be visible for the inline assembly, so there's no problem. The kernel test robot reported just error for ftrace-direct-multi-modify, but I got same errors also for the rest of the modules touched by this patch. [1]67d4f6e3bf
ftrace/samples: Add missing prototype for my_direct_func Link: https://lkml.kernel.org/r/20211219135317.212430-1-jolsa@kernel.org Reported-by: kernel test robot <lkp@intel.com> Fixes:e1067a07cf
("ftrace/samples: Add module to test multi direct modify interface") Fixes:ae0cc3b7e7
("ftrace/samples: Add a sample module that implements modify_ftrace_direct()") Fixes:156473a0ff
("ftrace: Add another example of register_ftrace_direct() use case") Fixes:b06457c83a
("ftrace: Add sample module that uses register_ftrace_direct()") Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
#include <linux/module.h>
|
|
|
|
#include <linux/mm.h> /* for handle_mm_fault() */
|
|
#include <linux/ftrace.h>
|
|
|
|
extern void my_direct_func(struct vm_area_struct *vma,
|
|
unsigned long address, unsigned int flags);
|
|
|
|
void my_direct_func(struct vm_area_struct *vma,
|
|
unsigned long address, unsigned int flags)
|
|
{
|
|
trace_printk("handle mm fault vma=%p address=%lx flags=%x\n",
|
|
vma, address, flags);
|
|
}
|
|
|
|
extern void my_tramp(void *);
|
|
|
|
asm (
|
|
" .pushsection .text, \"ax\", @progbits\n"
|
|
" .type my_tramp, @function\n"
|
|
" .globl my_tramp\n"
|
|
" my_tramp:"
|
|
" pushq %rbp\n"
|
|
" movq %rsp, %rbp\n"
|
|
" pushq %rdi\n"
|
|
" pushq %rsi\n"
|
|
" pushq %rdx\n"
|
|
" call my_direct_func\n"
|
|
" popq %rdx\n"
|
|
" popq %rsi\n"
|
|
" popq %rdi\n"
|
|
" leave\n"
|
|
" ret\n"
|
|
" .size my_tramp, .-my_tramp\n"
|
|
" .popsection\n"
|
|
);
|
|
|
|
|
|
static int __init ftrace_direct_init(void)
|
|
{
|
|
return register_ftrace_direct((unsigned long)handle_mm_fault,
|
|
(unsigned long)my_tramp);
|
|
}
|
|
|
|
static void __exit ftrace_direct_exit(void)
|
|
{
|
|
unregister_ftrace_direct((unsigned long)handle_mm_fault,
|
|
(unsigned long)my_tramp);
|
|
}
|
|
|
|
module_init(ftrace_direct_init);
|
|
module_exit(ftrace_direct_exit);
|
|
|
|
MODULE_AUTHOR("Steven Rostedt");
|
|
MODULE_DESCRIPTION("Another example use case of using register_ftrace_direct()");
|
|
MODULE_LICENSE("GPL");
|