]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - scripts/recordmcount.pl
fat: document additional vfat mount options
[linux-2.6-omap-h63xx.git] / scripts / recordmcount.pl
index ee9e12676776839c377a995713c3a0c71eed5985..6b9fe3eb836027bff637b912798b3b024a4baeba 100755 (executable)
@@ -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";
@@ -262,12 +276,6 @@ 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++);
            return;
        }
        $convert{$ref_func} = 1;
@@ -295,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);