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 Update .gitignore files for generated targets 2008-10-20 11:24:31 -07:00
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 SELinux: add gitignore file for mdp script 2008-09-05 21:43:38 +10:00
trace tracing: add "power-tracer": C/P state tracer to help power optimization 2008-11-26 08:29:32 +01:00
tracing ftrace: add a script to produce a hierarchical view of a function trace 2008-10-27 11:00:07 +01:00
.gitignore fix modules_install via NFS 2009-01-07 21:44:20 +01:00
Kbuild.include kbuild: use KECHO convenience echo 2008-12-03 21:32:01 +01:00
Lindent scripts/Lindent: support gnu indent v2.2.10 2008-04-29 08:06:04 -07:00
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 kbuild: fix some minor typoes 2008-04-25 20:18:48 +02:00
Makefile.fwinst firmware: silence __fw_modbuild and __fw_modinst 'Nothing to be done' messages 2008-08-02 07:52:29 +01:00
Makefile.headersinst kbuild: install all headers when arch is changed 2008-07-25 22:12:18 +02:00
Makefile.host kbuild: fix some minor typoes 2008-04-25 20:18:48 +02:00
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
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 sparc: Add checkstack support 2008-10-22 21:53:49 -07:00
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 kconfig: add diffconfig utility 2008-07-25 22:12:41 +02:00
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 kbuild: fix unportability in gen_initramfs_list.sh 2008-04-28 22:50:51 +02:00
headerdep.pl kbuild: add headerdep used to detect inclusion cycles in header files 2008-12-18 20:18:04 +01:00
headers.sh kbuild: prepare headers_* for arch/$ARCH/include 2008-07-25 22:12:33 +02: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
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
kernel-doc kernel-doc: check for extra kernel-doc notations 2008-12-19 18:27:19 +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 bugfix for scripts/patch-kernel in 2.6 sublevel stepping 2008-08-06 22:11:33 +02:00
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 kbuild: scripts/ver_linux: don't set PATH 2008-07-31 23:36:54 +02:00