1
linux/scripts
Steven Rostedt b43f70933e ftrace: test for running of recordmcount.pl twice on an object
Impact: fix failure of dynamic function tracer selftest

In a course of development, a developer does several makes on their
kernel. Sometimes, the make might do something abnormal. In the
case of running the recordmcount.pl script on an object twice,
the script will duplicate all the calls to mcount in the __mcount_loc
section.

On boot up, the dynamic function tracer is careful when it modifies
code, and performs several consistency checks. One is to not modify
the call site if it is not what it expects it to be. If a function
call site is listed twice, the first entry will convert the site
to a nop, and the second will fail because it expected to see a
call to mcount, but instead it sees a nop. Thus, the function tracer
is disabled.

Eric Sesterhenn reported seeing:

[    1.055440] ftrace: converting mcount calls to 0f 1f 44 00 00
[    1.055568] ftrace: allocating 29418 entries in 116 pages
[    1.061000] ------------[ cut here ]------------
[    1.061000] WARNING: at kernel/trace/ftrace.c:441

 [...]

[    1.060000] ---[ end trace 4eaa2a86a8e2da23 ]---
[    1.060000] ftrace failed to modify [<c0118072>] check_corruption+0x3/0x2d
[    1.060000]  actual: 0f:1f:44:00:00

This warning shows that check_corruption+0x3 already had a nop in
its place (0x0f1f440000). After compiling another kernel the problem
went away.

Later Eric Paris notice the same type of issue. Luckily, he saved
the vmlinux file that caused it. In the file we found a bunch of
duplicate mcount call site records, which lead us to the script.

Perhaps this problem only happens to people named Eric.

This patch changes the script to test if the __mcount_loc already
exists in the object file, and if it does, it will print out
an error message and kill the compile.

Reported-by: Eric Sesterhenn <snakebyte@gmx.de>
Reported-by: Eric Paris <eparis@redhat.com>
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-01-18 20:15:26 +01:00
..
basic
genksyms allow stripping of generated symbols under CONFIG_KALLSYMS_ALL 2008-12-19 22:47:10 +01:00
kconfig kconfig: improve error messages for bad source statements 2009-01-02 20:43:22 +01:00
ksymoops
mod kbuild: prevent modpost from looking for a .cmd file for a static library linked into a module 2008-10-29 22:02:10 +01:00
package kbuild: remove TAR_IGNORE 2008-12-05 19:50:36 +01:00
rt-tester
selinux
trace tracing: add "power-tracer": C/P state tracer to help power optimization 2008-11-26 08:29:32 +01:00
tracing
.gitignore fix modules_install via NFS 2009-01-07 21:44:20 +01:00
bin2c.c
binoffset.c
bloat-o-meter
bootgraph.pl bootgraph: make the bootgraph script show async waiting time 2009-01-10 15:06:52 -08:00
checkincludes.pl
checkkconfigsymbols.sh
checkpatch.pl checkpatch: version: 0.27 2009-01-15 16:39:39 -08:00
checkstack.pl
checksyscalls.sh scripts/checksyscalls.sh: fix for non-gnu sed 2008-10-29 22:02:08 +01:00
checkversion.pl
cleanfile
cleanpatch
config kconfig: add script to manipulate .config files on the command line 2009-01-07 21:44:22 +01:00
conmakehash.c
decodecode scripts: improve the decodecode script 2008-12-03 22:36:39 +01:00
diffconfig
export_report.pl
extract-ikconfig remove bashisms from scripts/extract-ikconfig 2008-12-03 21:32:02 +01:00
gcc-version.sh
gcc-x86_64-has-stack-protector.sh
gen_initramfs_list.sh
headerdep.pl kbuild: add headerdep used to detect inclusion cycles in header files 2008-12-18 20:18:04 +01:00
headers_check.pl kbuild: ignore a few files in headers_check 2009-01-02 20:43:27 +01:00
headers_install.pl kbuild: in headers_install autoconvert asm/inline/volatile to __xxx__ 2009-01-02 20:43:24 +01:00
headers.sh
ihex2fw.c fix modules_install via NFS 2009-01-07 21:44:20 +01:00
kallsyms.c allow stripping of generated symbols under CONFIG_KALLSYMS_ALL 2008-12-19 22:47:10 +01:00
Kbuild.include kbuild: use KECHO convenience echo 2008-12-03 21:32:01 +01:00
kernel-doc kernel-doc: check for extra kernel-doc notations 2008-12-19 18:27:19 +01:00
Lindent
Makefile fix modules_install via NFS 2009-01-07 21:44:20 +01:00
Makefile.build ftrace, ia64: make recordmcount distinct module compile 2009-01-14 12:11:08 +01:00
Makefile.clean
Makefile.fwinst
Makefile.headersinst
Makefile.host
Makefile.lib kbuild: expand -I in KBUILD_CPPFLAGS 2008-12-03 21:31:59 +01:00
Makefile.modinst kbuild: strip generated symbols from *.ko 2008-12-19 22:41:15 +01:00
Makefile.modpost kbuild: fix KBUILD_EXTRA_SYMBOLS 2008-10-29 22:02:09 +01:00
makelst
markup_oops.pl script: improve markup_oops.pl to also decode oopses in modules 2009-01-12 16:39:58 -08:00
mkcompile_h kbuild: kill output in silent mode of mkcompile_h 2008-12-03 21:32:00 +01:00
mkmakefile kbuild: teach mkmakfile to be silent 2008-12-03 21:32:02 +01:00
mksysmap kbuild: strip generated symbols from *.ko 2008-12-19 22:41:15 +01:00
mkuboot.sh
mkversion
namespace.pl
patch-kernel
pnmtologo.c
profile2linkerlist.pl
recordmcount.pl ftrace: test for running of recordmcount.pl twice on an object 2009-01-18 20:15:26 +01:00
setlocalversion setlocalversion: add git-svn support 2008-12-03 22:58:30 +01:00
show_delta
strip-symbols kbuild: strip generated symbols from *.ko 2008-12-19 22:41:15 +01:00
tags.sh kbuild: reintroduce ALLSOURCE_ARCHS support for tags/cscope 2009-01-07 21:44:21 +01:00
unifdef.c
ver_linux