Messages in this thread Patch in this message | | | From | Ilya Leoshkevich <> | Subject | [PATCH] scripts/gdb: fix debugging modules on s390 | Date | Tue, 15 Oct 2019 12:53:13 +0200 |
| |
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().
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> --- scripts/gdb/linux/symbols.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py index f0d8f2ecfde7..41c6d1a55b03 100644 --- a/scripts/gdb/linux/symbols.py +++ b/scripts/gdb/linux/symbols.py @@ -15,7 +15,7 @@ import gdb import os import re -from linux import modules +from linux import modules, utils if hasattr(gdb, 'Breakpoint'): @@ -113,6 +113,12 @@ lx-symbols command.""" if module_file: gdb.write("loading @{addr}: {filename}\n".format( addr=module_addr, filename=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) cmdline = "add-symbol-file {filename} {addr}{sections}".format( filename=module_file, addr=module_addr, -- 2.23.0
| |