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

[S390] ftrace: function tracer backend for s390

This implements just the basic function tracer (_mcount) backend for s390.
The dynamic variant will come later.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Heiko Carstens and committed by
Martin Schwidefsky
5d360a75 98df67b3

+76
+1
arch/s390/Kconfig
··· 74 74 config S390 75 75 def_bool y 76 76 select USE_GENERIC_SMP_HELPERS if SMP 77 + select HAVE_FUNCTION_TRACER 77 78 select HAVE_OPROFILE 78 79 select HAVE_KPROBES 79 80 select HAVE_KRETPROBES
+8
arch/s390/include/asm/ftrace.h
··· 1 + #ifndef _ASM_S390_FTRACE_H 2 + #define _ASM_S390_FTRACE_H 3 + 4 + #ifndef __ASSEMBLY__ 5 + extern void _mcount(void); 6 + #endif 7 + 8 + #endif /* _ASM_S390_FTRACE_H */
+6
arch/s390/kernel/Makefile
··· 2 2 # Makefile for the linux kernel. 3 3 # 4 4 5 + ifdef CONFIG_FUNCTION_TRACER 6 + # Do not trace early boot code 7 + CFLAGS_REMOVE_early.o = -pg 8 + endif 9 + 5 10 # 6 11 # Passing null pointers is ok for smp code, since we access the lowcore here. 7 12 # ··· 39 34 obj-$(CONFIG_VIRT_TIMER) += vtime.o 40 35 obj-$(CONFIG_STACKTRACE) += stacktrace.o 41 36 obj-$(CONFIG_KPROBES) += kprobes.o 37 + obj-$(CONFIG_FUNCTION_TRACER) += mcount.o 42 38 43 39 # Kexec part 44 40 S390_KEXEC_OBJS := machine_kexec.o crash.o
+56
arch/s390/kernel/mcount.S
··· 1 + /* 2 + * Copyright IBM Corp. 2008 3 + * 4 + * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, 5 + * 6 + */ 7 + 8 + #ifndef CONFIG_64BIT 9 + .globl _mcount 10 + _mcount: 11 + stm %r0,%r5,8(%r15) 12 + st %r14,56(%r15) 13 + lr %r1,%r15 14 + ahi %r15,-96 15 + l %r3,100(%r15) 16 + la %r2,0(%r14) 17 + st %r1,0(%r15) 18 + la %r3,0(%r3) 19 + bras %r14,0f 20 + .long ftrace_trace_function 21 + 0: l %r14,0(%r14) 22 + l %r14,0(%r14) 23 + basr %r14,%r14 24 + ahi %r15,96 25 + lm %r0,%r5,8(%r15) 26 + l %r14,56(%r15) 27 + br %r14 28 + 29 + .globl ftrace_stub 30 + ftrace_stub: 31 + br %r14 32 + 33 + #else /* CONFIG_64BIT */ 34 + 35 + .globl _mcount 36 + _mcount: 37 + stmg %r0,%r5,16(%r15) 38 + stg %r14,112(%r15) 39 + lgr %r1,%r15 40 + aghi %r15,-160 41 + stg %r1,0(%r15) 42 + lgr %r2,%r14 43 + lg %r3,168(%r15) 44 + larl %r14,ftrace_trace_function 45 + lg %r14,0(%r14) 46 + basr %r14,%r14 47 + aghi %r15,160 48 + lmg %r0,%r5,16(%r15) 49 + lg %r14,112(%r15) 50 + br %r14 51 + 52 + .globl ftrace_stub 53 + ftrace_stub: 54 + br %r14 55 + 56 + #endif /* CONFIG_64BIT */
+5
arch/s390/kernel/s390_ksyms.c
··· 14 14 #include <asm/delay.h> 15 15 #include <asm/pgalloc.h> 16 16 #include <asm/setup.h> 17 + #include <asm/ftrace.h> 17 18 #ifdef CONFIG_IP_MULTICAST 18 19 #include <net/arp.h> 19 20 #endif ··· 44 43 EXPORT_SYMBOL(console_mode); 45 44 EXPORT_SYMBOL(console_devno); 46 45 EXPORT_SYMBOL(console_irq); 46 + 47 + #ifdef CONFIG_FUNCTION_TRACER 48 + EXPORT_SYMBOL(_mcount); 49 + #endif