linux_old1/arch/s390/kernel
Heiko Carstens c933146a5e s390/ftrace,kprobes: allow to patch first instruction
If the function tracer is enabled, allow to set kprobes on the first
instruction of a function (which is the function trace caller):

If no kprobe is set handling of enabling and disabling function tracing
of a function simply patches the first instruction. Either it is a nop
(right now it's an unconditional branch, which skips the mcount block),
or it's a branch to the ftrace_caller() function.

If a kprobe is being placed on a function tracer calling instruction
we encode if we actually have a nop or branch in the remaining bytes
after the breakpoint instruction (illegal opcode).
This is possible, since the size of the instruction used for the nop
and branch is six bytes, while the size of the breakpoint is only
two bytes.
Therefore the first two bytes contain the illegal opcode and the last
four bytes contain either "0" for nop or "1" for branch. The kprobes
code will then execute/simulate the correct instruction.

Instruction patching for kprobes and function tracer is always done
with stop_machine(). Therefore we don't have any races where an
instruction is patched concurrently on a different cpu.
Besides that also the program check handler which executes the function
trace caller instruction won't be executed concurrently to any
stop_machine() execution.

This allows to keep full fault based kprobes handling which generates
correct pt_regs contents automatically.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2014-10-27 13:27:27 +01:00
..
vdso32 s390/vdso: fix stack corruption 2014-10-27 13:27:02 +01:00
vdso64 s390/vdso: fix stack corruption 2014-10-27 13:27:02 +01:00
.gitignore s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
Makefile s390/ftrace: remove 31 bit ftrace support 2014-10-09 09:14:18 +02:00
asm-offsets.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
audit.c
audit.h
base.S s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cache.c s390, cacheinfo: Fix CPU hotplug callback registration 2014-03-20 13:43:41 +01:00
compat_audit.c
compat_linux.c s390/compat: add sync_file_range and fallocate compat syscalls 2014-03-04 09:05:47 +01:00
compat_linux.h s390: add support for vector extension 2014-10-09 09:14:13 +02:00
compat_ptrace.h [S390] ptrace cleanup 2011-01-05 12:47:31 +01:00
compat_signal.c s390: add support for vector extension 2014-10-09 09:14:13 +02:00
compat_wrapper.c s390: wire up bpf syscall 2014-10-17 14:45:48 +02:00
cpcmd.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
crash_dump.c s390/kdump: add support for vector extension 2014-10-09 09:14:16 +02:00
debug.c s390: convert use of typedef ctl_table to struct ctl_table 2013-10-28 08:36:25 +01:00
diag.c [S390] replace diag10() with diag10_range() function 2011-05-10 17:13:43 +02:00
dis.c s390/disassembler: add vector instructions 2014-10-09 09:14:15 +02:00
dumpstack.c s390: show_registers() should not map user space addresses to kernel symbols 2014-04-11 13:53:27 +02:00
early.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
ebcdic.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
entry.S At over 200 commits, covering almost all supported architectures, this 2014-06-04 08:47:12 -07:00
entry.h s390: add support for vector extension 2014-10-09 09:14:13 +02:00
entry64.S s390/uprobes: architecture backend for uprobes 2014-09-25 10:52:17 +02:00
ftrace.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
head.S s390/head.s: use zero as address for stfl 2014-09-25 10:52:06 +02:00
head31.S s390/mm: Convert bootmem to memblock 2014-05-20 08:58:40 +02:00
head64.S s390: fix kernel crash due to linkage stack instructions 2014-02-05 11:00:50 +01:00
head_kdump.S s390/kdump: Use 64 bit mode for 0x10000 entry point 2012-10-18 17:50:09 +02:00
idle.c Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
ipl.c s390/ipl: Add missing SCSI loadparm attributes to /sys/firmware 2014-09-01 09:56:29 +02:00
irq.c s390/nohz: use a per-cpu flag for arch_needs_cpu 2014-10-09 09:14:02 +02:00
jump_label.c s390/jump-label: add arch_jump_label_transform_static() 2011-10-25 11:54:37 -07:00
kprobes.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
lgr.c s390/sysinfo,stsi: change return code handling 2012-09-26 15:45:12 +02:00
machine_kexec.c s390/kdump: add support for vector extension 2014-10-09 09:14:16 +02:00
mcount.S s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
module.c mm/arch: use NUMA_NO_NODE 2013-11-13 12:09:05 +09:00
nmi.c Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
os_info.c Include missing linux/slab.h inclusions 2013-04-29 15:42:01 -04:00
perf_cpum_cf.c s390: Replace __get_cpu_var uses 2014-08-26 13:45:52 -04:00
perf_cpum_cf_events.c s390/cpum_cf: Export event names in sysfs 2013-12-16 14:37:50 +01:00
perf_cpum_sf.c s390: Replace __get_cpu_var uses 2014-08-26 13:45:52 -04:00
perf_event.c s390/perf: make print_debug_cf() static 2014-03-14 12:59:32 +01:00
pgm_check.S s390: add support for vector extension 2014-10-09 09:14:13 +02:00
process.c s390/idle: consolidate idle functions and definitions 2014-10-09 09:14:03 +02:00
processor.c Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
ptrace.c Merge git://git.infradead.org/users/eparis/audit 2014-10-19 16:25:56 -07:00
reipl.S s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
reipl64.S s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
relocate_kernel.S s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
relocate_kernel64.S s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
runtime_instr.c s390/irq: Use defines for external interruption codes 2014-04-03 14:30:52 +02:00
s390_ksyms.c s390: use IS_ENABLED to check if a CONFIG is set to y or m 2013-12-16 14:38:04 +01:00
sclp.S s390/irq: Use defines for external interruption codes 2014-04-03 14:30:52 +02:00
setup.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
signal.c s390: add support for vector extension 2014-10-09 09:14:13 +02:00
smp.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
stacktrace.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
suspend.c nosave: consolidate __nosave_{begin,end} in <asm/sections.h> 2014-10-09 22:26:04 -04:00
swsusp_asm64.S s390/hibernate: add early resume function 2013-08-30 08:57:15 +02:00
sys_s390.c teach SYSCALL_DEFINE<n> how to deal with long long/unsigned long long 2013-03-03 22:46:22 -05:00
syscalls.S s390: wire up bpf syscall 2014-10-17 14:45:48 +02:00
sysinfo.c s390: delete __cpuinit usage from all s390 files 2013-07-14 19:36:53 -04:00
time.c Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
topology.c s390/topology: call set_sched_topology early 2014-09-26 12:22:39 +02:00
traps.c s390: add support for vector extension 2014-10-09 09:14:13 +02:00
uprobes.c s390/uprobes: fix kprobes dependency 2014-10-17 14:45:51 +02:00
vdso.c arm64,ia64,ppc,s390,sh,tile,um,x86,mm: remove default gate area 2014-08-08 15:57:27 -07:00
vmlinux.lds.S s390/linker skript: discard exit.data at runtime 2013-02-14 15:55:21 +01:00
vtime.c s390/time: use stck clock fast for do_account_vtime 2014-10-27 13:27:01 +01:00