lkml.org 
[lkml]   [2016]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 096/180] scripts/recordmcount.pl: support data in text section on powerpc
    Date
    3.16.7-ckt24 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    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: Luis Henriques <luis.henriques@canonical.com>
    ---
    scripts/recordmcount.pl | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
    index e28f38eff70e..6a0307b6611c 100755
    --- a/scripts/recordmcount.pl
    +++ b/scripts/recordmcount.pl
    @@ -265,7 +265,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) {
    \
     
     \ /
      Last update: 2016-02-04 01:01    [W:4.054 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site