File tree Expand file tree Collapse file tree 6 files changed +78
-2
lines changed Expand file tree Collapse file tree 6 files changed +78
-2
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ config XTENSA
19
19
select CLONE_BACKWARDS
20
20
select IRQ_DOMAIN
21
21
select HAVE_OPROFILE
22
+ select HAVE_FUNCTION_TRACER
22
23
help
23
24
Xtensa processors are 32-bit RISC machines designed by Tensilica
24
25
primarily for embedded systems. These processors are both
Original file line number Diff line number Diff line change @@ -7,6 +7,13 @@ zlib := inffast.c inflate.c inftrees.c
7
7
lib-y += $(zlib:.c=.o ) zmem.o
8
8
9
9
ccflags-y := -Ilib/zlib_inflate
10
+ ifdef CONFIG_FUNCTION_TRACER
11
+ CFLAGS_REMOVE_inflate.o = -pg
12
+ CFLAGS_REMOVE_zmem.o = -pg
13
+ CFLAGS_REMOVE_inftrees.o = -pg
14
+ CFLAGS_REMOVE_inffast.o = -pg
15
+ endif
16
+
10
17
11
18
quiet_cmd_copy_zlib = COPY $@
12
19
cmd_copy_zlib = cat $< > $@
Original file line number Diff line number Diff line change 13
13
#include <asm/processor.h>
14
14
15
15
#define HAVE_ARCH_CALLER_ADDR
16
+ #ifndef __ASSEMBLY__
16
17
#define CALLER_ADDR0 ({ unsigned long a0, a1; \
17
18
__asm__ __volatile__ ( \
18
19
"mov %0, a0\n" \
@@ -24,10 +25,22 @@ extern unsigned long return_address(unsigned level);
24
25
#define CALLER_ADDR1 return_address(1)
25
26
#define CALLER_ADDR2 return_address(2)
26
27
#define CALLER_ADDR3 return_address(3)
27
- #else
28
+ #else /* CONFIG_FRAME_POINTER */
28
29
#define CALLER_ADDR1 (0)
29
30
#define CALLER_ADDR2 (0)
30
31
#define CALLER_ADDR3 (0)
31
- #endif
32
+ #endif /* CONFIG_FRAME_POINTER */
33
+ #endif /* __ASSEMBLY__ */
34
+
35
+ #ifdef CONFIG_FUNCTION_TRACER
36
+
37
+ #define MCOUNT_ADDR ((unsigned long)(_mcount))
38
+ #define MCOUNT_INSN_SIZE 3
39
+
40
+ #ifndef __ASSEMBLY__
41
+ extern void _mcount (void );
42
+ #define mcount _mcount
43
+ #endif /* __ASSEMBLY__ */
44
+ #endif /* CONFIG_FUNCTION_TRACER */
32
45
33
46
#endif /* _XTENSA_FTRACE_H */
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ obj-y := align.o coprocessor.o entry.o irq.o pci-dma.o platform.o process.o \
11
11
obj-$(CONFIG_KGDB) += xtensa-stub.o
12
12
obj-$(CONFIG_PCI) += pci.o
13
13
obj-$(CONFIG_MODULES) += xtensa_ksyms.o module.o
14
+ obj-$(CONFIG_FUNCTION_TRACER) += mcount.o
14
15
15
16
AFLAGS_head.o += -mtext-section-literals
16
17
Original file line number Diff line number Diff line change
1
+ /*
2
+ * arch/xtensa/kernel/mcount.S
3
+ *
4
+ * Xtensa specific mcount support
5
+ *
6
+ * This file is subject to the terms and conditions of the GNU General Public
7
+ * License. See the file "COPYING" in the main directory of this archive
8
+ * for more details.
9
+ *
10
+ * Copyright (C) 2013 Tensilica Inc.
11
+ */
12
+
13
+ #include <linux/linkage.h>
14
+ #include <asm/ftrace.h>
15
+
16
+ /*
17
+ * Entry condition:
18
+ *
19
+ * a2: a0 of the caller
20
+ */
21
+
22
+ ENTRY (_mcount)
23
+
24
+ entry a1 , 16
25
+
26
+ movi a4 , ftrace_trace_function
27
+ l32i a4 , a4 , 0
28
+ movi a3 , ftrace_stub
29
+ bne a3 , a4 , 1f
30
+ retw
31
+
32
+ 1 : xor a7 , a2 , a1
33
+ movi a3 , 0x3fffffff
34
+ and a7 , a7 , a3
35
+ xor a7 , a7 , a1
36
+
37
+ xor a6 , a0 , a1
38
+ and a6 , a6 , a3
39
+ xor a6 , a6 , a1
40
+ addi a6 , a6 , -MCOUNT_INSN_SIZE
41
+ callx4 a4
42
+
43
+ retw
44
+
45
+ ENDPROC (_mcount)
46
+
47
+ ENTRY (ftrace_stub)
48
+ entry a1 , 16
49
+ retw
50
+ ENDPROC (ftrace_stub)
Original file line number Diff line number Diff line change @@ -124,3 +124,7 @@ extern long common_exception_return;
124
124
extern long _spill_registers ;
125
125
EXPORT_SYMBOL (common_exception_return );
126
126
EXPORT_SYMBOL (_spill_registers );
127
+
128
+ #ifdef CONFIG_FUNCTION_TRACER
129
+ EXPORT_SYMBOL (_mcount );
130
+ #endif
You can’t perform that action at this time.
0 commit comments