root/arch/x86/include/asm/ftrace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ftrace_call_adjust
  2. arch_syscall_match_sym_name
  3. arch_trace_is_compat_syscall

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_X86_FTRACE_H
   3 #define _ASM_X86_FTRACE_H
   4 
   5 #ifdef CONFIG_FUNCTION_TRACER
   6 #ifndef CC_USING_FENTRY
   7 # error Compiler does not support fentry?
   8 #endif
   9 # define MCOUNT_ADDR            ((unsigned long)(__fentry__))
  10 #define MCOUNT_INSN_SIZE        5 /* sizeof mcount call */
  11 
  12 #ifdef CONFIG_DYNAMIC_FTRACE
  13 #define ARCH_SUPPORTS_FTRACE_OPS 1
  14 #endif
  15 
  16 #define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
  17 
  18 #ifndef __ASSEMBLY__
  19 extern atomic_t modifying_ftrace_code;
  20 extern void __fentry__(void);
  21 
  22 static inline unsigned long ftrace_call_adjust(unsigned long addr)
  23 {
  24         /*
  25          * addr is the address of the mcount call instruction.
  26          * recordmcount does the necessary offset calculation.
  27          */
  28         return addr;
  29 }
  30 
  31 #ifdef CONFIG_DYNAMIC_FTRACE
  32 
  33 struct dyn_arch_ftrace {
  34         /* No extra data needed for x86 */
  35 };
  36 
  37 int ftrace_int3_handler(struct pt_regs *regs);
  38 
  39 #define FTRACE_GRAPH_TRAMP_ADDR FTRACE_GRAPH_ADDR
  40 
  41 #endif /*  CONFIG_DYNAMIC_FTRACE */
  42 #endif /* __ASSEMBLY__ */
  43 #endif /* CONFIG_FUNCTION_TRACER */
  44 
  45 
  46 #ifndef __ASSEMBLY__
  47 
  48 #define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
  49 static inline bool arch_syscall_match_sym_name(const char *sym, const char *name)
  50 {
  51         /*
  52          * Compare the symbol name with the system call name. Skip the
  53          * "__x64_sys", "__ia32_sys" or simple "sys" prefix.
  54          */
  55         return !strcmp(sym + 3, name + 3) ||
  56                 (!strncmp(sym, "__x64_", 6) && !strcmp(sym + 9, name + 3)) ||
  57                 (!strncmp(sym, "__ia32_", 7) && !strcmp(sym + 10, name + 3));
  58 }
  59 
  60 #ifndef COMPILE_OFFSETS
  61 
  62 #if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_IA32_EMULATION)
  63 #include <linux/compat.h>
  64 
  65 /*
  66  * Because ia32 syscalls do not map to x86_64 syscall numbers
  67  * this screws up the trace output when tracing a ia32 task.
  68  * Instead of reporting bogus syscalls, just do not trace them.
  69  *
  70  * If the user really wants these, then they should use the
  71  * raw syscall tracepoints with filtering.
  72  */
  73 #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS 1
  74 static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
  75 {
  76         return in_32bit_syscall();
  77 }
  78 #endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_IA32_EMULATION */
  79 #endif /* !COMPILE_OFFSETS */
  80 #endif /* !__ASSEMBLY__ */
  81 
  82 #endif /* _ASM_X86_FTRACE_H */

/* [<][>][^][v][top][bottom][index][help] */