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
bin2c.c
binoffset.c
bloat-o-meter fix bloat-o-meter for ppc64 2007-12-17 19:28:17 -08:00
bootgraph.pl bootgraph: make the bootgraph script show async waiting time 2009-01-10 15:06:52 -08:00
checkincludes.pl
checkkconfigsymbols.sh kbuild: script to check for undefined Kconfig symbols 2007-10-12 21:13:50 +02:00
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 scripts: Make cleanfile/cleanpatch warn about long lines 2007-07-16 21:15:50 +02:00
cleanpatch scripts: Make cleanfile/cleanpatch warn about long lines 2007-07-16 21:15:50 +02:00
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 kbuild: fix perl usage in export_report.pl 2007-10-12 21:13:50 +02:00
extract-ikconfig remove bashisms from scripts/extract-ikconfig 2008-12-03 21:32:02 +01:00
gcc-version.sh kbuild: fix buglet in gcc-version.sh 2008-01-28 23:14:36 +01:00
gcc-x86_64-has-stack-protector.sh [PATCH] Add the -fstack-protector option to the CFLAGS 2006-09-26 10:52:39 +02:00
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_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 kbuild: prepare headers_* for arch/$ARCH/include 2008-07-25 22:12:33 +02: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
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 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
makelst kbuild: introduce ccflags-y, asflags-y and ldflags-y 2007-10-15 22:25:06 +02:00
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 kbuild/mkuboot.sh: allow spaces in CROSS_COMPILE 2007-05-02 20:58:10 +02:00
mkversion
namespace.pl x86: fixup the x86 namespace change in scripts/namespace.pl 2007-10-11 17:56:02 +02:00
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 kbuild: replace use of strlcpy with a dedicated implmentation in unifdef 2006-09-25 09:00:00 +02:00
ver_linux kbuild: scripts/ver_linux: don't set PATH 2008-07-31 23:36:54 +02:00