Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (31 commits) ftrace: fix current_tracer error return tracing: fix a build error on alpha ftrace: use a real variable for ftrace_nop in x86 tracing/ftrace: make boot tracer select the sched_switch tracer tracepoint: check if the probe has been registered asm-generic: define DIE_OOPS in asm-generic trace: fix printk warning for u64 ftrace: warning in kernel/trace/ftrace.c ftrace: fix build failure ftrace, powerpc, sparc64, x86: remove notrace from arch ftrace file ftrace: remove ftrace hash ftrace: remove mcount set ftrace: remove daemon ftrace: disable dynamic ftrace for all archs that use daemon ftrace: add ftrace warn on to disable ftrace ftrace: only have ftrace_kill atomic ftrace: use probe_kernel ftrace: comment arch ftrace code ftrace: return error on failed modified text. ftrace: dynamic ftrace process only text section ...
This commit is contained in:
@@ -198,10 +198,16 @@ cmd_modversions = \
|
||||
fi;
|
||||
endif
|
||||
|
||||
ifdef CONFIG_64BIT
|
||||
arch_bits = 64
|
||||
else
|
||||
arch_bits = 32
|
||||
endif
|
||||
|
||||
ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||
cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl \
|
||||
"$(ARCH)" "$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" "$(NM)" "$(RM)" \
|
||||
"$(MV)" "$(@)";
|
||||
"$(ARCH)" "$(arch_bits)" "$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" \
|
||||
"$(NM)" "$(RM)" "$(MV)" "$(@)";
|
||||
endif
|
||||
|
||||
define rule_cc_o_c
|
||||
|
@@ -37,7 +37,10 @@
|
||||
# dmesg | perl scripts/bootgraph.pl > output.svg
|
||||
#
|
||||
|
||||
my %start, %end;
|
||||
use strict;
|
||||
|
||||
my %start;
|
||||
my %end;
|
||||
my $done = 0;
|
||||
my $maxtime = 0;
|
||||
my $firsttime = 100;
|
||||
@@ -105,18 +108,20 @@ my $threshold = ($maxtime - $firsttime) / 60.0;
|
||||
my $stylecounter = 0;
|
||||
my %rows;
|
||||
my $rowscount = 1;
|
||||
while (($key,$value) = each %start) {
|
||||
my @initcalls = sort { $start{$a} <=> $start{$b} } keys(%start);
|
||||
my $key;
|
||||
foreach $key (@initcalls) {
|
||||
my $duration = $end{$key} - $start{$key};
|
||||
|
||||
if ($duration >= $threshold) {
|
||||
my $s, $s2, $e, $y;
|
||||
$pid = $pids{$key};
|
||||
my ($s, $s2, $e, $w, $y, $y2, $style);
|
||||
my $pid = $pids{$key};
|
||||
|
||||
if (!defined($rows{$pid})) {
|
||||
$rows{$pid} = $rowscount;
|
||||
$rowscount = $rowscount + 1;
|
||||
}
|
||||
$s = ($value - $firsttime) * $mult;
|
||||
$s = ($start{$key} - $firsttime) * $mult;
|
||||
$s2 = $s + 6;
|
||||
$e = ($end{$key} - $firsttime) * $mult;
|
||||
$w = $e - $s;
|
||||
@@ -140,9 +145,9 @@ while (($key,$value) = each %start) {
|
||||
my $time = $firsttime;
|
||||
my $step = ($maxtime - $firsttime) / 15;
|
||||
while ($time < $maxtime) {
|
||||
my $s2 = ($time - $firsttime) * $mult;
|
||||
my $s3 = ($time - $firsttime) * $mult;
|
||||
my $tm = int($time * 100) / 100.0;
|
||||
print "<text transform=\"translate($s2,89) rotate(90)\">$tm</text>\n";
|
||||
print "<text transform=\"translate($s3,89) rotate(90)\">$tm</text>\n";
|
||||
$time = $time + $step;
|
||||
}
|
||||
|
||||
|
@@ -106,7 +106,13 @@ if ($#ARGV < 6) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my ($arch, $objdump, $objcopy, $cc, $ld, $nm, $rm, $mv, $inputfile) = @ARGV;
|
||||
my ($arch, $bits, $objdump, $objcopy, $cc,
|
||||
$ld, $nm, $rm, $mv, $inputfile) = @ARGV;
|
||||
|
||||
# Acceptable sections to record.
|
||||
my %text_sections = (
|
||||
".text" => 1,
|
||||
);
|
||||
|
||||
$objdump = "objdump" if ((length $objdump) == 0);
|
||||
$objcopy = "objcopy" if ((length $objcopy) == 0);
|
||||
@@ -129,8 +135,16 @@ my $function_regex; # Find the name of a function
|
||||
# (return offset and func name)
|
||||
my $mcount_regex; # Find the call site to mcount (return offset)
|
||||
|
||||
if ($arch eq "x86") {
|
||||
if ($bits == 64) {
|
||||
$arch = "x86_64";
|
||||
} else {
|
||||
$arch = "i386";
|
||||
}
|
||||
}
|
||||
|
||||
if ($arch eq "x86_64") {
|
||||
$section_regex = "Disassembly of section";
|
||||
$section_regex = "Disassembly of section\\s+(\\S+):";
|
||||
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
|
||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount([+-]0x[0-9a-zA-Z]+)?\$";
|
||||
$type = ".quad";
|
||||
@@ -142,7 +156,7 @@ if ($arch eq "x86_64") {
|
||||
$cc .= " -m64";
|
||||
|
||||
} elsif ($arch eq "i386") {
|
||||
$section_regex = "Disassembly of section";
|
||||
$section_regex = "Disassembly of section\\s+(\\S+):";
|
||||
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
|
||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
|
||||
$type = ".long";
|
||||
@@ -289,7 +303,13 @@ my $text;
|
||||
while (<IN>) {
|
||||
# is it a section?
|
||||
if (/$section_regex/) {
|
||||
$read_function = 1;
|
||||
|
||||
# Only record text sections that we know are safe
|
||||
if (defined($text_sections{$1})) {
|
||||
$read_function = 1;
|
||||
} else {
|
||||
$read_function = 0;
|
||||
}
|
||||
# print out any recorded offsets
|
||||
update_funcs() if ($text_found);
|
||||
|
||||
|
Reference in New Issue
Block a user