2010-08-06 07:26:22

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH] tracing: extend recordmcount to better support Blackfin mcount

The mcount call on Blackfin systems includes some stack manipulation
around the actual call site, so extend the build time perl script to
support this. This way we can avoid doing the calculation at runtime.

Signed-off-by: Mike Frysinger <[email protected]>
---
scripts/recordmcount.pl | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index f3c9c0a..2c56539 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -159,6 +159,7 @@ my $section_regex; # Find the start of a section
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)
+my $mcount_adjust; # Address adjustment to mcount offset
my $alignment; # The .align value to use for $mcount_section
my $section_type; # Section header plus possible alignment command
my $can_use_local = 0; # If we can use local function references
@@ -213,6 +214,7 @@ $section_regex = "Disassembly of section\\s+(\\S+):";
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
$section_type = '@progbits';
+$mcount_adjust = 0;
$type = ".long";

if ($arch eq "x86_64") {
@@ -351,6 +353,9 @@ if ($arch eq "x86_64") {
} elsif ($arch eq "microblaze") {
# Microblaze calls '_mcount' instead of plain 'mcount'.
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
+} elsif ($arch eq "blackfin") {
+ $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s__mcount\$";
+ $mcount_adjust = -4;
} else {
die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD";
}
@@ -511,7 +516,7 @@ while (<IN>) {
}
# is this a call site to mcount? If so, record it to print later
if ($text_found && /$mcount_regex/) {
- push(@offsets, hex $1);
+ push(@offsets, (hex $1) + $mcount_adjust);
}
}

--
1.7.2


2010-08-11 18:55:00

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] tracing: extend recordmcount to better support Blackfin mcount

On Fri, 2010-08-06 at 03:26 -0400, Mike Frysinger wrote:
> The mcount call on Blackfin systems includes some stack manipulation
> around the actual call site, so extend the build time perl script to
> support this. This way we can avoid doing the calculation at runtime.

Hmm, this might be something we could do in other archs.

You want me to pull it? or should this go via another tree?

-- Steve

>
> Signed-off-by: Mike Frysinger <[email protected]>
> ---
> scripts/recordmcount.pl | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
> index f3c9c0a..2c56539 100755
> --- a/scripts/recordmcount.pl
> +++ b/scripts/recordmcount.pl
> @@ -159,6 +159,7 @@ my $section_regex; # Find the start of a section
> 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)
> +my $mcount_adjust; # Address adjustment to mcount offset
> my $alignment; # The .align value to use for $mcount_section
> my $section_type; # Section header plus possible alignment command
> my $can_use_local = 0; # If we can use local function references
> @@ -213,6 +214,7 @@ $section_regex = "Disassembly of section\\s+(\\S+):";
> $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
> $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
> $section_type = '@progbits';
> +$mcount_adjust = 0;
> $type = ".long";
>
> if ($arch eq "x86_64") {
> @@ -351,6 +353,9 @@ if ($arch eq "x86_64") {
> } elsif ($arch eq "microblaze") {
> # Microblaze calls '_mcount' instead of plain 'mcount'.
> $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
> +} elsif ($arch eq "blackfin") {
> + $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s__mcount\$";
> + $mcount_adjust = -4;
> } else {
> die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD";
> }
> @@ -511,7 +516,7 @@ while (<IN>) {
> }
> # is this a call site to mcount? If so, record it to print later
> if ($text_found && /$mcount_regex/) {
> - push(@offsets, hex $1);
> + push(@offsets, (hex $1) + $mcount_adjust);
> }
> }
>

2010-08-11 19:18:28

by Mike Frysinger

[permalink] [raw]
Subject: Re: [Uclinux-dist-devel] [PATCH] tracing: extend recordmcount to better support Blackfin mcount

On Wed, Aug 11, 2010 at 14:54, Steven Rostedt wrote:
> You want me to pull it? or should this go via another tree?

i was planning on it going through your tree ;)
-mike

2010-08-11 20:39:52

by Steven Rostedt

[permalink] [raw]
Subject: Re: [Uclinux-dist-devel] [PATCH] tracing: extend recordmcount to better support Blackfin mcount

On Wed, 2010-08-11 at 15:18 -0400, Mike Frysinger wrote:
> On Wed, Aug 11, 2010 at 14:54, Steven Rostedt wrote:
> > You want me to pull it? or should this go via another tree?
>
> i was planning on it going through your tree ;)
> -mike

Sure, it looks harmless. I'll pull it in and test it and if it doesn't
hurt anything on x86, I'll push it out for 2.6.36.

-- Steve

2010-08-16 17:31:42

by Mike Frysinger

[permalink] [raw]
Subject: [tip:perf/urgent] tracing: Extend recordmcount to better support Blackfin mcount

Commit-ID: 465c6cca2668a2db2a4ffce3dca5714017873f2b
Gitweb: http://git.kernel.org/tip/465c6cca2668a2db2a4ffce3dca5714017873f2b
Author: Mike Frysinger <[email protected]>
AuthorDate: Fri, 6 Aug 2010 03:26:24 -0400
Committer: Steven Rostedt <[email protected]>
CommitDate: Thu, 12 Aug 2010 10:06:51 -0400

tracing: Extend recordmcount to better support Blackfin mcount

The mcount call on Blackfin systems includes some stack manipulation
around the actual call site, so extend the build time perl script to
support this. This way we can avoid doing the calculation at runtime.

Signed-off-by: Mike Frysinger <[email protected]>
LKML-Reference: <[email protected]>
Signed-off-by: Steven Rostedt <[email protected]>
---
scripts/recordmcount.pl | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index f3c9c0a..2c56539 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -159,6 +159,7 @@ my $section_regex; # Find the start of a section
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)
+my $mcount_adjust; # Address adjustment to mcount offset
my $alignment; # The .align value to use for $mcount_section
my $section_type; # Section header plus possible alignment command
my $can_use_local = 0; # If we can use local function references
@@ -213,6 +214,7 @@ $section_regex = "Disassembly of section\\s+(\\S+):";
$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:";
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$";
$section_type = '@progbits';
+$mcount_adjust = 0;
$type = ".long";

if ($arch eq "x86_64") {
@@ -351,6 +353,9 @@ if ($arch eq "x86_64") {
} elsif ($arch eq "microblaze") {
# Microblaze calls '_mcount' instead of plain 'mcount'.
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
+} elsif ($arch eq "blackfin") {
+ $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s__mcount\$";
+ $mcount_adjust = -4;
} else {
die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD";
}
@@ -511,7 +516,7 @@ while (<IN>) {
}
# is this a call site to mcount? If so, record it to print later
if ($text_found && /$mcount_regex/) {
- push(@offsets, hex $1);
+ push(@offsets, (hex $1) + $mcount_adjust);
}
}