| From 2e50c4bef77511b42cc226865d6bc568fa7f8769 Mon Sep 17 00:00:00 2001 |
| From: Ulrich Weigand <ulrich.weigand@de.ibm.com> |
| Date: Tue, 12 Jan 2016 23:14:22 +1100 |
| Subject: scripts/recordmcount.pl: support data in text section on powerpc |
| |
| From: Ulrich Weigand <ulrich.weigand@de.ibm.com> |
| |
| commit 2e50c4bef77511b42cc226865d6bc568fa7f8769 upstream. |
| |
| If a text section starts out with a data blob before the first |
| function start label, disassembly parsing doing in recordmcount.pl |
| gets confused on powerpc, leading to creation of corrupted module |
| objects. |
| |
| This was not a problem so far since the compiler would never create |
| such text sections. However, this has changed with a recent change |
| in GCC 6 to support distances of > 2GB between a function and its |
| assoicated TOC in the ELFv2 ABI, exposing this problem. |
| |
| There is already code in recordmcount.pl to handle such data blobs |
| on the sparc64 platform. This patch uses the same method to handle |
| those on powerpc as well. |
| |
| Acked-by: Steven Rostedt <rostedt@goodmis.org> |
| Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| scripts/recordmcount.pl | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/scripts/recordmcount.pl |
| +++ b/scripts/recordmcount.pl |
| @@ -263,7 +263,8 @@ if ($arch eq "x86_64") { |
| |
| } elsif ($arch eq "powerpc") { |
| $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; |
| - $function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?.*?)>:"; |
| + # See comment in the sparc64 section for why we use '\w'. |
| + $function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?\\w*?)>:"; |
| $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s\\.?_mcount\$"; |
| |
| if ($bits == 64) { |