linux/scripts
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
..
basic kernel: build bin2c based on config option CONFIG_BUILD_BIN2C 2014-08-08 15:57:32 -07:00
coccinelle coccinelle: misc: semantic patch to delete overly complex return code processing 2014-09-26 13:42:31 +02:00
dtc kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
genksyms genksyms: fix typeof() handling 2014-04-03 16:20:52 -07:00
kconfig Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
ksymoops
mod arm64 updates for 3.18: 2014-10-08 05:34:24 -04:00
package Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:27:48 +02:00
rt-tester kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
selinux kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
tracing kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
.gitignore bin2c: move bin2c in scripts/basic 2014-08-08 15:57:32 -07:00
Kbuild.include kbuild: simplify build, clean, modbuiltin shorthands 2014-10-02 15:12:41 +02:00
Lindent
Makefile bin2c: move bin2c in scripts/basic 2014-08-08 15:57:32 -07:00
Makefile.asm-generic kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
Makefile.build kbuild: remove obj-n and lib-n handling 2014-10-02 13:55:02 +02:00
Makefile.clean kbuild: simplify build, clean, modbuiltin shorthands 2014-10-02 15:12:41 +02:00
Makefile.extrawarn kbuild, LLVMLinux: Supress warnings unless W=1-3 2014-08-05 15:40:01 +02:00
Makefile.fwinst kbuild: remove obj-n and lib-n handling 2014-10-02 13:55:02 +02:00
Makefile.headersinst kbuild: fix make headers_install when path is too long 2013-05-17 22:10:35 +02:00
Makefile.help Add a target to use the Coccinelle checker 2010-06-12 00:00:29 +02:00
Makefile.host kbuild: handle the dependency of multi-objs hostprogs appropriately 2014-08-19 10:26:20 +02:00
Makefile.lib kbuild: handle multi-objs dependency appropriately 2014-08-19 10:26:19 +02:00
Makefile.modbuiltin kbuild: Create output directory in Makefile.modbuiltin 2010-06-10 12:23:08 +02:00
Makefile.modinst kbuild: handle module compression while running 'make modules_install'. 2014-08-27 21:54:12 +09:30
Makefile.modpost modpost: Optionally ignore secondary errors seen if a single module build fails 2013-09-23 15:45:03 +09:30
Makefile.modsign modsign: lookup lines ending in .ko in .mod files 2014-08-27 21:54:11 +09:30
analyze_suspend.py PM / tools: analyze_suspend.py: update to v3.0 2014-08-09 02:47:58 +02:00
asn1_compiler.c X.509: remove possible code fragility: enumeration values not handled 2013-09-25 17:17:01 +01:00
bloat-o-meter bloat-o-meter: Ignore syscall aliases SyS_ and compat_SyS_ 2014-08-23 13:08:48 -07:00
bootgraph.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
checkincludes.pl checkincludes: fix perlcritic warnings 2010-03-07 21:19:57 +01:00
checkkconfigsymbols.sh scripts/checkkconfigsymbols.sh: replace echo -e with printf 2013-08-28 17:00:47 +02:00
checkpatch.pl checkpatch: warn on logging functions with KERN_<LEVEL> 2014-10-14 02:18:15 +02:00
checkstack.pl Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2014-10-07 21:16:26 -04:00
checksyscalls.sh scripts/checksyscalls.sh: Make renameat optional 2014-05-20 10:59:38 +02:00
checkversion.pl kbuild: don't warn about include/linux/version.h not including itself 2011-04-29 15:38:55 +02:00
cleanfile
cleanpatch
coccicheck Coccinelle: Update information about the minimal version required 2013-07-03 22:58:20 +02:00
config kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
conmakehash.c kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
decode_stacktrace.sh decode_stacktrace: make stack dump output useful again 2014-06-10 15:29:43 -07:00
decodecode scripts/decodecode: make faulting insn ptr more robust 2013-04-29 15:54:27 -07:00
depmod.sh depmod: pass -P $CONFIG_SYMBOL_PREFIX 2013-02-22 11:52:31 +01:00
diffconfig diffconfig: Update script to support python versions 2.5 through 3.3 2013-09-01 21:24:51 +02:00
docproc.c kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
export_report.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
extract-ikconfig scripts/extract-ikconfig: add xz compression support 2011-02-10 15:23:03 +01:00
extract-vmlinux scripts: add extract-vmlinux 2011-08-31 16:12:17 +02:00
gcc-goto.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-ld kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-version.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_32-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_64-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gen_initramfs_list.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
get_maintainer.pl scripts: Teach get_maintainer.pl about the new "R:" tag 2014-07-08 14:47:17 -07:00
gfp-translate chmod +x scripts/gfp-translate 2012-06-27 12:44:29 -07:00
headerdep.pl headerdep: perlcritic warning 2010-03-23 12:26:38 +01:00
headers.sh kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
headers_check.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
headers_install.sh Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
kallsyms.c aarch64: filter $x from kallsyms 2014-10-02 17:01:51 +01:00
kernel-doc scripts/kernel-doc: recognize __meminit 2014-08-26 13:49:57 -07:00
ld-version.sh Kbuild, lto: add ld-version and ld-ifversion macros 2014-02-13 20:25:00 -08:00
link-vmlinux.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
makelst
markup_oops.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mkcompile_h kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
mkmakefile kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mksysmap kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mkuboot.sh mkuboot.sh: Fail if mkimage is missing 2011-01-07 14:31:01 +01:00
mkversion
module-common.lds module: Sort exported symbols 2011-05-19 16:55:27 +09:30
namespace.pl Revert "namespace: add source file location exceptions" 2010-10-28 00:59:56 +02:00
objdiff scripts: objdiff: support directories for the augument of record command 2014-06-10 14:59:33 +02:00
patch-kernel kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
pnmtologo.c kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
profile2linkerlist.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
recordmcount.c s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
recordmcount.h recordmcount/MIPS: Fix possible incorrect mcount_loc table entries in modules 2014-06-26 10:48:19 +01:00
recordmcount.pl s390/ftrace,kprobes: allow to patch first instruction 2014-10-27 13:27:27 +01:00
setlocalversion Fix detectition of kernel git repository in setlocalversion script [take #2] 2014-01-03 14:48:42 +01:00
show_delta kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
sign-file treewide: fix errors in printk 2014-09-01 11:18:25 +02:00
sortextable.c xtensa: enable sorting extable at build time 2014-04-02 01:35:50 +04:00
sortextable.h scripts/sortextable: suppress warning: `relocs_size' may be used uninitialized 2014-10-14 02:18:23 +02:00
spelling.txt checkpatch: look for common misspellings 2014-10-14 02:18:15 +02:00
tags.sh Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:27:48 +02:00
unifdef.c unifdef: update to upstream version 2.5 2011-01-22 15:50:59 +01:00
ver_linux
xz_wrap.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00