diff options
Diffstat (limited to 'arch/x86/kernel/ftrace.c')
| -rw-r--r-- | arch/x86/kernel/ftrace.c | 84 | 
1 files changed, 7 insertions, 77 deletions
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c index 9dbb527e165..5a1b9758fd6 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c @@ -9,6 +9,8 @@   * the dangers of modifying code on the run.   */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/spinlock.h>  #include <linux/hardirq.h>  #include <linux/uaccess.h> @@ -336,15 +338,15 @@ int __init ftrace_dyn_arch_init(void *data)  	switch (faulted) {  	case 0: -		pr_info("ftrace: converting mcount calls to 0f 1f 44 00 00\n"); +		pr_info("converting mcount calls to 0f 1f 44 00 00\n");  		memcpy(ftrace_nop, ftrace_test_p6nop, MCOUNT_INSN_SIZE);  		break;  	case 1: -		pr_info("ftrace: converting mcount calls to 66 66 66 66 90\n"); +		pr_info("converting mcount calls to 66 66 66 66 90\n");  		memcpy(ftrace_nop, ftrace_test_nop5, MCOUNT_INSN_SIZE);  		break;  	case 2: -		pr_info("ftrace: converting mcount calls to jmp . + 5\n"); +		pr_info("converting mcount calls to jmp . + 5\n");  		memcpy(ftrace_nop, ftrace_test_jmp, MCOUNT_INSN_SIZE);  		break;  	} @@ -468,82 +470,10 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,  #ifdef CONFIG_FTRACE_SYSCALLS -extern unsigned long __start_syscalls_metadata[]; -extern unsigned long __stop_syscalls_metadata[];  extern unsigned long *sys_call_table; -static struct syscall_metadata **syscalls_metadata; - -static struct syscall_metadata *find_syscall_meta(unsigned long *syscall) -{ -	struct syscall_metadata *start; -	struct syscall_metadata *stop; -	char str[KSYM_SYMBOL_LEN]; - - -	start = (struct syscall_metadata *)__start_syscalls_metadata; -	stop = (struct syscall_metadata *)__stop_syscalls_metadata; -	kallsyms_lookup((unsigned long) syscall, NULL, NULL, NULL, str); - -	for ( ; start < stop; start++) { -		if (start->name && !strcmp(start->name, str)) -			return start; -	} -	return NULL; -} - -struct syscall_metadata *syscall_nr_to_meta(int nr) -{ -	if (!syscalls_metadata || nr >= NR_syscalls || nr < 0) -		return NULL; - -	return syscalls_metadata[nr]; -} - -int syscall_name_to_nr(char *name) +unsigned long __init arch_syscall_addr(int nr)  { -	int i; - -	if (!syscalls_metadata) -		return -1; - -	for (i = 0; i < NR_syscalls; i++) { -		if (syscalls_metadata[i]) { -			if (!strcmp(syscalls_metadata[i]->name, name)) -				return i; -		} -	} -	return -1; -} - -void set_syscall_enter_id(int num, int id) -{ -	syscalls_metadata[num]->enter_id = id; -} - -void set_syscall_exit_id(int num, int id) -{ -	syscalls_metadata[num]->exit_id = id; -} - -static int __init arch_init_ftrace_syscalls(void) -{ -	int i; -	struct syscall_metadata *meta; -	unsigned long **psys_syscall_table = &sys_call_table; - -	syscalls_metadata = kzalloc(sizeof(*syscalls_metadata) * -					NR_syscalls, GFP_KERNEL); -	if (!syscalls_metadata) { -		WARN_ON(1); -		return -ENOMEM; -	} - -	for (i = 0; i < NR_syscalls; i++) { -		meta = find_syscall_meta(psys_syscall_table[i]); -		syscalls_metadata[i] = meta; -	} -	return 0; +	return (unsigned long)(&sys_call_table)[nr];  } -arch_initcall(arch_init_ftrace_syscalls);  #endif  |