tracing: Add regex for weak functions in recordmcount.pl
Add a variable to contain the regex needed to find weak functions in the 'nm' output. This will allow other archs to easily override it. Also rename the regex variable $nm_regex to $local_regex to be more descriptive. Signed-off-by: Li Hong <lihong.hi@gmail.com> LKML-Reference: <20091028050619.GF30758@uhli> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
db24c7dcf4
commit
306dcf47d2
1 changed files with 9 additions and 7 deletions
|
@ -92,7 +92,7 @@
|
||||||
#
|
#
|
||||||
# Here are the steps we take:
|
# Here are the steps we take:
|
||||||
#
|
#
|
||||||
# 1) Record all the local symbols by using 'nm'
|
# 1) Record all the local and weak symbols by using 'nm'
|
||||||
# 2) Use objdump to find all the call site offsets and sections for
|
# 2) Use objdump to find all the call site offsets and sections for
|
||||||
# mcount.
|
# mcount.
|
||||||
# 3) Compile the list into its own object.
|
# 3) Compile the list into its own object.
|
||||||
|
@ -152,7 +152,8 @@ my %weak; # List of weak functions
|
||||||
my %convert; # List of local functions used that needs conversion
|
my %convert; # List of local functions used that needs conversion
|
||||||
|
|
||||||
my $type;
|
my $type;
|
||||||
my $nm_regex; # Find the local functions (return function)
|
my $local_regex; # Match a local function (return function)
|
||||||
|
my $weak_regex; # Match a weak function (return function)
|
||||||
my $section_regex; # Find the start of a section
|
my $section_regex; # Find the start of a section
|
||||||
my $function_regex; # Find the name of a function
|
my $function_regex; # Find the name of a function
|
||||||
# (return offset and func name)
|
# (return offset and func name)
|
||||||
|
@ -197,7 +198,8 @@ if ($arch eq "x86") {
|
||||||
# We base the defaults off of i386, the other archs may
|
# We base the defaults off of i386, the other archs may
|
||||||
# feel free to change them in the below if statements.
|
# feel free to change them in the below if statements.
|
||||||
#
|
#
|
||||||
$nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)";
|
$local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)";
|
||||||
|
$weak_regex = "^[0-9a-fA-F]+\\s+([wW])\\s+(\\S+)";
|
||||||
$section_regex = "Disassembly of section\\s+(\\S+):";
|
$section_regex = "Disassembly of section\\s+(\\S+):";
|
||||||
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
|
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
|
||||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
|
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
|
||||||
|
@ -246,7 +248,7 @@ if ($arch eq "x86_64") {
|
||||||
$cc .= " -m32";
|
$cc .= " -m32";
|
||||||
|
|
||||||
} elsif ($arch eq "powerpc") {
|
} elsif ($arch eq "powerpc") {
|
||||||
$nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)";
|
$local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)";
|
||||||
$function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?.*?)>:";
|
$function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?.*?)>:";
|
||||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s\\.?_mcount\$";
|
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s\\.?_mcount\$";
|
||||||
|
|
||||||
|
@ -322,13 +324,13 @@ check_objcopy();
|
||||||
|
|
||||||
#
|
#
|
||||||
# Step 1: find all the local (static functions) and weak symbols.
|
# Step 1: find all the local (static functions) and weak symbols.
|
||||||
# 't' is local, 'w/W' is weak (we never use a weak function)
|
# 't' is local, 'w/W' is weak
|
||||||
#
|
#
|
||||||
open (IN, "$nm $inputfile|") || die "error running $nm";
|
open (IN, "$nm $inputfile|") || die "error running $nm";
|
||||||
while (<IN>) {
|
while (<IN>) {
|
||||||
if (/$nm_regex/) {
|
if (/$local_regex/) {
|
||||||
$locals{$1} = 1;
|
$locals{$1} = 1;
|
||||||
} elsif (/^[0-9a-fA-F]+\s+([wW])\s+(\S+)/) {
|
} elsif (/$weak_regex/) {
|
||||||
$weak{$2} = $1;
|
$weak{$2} = $1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue