diff options
| -rwxr-xr-x | scripts/recordmcount.pl | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index 9f75438f65e2..7ec032e3c3fa 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl | |||
| @@ -130,6 +130,7 @@ my %weak; # List of weak functions | |||
| 130 | my %convert; # List of local functions used that needs conversion | 130 | my %convert; # List of local functions used that needs conversion |
| 131 | 131 | ||
| 132 | my $type; | 132 | my $type; |
| 133 | my $nm_regex; # Find the local functions (return function) | ||
| 133 | my $section_regex; # Find the start of a section | 134 | my $section_regex; # Find the start of a section |
| 134 | my $function_regex; # Find the name of a function | 135 | my $function_regex; # Find the name of a function |
| 135 | # (return offset and func name) | 136 | # (return offset and func name) |
| @@ -145,6 +146,7 @@ if ($arch eq "x86") { | |||
| 145 | } | 146 | } |
| 146 | 147 | ||
| 147 | if ($arch eq "x86_64") { | 148 | if ($arch eq "x86_64") { |
| 149 | $nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)"; | ||
| 148 | $section_regex = "Disassembly of section\\s+(\\S+):"; | 150 | $section_regex = "Disassembly of section\\s+(\\S+):"; |
| 149 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; | 151 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; |
| 150 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount([+-]0x[0-9a-zA-Z]+)?\$"; | 152 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount([+-]0x[0-9a-zA-Z]+)?\$"; |
| @@ -158,6 +160,7 @@ if ($arch eq "x86_64") { | |||
| 158 | $cc .= " -m64"; | 160 | $cc .= " -m64"; |
| 159 | 161 | ||
| 160 | } elsif ($arch eq "i386") { | 162 | } elsif ($arch eq "i386") { |
| 163 | $nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)"; | ||
| 161 | $section_regex = "Disassembly of section\\s+(\\S+):"; | 164 | $section_regex = "Disassembly of section\\s+(\\S+):"; |
| 162 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; | 165 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; |
| 163 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$"; | 166 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$"; |
| @@ -171,6 +174,7 @@ if ($arch eq "x86_64") { | |||
| 171 | $cc .= " -m32"; | 174 | $cc .= " -m32"; |
| 172 | 175 | ||
| 173 | } elsif ($arch eq "sh") { | 176 | } elsif ($arch eq "sh") { |
| 177 | $nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)"; | ||
| 174 | $section_regex = "Disassembly of section\\s+(\\S+):"; | 178 | $section_regex = "Disassembly of section\\s+(\\S+):"; |
| 175 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; | 179 | $function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; |
| 176 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$"; | 180 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\smcount\$"; |
| @@ -181,6 +185,17 @@ if ($arch eq "x86_64") { | |||
| 181 | $objcopy .= " -O elf32-sh-linux"; | 185 | $objcopy .= " -O elf32-sh-linux"; |
| 182 | $cc .= " -m32"; | 186 | $cc .= " -m32"; |
| 183 | 187 | ||
| 188 | } elsif ($arch eq "powerpc") { | ||
| 189 | $nm_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; | ||
| 190 | $section_regex = "Disassembly of section\\s+(\\S+):"; | ||
| 191 | $function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?.*?)>:"; | ||
| 192 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s\\.?_mcount\$"; | ||
| 193 | if ($bits == 64) { | ||
| 194 | $type = ".quad"; | ||
| 195 | } else { | ||
| 196 | $type = ".long"; | ||
| 197 | } | ||
| 198 | |||
| 184 | } else { | 199 | } else { |
| 185 | die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD"; | 200 | die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD"; |
| 186 | } | 201 | } |
| @@ -250,7 +265,7 @@ if (!$found_version) { | |||
| 250 | # | 265 | # |
| 251 | open (IN, "$nm $inputfile|") || die "error running $nm"; | 266 | open (IN, "$nm $inputfile|") || die "error running $nm"; |
| 252 | while (<IN>) { | 267 | while (<IN>) { |
| 253 | if (/^[0-9a-fA-F]+\s+t\s+(\S+)/) { | 268 | if (/$nm_regex/) { |
| 254 | $locals{$1} = 1; | 269 | $locals{$1} = 1; |
| 255 | } elsif (/^[0-9a-fA-F]+\s+([wW])\s+(\S+)/) { | 270 | } elsif (/^[0-9a-fA-F]+\s+([wW])\s+(\S+)/) { |
| 256 | $weak{$2} = $1; | 271 | $weak{$2} = $1; |
| @@ -302,7 +317,7 @@ sub update_funcs | |||
| 302 | open(FILE, ">$mcount_s") || die "can't create $mcount_s\n"; | 317 | open(FILE, ">$mcount_s") || die "can't create $mcount_s\n"; |
| 303 | $opened = 1; | 318 | $opened = 1; |
| 304 | print FILE "\t.section $mcount_section,\"a\",\@progbits\n"; | 319 | print FILE "\t.section $mcount_section,\"a\",\@progbits\n"; |
| 305 | print FILE "\t.align $alignment\n"; | 320 | print FILE "\t.align $alignment\n" if (defined($alignment)); |
| 306 | } | 321 | } |
| 307 | printf FILE "\t%s %s + %d\n", $type, $ref_func, $offsets[$i] - $offset; | 322 | printf FILE "\t%s %s + %d\n", $type, $ref_func, $offsets[$i] - $offset; |
| 308 | } | 323 | } |
