scripts/gdb: fix debugging modules on s390
Currently lx-symbols assumes that module text is always located at module->core_layout->base, but s390 uses the following layout: +------+ <- module->core_layout->base | GOT | +------+ <- module->core_layout->base + module->arch->plt_offset | PLT | +------+ <- module->core_layout->base + module->arch->plt_offset + | TEXT | module->arch->plt_size +------+ Therefore, when trying to debug modules on s390, all the symbol addresses are skewed by plt_offset + plt_size. Fix by adding plt_offset + plt_size to module_addr in load_module_symbols(). Link: http://lkml.kernel.org/r/20191017085917.81791-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>
This commit is contained in:
parent
aa5de305c9
commit
585d730d41
|
@ -15,7 +15,7 @@ import gdb
|
|||
import os
|
||||
import re
|
||||
|
||||
from linux import modules
|
||||
from linux import modules, utils
|
||||
|
||||
|
||||
if hasattr(gdb, 'Breakpoint'):
|
||||
|
@ -116,6 +116,12 @@ lx-symbols command."""
|
|||
module_file = self._get_module_file(module_name)
|
||||
|
||||
if module_file:
|
||||
if utils.is_target_arch('s390'):
|
||||
# Module text is preceded by PLT stubs on s390.
|
||||
module_arch = module['arch']
|
||||
plt_offset = int(module_arch['plt_offset'])
|
||||
plt_size = int(module_arch['plt_size'])
|
||||
module_addr = hex(int(module_addr, 0) + plt_offset + plt_size)
|
||||
gdb.write("loading @{addr}: {filename}\n".format(
|
||||
addr=module_addr, filename=module_file))
|
||||
cmdline = "add-symbol-file {filename} {addr}{sections}".format(
|
||||
|
|
Loading…
Reference in New Issue