Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Ilya Leoshkevich and committed by
Linus Torvalds
585d730d aa5de305

+7 -1
+7 -1
scripts/gdb/linux/symbols.py
··· 15 15 import os 16 16 import re 17 17 18 - from linux import modules 18 + from linux import modules, utils 19 19 20 20 21 21 if hasattr(gdb, 'Breakpoint'): ··· 116 116 module_file = self._get_module_file(module_name) 117 117 118 118 if module_file: 119 + if utils.is_target_arch('s390'): 120 + # Module text is preceded by PLT stubs on s390. 121 + module_arch = module['arch'] 122 + plt_offset = int(module_arch['plt_offset']) 123 + plt_size = int(module_arch['plt_size']) 124 + module_addr = hex(int(module_addr, 0) + plt_offset + plt_size) 119 125 gdb.write("loading @{addr}: {filename}\n".format( 120 126 addr=module_addr, filename=module_file)) 121 127 cmdline = "add-symbol-file {filename} {addr}{sections}".format(