Skip to content

Commit

Permalink
ftrace: dynamic ftrace process only text section
Browse files Browse the repository at this point in the history
The text section stays in memory without ever leaving. With the exception
of modules, but modules know how to handle that case. With the dynamic
ftrace tracer, we need to make sure that it does not try to modify code
that no longer exists. The only safe section is .text.

This patch changes the recordmcount script to only record the mcount calls
in the .text sections.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Steven Rostedt authored and Ingo Molnar committed Oct 23, 2008
1 parent dce9d18 commit 34698bc
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions scripts/recordmcount.pl
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@
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);
$cc = "gcc" if ((length $cc) == 0);
Expand Down Expand Up @@ -139,7 +144,7 @@
}

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";
Expand All @@ -151,7 +156,7 @@
$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";
Expand Down Expand Up @@ -298,7 +303,13 @@ sub update_funcs
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);

Expand Down

0 comments on commit 34698bc

Please sign in to comment.