aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel')
-rw-r--r--arch/sparc64/kernel/Makefile2
-rw-r--r--arch/sparc64/kernel/ftrace.c26
2 files changed, 6 insertions, 22 deletions
diff --git a/arch/sparc64/kernel/Makefile b/arch/sparc64/kernel/Makefile
index c0b8009ab196..b3e0b986bef8 100644
--- a/arch/sparc64/kernel/Makefile
+++ b/arch/sparc64/kernel/Makefile
@@ -5,6 +5,8 @@
5EXTRA_AFLAGS := -ansi 5EXTRA_AFLAGS := -ansi
6EXTRA_CFLAGS := -Werror 6EXTRA_CFLAGS := -Werror
7 7
8CFLAGS_REMOVE_ftrace.o = -pg
9
8extra-y := head.o init_task.o vmlinux.lds 10extra-y := head.o init_task.o vmlinux.lds
9 11
10obj-y := process.o setup.o cpu.o idprom.o reboot.o \ 12obj-y := process.o setup.o cpu.o idprom.o reboot.o \
diff --git a/arch/sparc64/kernel/ftrace.c b/arch/sparc64/kernel/ftrace.c
index 4298d0aee713..d0218e73f982 100644
--- a/arch/sparc64/kernel/ftrace.c
+++ b/arch/sparc64/kernel/ftrace.c
@@ -9,12 +9,12 @@
9 9
10static const u32 ftrace_nop = 0x01000000; 10static const u32 ftrace_nop = 0x01000000;
11 11
12notrace unsigned char *ftrace_nop_replace(void) 12unsigned char *ftrace_nop_replace(void)
13{ 13{
14 return (char *)&ftrace_nop; 14 return (char *)&ftrace_nop;
15} 15}
16 16
17notrace unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr) 17unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr)
18{ 18{
19 static u32 call; 19 static u32 call;
20 s32 off; 20 s32 off;
@@ -25,7 +25,7 @@ notrace unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr)
25 return (unsigned char *) &call; 25 return (unsigned char *) &call;
26} 26}
27 27
28notrace int 28int
29ftrace_modify_code(unsigned long ip, unsigned char *old_code, 29ftrace_modify_code(unsigned long ip, unsigned char *old_code,
30 unsigned char *new_code) 30 unsigned char *new_code)
31{ 31{
@@ -59,7 +59,7 @@ ftrace_modify_code(unsigned long ip, unsigned char *old_code,
59 return faulted; 59 return faulted;
60} 60}
61 61
62notrace int ftrace_update_ftrace_func(ftrace_func_t func) 62int ftrace_update_ftrace_func(ftrace_func_t func)
63{ 63{
64 unsigned long ip = (unsigned long)(&ftrace_call); 64 unsigned long ip = (unsigned long)(&ftrace_call);
65 unsigned char old[MCOUNT_INSN_SIZE], *new; 65 unsigned char old[MCOUNT_INSN_SIZE], *new;
@@ -69,24 +69,6 @@ notrace int ftrace_update_ftrace_func(ftrace_func_t func)
69 return ftrace_modify_code(ip, old, new); 69 return ftrace_modify_code(ip, old, new);
70} 70}
71 71
72notrace int ftrace_mcount_set(unsigned long *data)
73{
74 unsigned long ip = (long)(&mcount_call);
75 unsigned long *addr = data;
76 unsigned char old[MCOUNT_INSN_SIZE], *new;
77
78 /*
79 * Replace the mcount stub with a pointer to the
80 * ip recorder function.
81 */
82 memcpy(old, &mcount_call, MCOUNT_INSN_SIZE);
83 new = ftrace_call_replace(ip, *addr);
84 *addr = ftrace_modify_code(ip, old, new);
85
86 return 0;
87}
88
89
90int __init ftrace_dyn_arch_init(void *data) 72int __init ftrace_dyn_arch_init(void *data)
91{ 73{
92 ftrace_mcount_set(data); 74 ftrace_mcount_set(data);