lkml.org 
[lkml]   [2019]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 07/92] scripts/gdb: fix debugging modules compiled with hot/cold partitioning
    Date
    From: Ilya Leoshkevich <iii@linux.ibm.com>

    [ Upstream commit 8731acc5068eb3f422a45c760d32198175c756f8 ]

    gcc's -freorder-blocks-and-partition option makes it group frequently
    and infrequently used code in .text.hot and .text.unlikely sections
    respectively. At least when building modules on s390, this option is
    used by default.

    gdb assumes that all code is located in .text section, and that .text
    section is located at module load address. With such modules this is no
    longer the case: there is code in .text.hot and .text.unlikely, and
    either of them might precede .text.

    Fix by explicitly telling gdb the addresses of code sections.

    It might be tempting to do this for all sections, not only the ones in
    the white list. Unfortunately, gdb appears to have an issue, when
    telling it about e.g. loadable .note.gnu.build-id section causes it to
    think that non-loadable .note.Linux section is loaded at address 0,
    which in turn causes NULL pointers to be resolved to bogus symbols. So
    keep using the white list approach for the time being.

    Link: http://lkml.kernel.org/r/20191028152734.13065-1-iii@linux.ibm.com
    Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
    Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com>
    Cc: Kieran Bingham <kbingham@kernel.org>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    scripts/gdb/linux/symbols.py | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py
    index 627750cb420d0..9b71c65504a38 100644
    --- a/scripts/gdb/linux/symbols.py
    +++ b/scripts/gdb/linux/symbols.py
    @@ -99,7 +99,8 @@ lx-symbols command."""
    attrs[n]['name'].string(): attrs[n]['address']
    for n in range(int(sect_attrs['nsections']))}
    args = []
    - for section_name in [".data", ".data..read_mostly", ".rodata", ".bss"]:
    + for section_name in [".data", ".data..read_mostly", ".rodata", ".bss",
    + ".text", ".text.hot", ".text.unlikely"]:
    address = section_name_to_address.get(section_name)
    if address:
    args.append(" -s {name} {addr}".format(
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-04 19:27    [W:4.159 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site