Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.19 91 lines 2.3 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2022 Loongson Technology Corporation Limited 4 */ 5 6#ifndef _ASM_LOONGARCH_FTRACE_H 7#define _ASM_LOONGARCH_FTRACE_H 8 9#define FTRACE_PLT_IDX 0 10#define FTRACE_REGS_PLT_IDX 1 11#define NR_FTRACE_PLTS 2 12 13#ifdef CONFIG_FUNCTION_TRACER 14 15#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ 16 17#ifndef __ASSEMBLER__ 18 19#ifndef CONFIG_DYNAMIC_FTRACE 20 21#define mcount _mcount 22extern void _mcount(void); 23extern void prepare_ftrace_return(unsigned long self_addr, unsigned long callsite_sp, unsigned long old); 24 25#else 26 27struct dyn_ftrace; 28struct dyn_arch_ftrace { }; 29 30#define ARCH_SUPPORTS_FTRACE_OPS 1 31 32#define ftrace_init_nop ftrace_init_nop 33int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec); 34 35static inline unsigned long ftrace_call_adjust(unsigned long addr) 36{ 37 return addr; 38} 39 40void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent); 41 42#endif /* CONFIG_DYNAMIC_FTRACE */ 43 44#ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS 45struct ftrace_ops; 46 47#include <linux/ftrace_regs.h> 48 49static __always_inline struct pt_regs *arch_ftrace_get_regs(struct ftrace_regs *fregs) 50{ 51 return &arch_ftrace_regs(fregs)->regs; 52} 53 54static __always_inline void 55ftrace_regs_set_instruction_pointer(struct ftrace_regs *fregs, unsigned long ip) 56{ 57 instruction_pointer_set(&arch_ftrace_regs(fregs)->regs, ip); 58} 59 60#undef ftrace_regs_get_frame_pointer 61#define ftrace_regs_get_frame_pointer(fregs) \ 62 (arch_ftrace_regs(fregs)->regs.regs[22]) 63 64static __always_inline unsigned long 65ftrace_regs_get_return_address(struct ftrace_regs *fregs) 66{ 67 return *(unsigned long *)(arch_ftrace_regs(fregs)->regs.regs[1]); 68} 69 70#define ftrace_graph_func ftrace_graph_func 71void ftrace_graph_func(unsigned long ip, unsigned long parent_ip, 72 struct ftrace_ops *op, struct ftrace_regs *fregs); 73 74#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS 75static inline void 76__arch_ftrace_set_direct_caller(struct pt_regs *regs, unsigned long addr) 77{ 78 regs->regs[13] = addr; /* t1 */ 79} 80 81#define arch_ftrace_set_direct_caller(fregs, addr) \ 82 __arch_ftrace_set_direct_caller(&arch_ftrace_regs(fregs)->regs, addr) 83#endif /* CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS */ 84 85#endif 86 87#endif /* __ASSEMBLER__ */ 88 89#endif /* CONFIG_FUNCTION_TRACER */ 90 91#endif /* _ASM_LOONGARCH_FTRACE_H */