if (!n) return (unsignedlong)__builtin_return_address(0);
sf = (struct stack_frame *)current_frame_address(); do {
sf = (struct stack_frame *)sf->back_chain; if (!sf) return 0;
} while (--n); return sf->gprs[8];
} #define ftrace_return_address(n) return_address(n)
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS /* * When an ftrace registered caller is tracing a function that is * also set by a register_ftrace_direct() call, it needs to be * differentiated in the ftrace_caller trampoline. To do this, * place the direct caller in the ORIG_GPR2 part of pt_regs. This * tells the ftrace_caller that there's a direct caller.
*/ staticinlinevoid arch_ftrace_set_direct_caller(struct ftrace_regs *fregs, unsignedlong addr)
{ struct pt_regs *regs = &arch_ftrace_regs(fregs)->regs;
regs->orig_gpr2 = addr;
} #endif/* CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS */
/* * Even though the system call numbers are identical for s390/s390x a * different system call table is used for compat tasks. This may lead * to e.g. incorrect or missing trace event sysfs files. * Therefore simply do not trace compat system calls at all. * See kernel/trace/trace_syscalls.c.
*/ #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS staticinlinebool arch_trace_is_compat_syscall(struct pt_regs *regs)
{ return is_compat_task();
}
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME staticinlinebool arch_syscall_match_sym_name(constchar *sym, constchar *name)
{ /* * Skip __s390_ and __s390x_ prefix - due to compat wrappers * and aliasing some symbols of 64 bit system call functions * may get the __s390_ prefix instead of the __s390x_ prefix.
*/ return !strcmp(sym + 7, name) || !strcmp(sym + 8, name);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.