[PATCH] ftrace: only warn once on old objcopy and local functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[
  Stephen, can you try to see if this works for you, with the
  issue of spamming warnings?

  Thanks,

  -- Steve
]

Older versions of objcopy do not support the --globalize-symbols
option, which prevent mcount calls in local functions within
their own sections from being reference by the mcount_loc table.

We want to warn the user about this out of date objcopy without spamming
them with warning messages. To do this, we create a .tmp_mcversion and
compare it with the .version to see if we have already warned the
user for that build.

Signed-off-by: Steven Rostedt <srostedt@xxxxxxxxxx>
---
 Makefile                |    3 +-
 scripts/recordmcount.pl |   69 +++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 65 insertions(+), 7 deletions(-)

Index: linux-tip.git/Makefile
===================================================================
--- linux-tip.git.orig/Makefile	2008-08-25 14:01:57.000000000 -0400
+++ linux-tip.git/Makefile	2008-08-25 23:17:57.000000000 -0400
@@ -1155,7 +1155,8 @@ endif # CONFIG_MODULES
 # Directories & files removed with 'make clean'
 CLEAN_DIRS  += $(MODVERDIR)
 CLEAN_FILES +=	vmlinux System.map \
-                .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
+                .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map \
+		.tmp_mcversion
 
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include2 usr/include
Index: linux-tip.git/scripts/recordmcount.pl
===================================================================
--- linux-tip.git.orig/scripts/recordmcount.pl	2008-08-25 16:23:29.000000000 -0400
+++ linux-tip.git/scripts/recordmcount.pl	2008-08-25 23:19:52.000000000 -0400
@@ -96,6 +96,8 @@
 use strict;
 
 my $P = $0;
+my $D = $P;
+$D =~ s@(.*)/.*@$1@;
 $P =~ s@.*/@@g;
 
 my $V = '0.1';
@@ -235,6 +237,66 @@ my $ref_func;		# reference function to u
 my $offset = 0;		# offset of ref_func to section beginning
 
 ##
+# warn_on_local - check to see if this make already had a warning
+#
+# We want to warn to the user if the objcopy is out of date
+# for referencing local functions, but we do not want to
+# spam the build with errors. We create a file ".tmp_mcversion"
+# and compare it to the .version file to see if we have already
+# warned the user in this compile or not.
+sub warn_on_local
+{
+    if ($local_warn_once) {
+	return;
+    }
+
+    $local_warn_once++;
+
+    # Check to see if we already warned on this build.
+    my $topdir = $D . "/..";
+    open(VER, "$topdir/.version") || return;
+    my $ver_num = -1;
+    while (<VER>) {
+	if (/(\d+)/) {
+	    $ver_num = $1;
+	    last;
+	}
+    }
+    close (VER);
+
+    my $last_ver = $topdir . "/.tmp_mcversion";
+    if (open(VER, $last_ver)) {
+	my $this_num = -2;
+	# see if the versions match
+	while (<VER>) {
+	    if (/(\d+)/) {
+		$this_num = $1;
+	    }
+	}
+	close (VER);
+
+	if ($ver_num == $this_num) {
+	    return;
+	}
+    }
+
+    # Either the file does not exist, or the versions do
+    # not match. Write the version we read, and warn about
+    # the message.
+
+    open (VER, ">$last_ver") || return;
+    print VER $ver_num . "\n";
+    close (VER);
+
+    print STDERR
+	"$inputfile: WARNING: referencing local function " .
+	"$ref_func for mcount\n" .
+	"\tConsider upgrading objcopy to support the globalize-" .
+	"symbols option.\n" .
+	"\tDisabling local function references.\n";
+}
+
+##
 # update_funcs - print out the current mcount callers
 #
 #  Go through the list of offsets to callers and write them to
@@ -262,12 +324,7 @@ sub update_funcs
 
 	# only use locals if objcopy supports globalize-symbols
 	if (!$use_locals) {
-	    print STDERR
-		"$inputfile: WARNING: referencing local function " .
-		"$ref_func for mcount\n" .
-		"\tConsider upgrading objcopy to support the globalize-" .
-		"symbols option.\n"
-		if (!$local_warn_once++);
+	    warn_on_local();
 	    return;
 	}
 	$convert{$ref_func} = 1;


--
To unsubscribe from this list: send the line "unsubscribe linux-next" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux