| From 805de4abea4deb9db5aa0f6cf52dea3d9b9f35e2 Mon Sep 17 00:00:00 2001 |
| From: Ilya Leoshkevich <iii@linux.ibm.com> |
| Date: Tue, 5 Nov 2019 21:17:06 -0800 |
| Subject: [PATCH] scripts/gdb: fix debugging modules compiled with hot/cold |
| partitioning |
| |
| commit 8731acc5068eb3f422a45c760d32198175c756f8 upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py |
| index 2f5b95f09fa0..3c2950430289 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.7.4 |
| |