[v2] scripts/gdb: use mem instead of core_layout to get the module address

Message ID 20230412202516.1027149-1-p.raghav@samsung.com
State New
Headers
Series [v2] scripts/gdb: use mem instead of core_layout to get the module address |

Commit Message

Pankaj Raghav April 12, 2023, 8:25 p.m. UTC
  commit ac3b43283923 ("module: replace module_layout with module_memory")
changed the struct module data structure from module_layout to
module_memory. The core_layout member which is used while loading
modules are not available anymore leading to the following error while
running gdb:

(gdb) lx-symbols
loading vmlinux
Python Exception <class 'gdb.error'>: There is no member named core_layout.
Error occurred in Python: There is no member named core_layout.

Replace core_layout with its new counterpart mem[MOD_TEXT].

Fixes: ac3b43283923 ("module: replace module_layout with module_memory")
Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
---
 scripts/gdb/linux/constants.py.in | 3 +++
 scripts/gdb/linux/modules.py      | 4 ++--
 scripts/gdb/linux/symbols.py      | 4 ++--
 3 files changed, 7 insertions(+), 4 deletions(-)
  

Comments

Luis Chamberlain April 13, 2023, 12:53 a.m. UTC | #1
On Wed, Apr 12, 2023 at 10:25:18PM +0200, Pankaj Raghav wrote:
> commit ac3b43283923 ("module: replace module_layout with module_memory")
> changed the struct module data structure from module_layout to
> module_memory. The core_layout member which is used while loading
> modules are not available anymore leading to the following error while
> running gdb:
> 
> (gdb) lx-symbols
> loading vmlinux
> Python Exception <class 'gdb.error'>: There is no member named core_layout.
> Error occurred in Python: There is no member named core_layout.
> 
> Replace core_layout with its new counterpart mem[MOD_TEXT].
> 
> Fixes: ac3b43283923 ("module: replace module_layout with module_memory")
> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
> ---
>  scripts/gdb/linux/constants.py.in | 3 +++
>  scripts/gdb/linux/modules.py      | 4 ++--
>  scripts/gdb/linux/symbols.py      | 4 ++--
>  3 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
> index 36fd2b145853..471300ba176c 100644
> --- a/scripts/gdb/linux/constants.py.in
> +++ b/scripts/gdb/linux/constants.py.in
> @@ -62,6 +62,9 @@ LX_GDBPARSED(hrtimer_resolution)
>  LX_GDBPARSED(IRQD_LEVEL)
>  LX_GDBPARSED(IRQ_HIDDEN)
>  
> +/* linux/module.h */
> +LX_GDBPARSED(MOD_TEXT)

Should we just fill in the rest of the other sections too while at it?

  Luis
  
Pankaj Raghav April 13, 2023, 7:44 a.m. UTC | #2
On 2023-04-13 02:53, Luis Chamberlain wrote:
> On Wed, Apr 12, 2023 at 10:25:18PM +0200, Pankaj Raghav wrote:
>> commit ac3b43283923 ("module: replace module_layout with module_memory")
>> changed the struct module data structure from module_layout to
>> module_memory. The core_layout member which is used while loading
>> modules are not available anymore leading to the following error while
>> running gdb:
>>
>> (gdb) lx-symbols
>> loading vmlinux
>> Python Exception <class 'gdb.error'>: There is no member named core_layout.
>> Error occurred in Python: There is no member named core_layout.
>>
>> Replace core_layout with its new counterpart mem[MOD_TEXT].
>>
>> Fixes: ac3b43283923 ("module: replace module_layout with module_memory")
>> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
>> ---
>>  scripts/gdb/linux/constants.py.in | 3 +++
>>  scripts/gdb/linux/modules.py      | 4 ++--
>>  scripts/gdb/linux/symbols.py      | 4 ++--
>>  3 files changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
>> index 36fd2b145853..471300ba176c 100644
>> --- a/scripts/gdb/linux/constants.py.in
>> +++ b/scripts/gdb/linux/constants.py.in
>> @@ -62,6 +62,9 @@ LX_GDBPARSED(hrtimer_resolution)
>>  LX_GDBPARSED(IRQD_LEVEL)
>>  LX_GDBPARSED(IRQ_HIDDEN)
>>  
>> +/* linux/module.h */
>> +LX_GDBPARSED(MOD_TEXT)
> 
> Should we just fill in the rest of the other sections too while at it?
> 

I don't see them used in the scripts. Maybe we can add them when needed?

>   Luis
  
Kieran Bingham April 13, 2023, 1:47 p.m. UTC | #3
Quoting Pankaj Raghav (2023-04-13 08:44:38)
> On 2023-04-13 02:53, Luis Chamberlain wrote:
> > On Wed, Apr 12, 2023 at 10:25:18PM +0200, Pankaj Raghav wrote:
> >> commit ac3b43283923 ("module: replace module_layout with module_memory")
> >> changed the struct module data structure from module_layout to
> >> module_memory. The core_layout member which is used while loading
> >> modules are not available anymore leading to the following error while
> >> running gdb:
> >>
> >> (gdb) lx-symbols
> >> loading vmlinux
> >> Python Exception <class 'gdb.error'>: There is no member named core_layout.
> >> Error occurred in Python: There is no member named core_layout.
> >>
> >> Replace core_layout with its new counterpart mem[MOD_TEXT].
> >>
> >> Fixes: ac3b43283923 ("module: replace module_layout with module_memory")
> >> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
> >> ---
> >>  scripts/gdb/linux/constants.py.in | 3 +++
> >>  scripts/gdb/linux/modules.py      | 4 ++--
> >>  scripts/gdb/linux/symbols.py      | 4 ++--
> >>  3 files changed, 7 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
> >> index 36fd2b145853..471300ba176c 100644
> >> --- a/scripts/gdb/linux/constants.py.in
> >> +++ b/scripts/gdb/linux/constants.py.in
> >> @@ -62,6 +62,9 @@ LX_GDBPARSED(hrtimer_resolution)
> >>  LX_GDBPARSED(IRQD_LEVEL)
> >>  LX_GDBPARSED(IRQ_HIDDEN)
> >>  
> >> +/* linux/module.h */
> >> +LX_GDBPARSED(MOD_TEXT)
> > 
> > Should we just fill in the rest of the other sections too while at it?
> > 
> 
> I don't see them used in the scripts. Maybe we can add them when needed?

I think there's a runtime-cost to getting these constants, as we
interogate GDB to get the values.

Because of that, I think values should only be added when required,
unless the python code is only lazy-evaluating these.

--
Kieran
  
Luis Chamberlain April 13, 2023, 9:04 p.m. UTC | #4
On Thu, Apr 13, 2023 at 02:47:30PM +0100, Kieran Bingham wrote:
> Quoting Pankaj Raghav (2023-04-13 08:44:38)
> > On 2023-04-13 02:53, Luis Chamberlain wrote:
> > > On Wed, Apr 12, 2023 at 10:25:18PM +0200, Pankaj Raghav wrote:
> > >> commit ac3b43283923 ("module: replace module_layout with module_memory")
> > >> changed the struct module data structure from module_layout to
> > >> module_memory. The core_layout member which is used while loading
> > >> modules are not available anymore leading to the following error while
> > >> running gdb:
> > >>
> > >> (gdb) lx-symbols
> > >> loading vmlinux
> > >> Python Exception <class 'gdb.error'>: There is no member named core_layout.
> > >> Error occurred in Python: There is no member named core_layout.
> > >>
> > >> Replace core_layout with its new counterpart mem[MOD_TEXT].
> > >>
> > >> Fixes: ac3b43283923 ("module: replace module_layout with module_memory")
> > >> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
> > >> ---
> > >>  scripts/gdb/linux/constants.py.in | 3 +++
> > >>  scripts/gdb/linux/modules.py      | 4 ++--
> > >>  scripts/gdb/linux/symbols.py      | 4 ++--
> > >>  3 files changed, 7 insertions(+), 4 deletions(-)
> > >>
> > >> diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
> > >> index 36fd2b145853..471300ba176c 100644
> > >> --- a/scripts/gdb/linux/constants.py.in
> > >> +++ b/scripts/gdb/linux/constants.py.in
> > >> @@ -62,6 +62,9 @@ LX_GDBPARSED(hrtimer_resolution)
> > >>  LX_GDBPARSED(IRQD_LEVEL)
> > >>  LX_GDBPARSED(IRQ_HIDDEN)
> > >>  
> > >> +/* linux/module.h */
> > >> +LX_GDBPARSED(MOD_TEXT)
> > > 
> > > Should we just fill in the rest of the other sections too while at it?
> > > 
> > 
> > I don't see them used in the scripts. Maybe we can add them when needed?
> 
> I think there's a runtime-cost to getting these constants, as we
> interogate GDB to get the values.
> 
> Because of that, I think values should only be added when required,
> unless the python code is only lazy-evaluating these.

OK thanks, applied and pushed to modules-next.

  Luis
  

Patch

diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in
index 36fd2b145853..471300ba176c 100644
--- a/scripts/gdb/linux/constants.py.in
+++ b/scripts/gdb/linux/constants.py.in
@@ -62,6 +62,9 @@  LX_GDBPARSED(hrtimer_resolution)
 LX_GDBPARSED(IRQD_LEVEL)
 LX_GDBPARSED(IRQ_HIDDEN)
 
+/* linux/module.h */
+LX_GDBPARSED(MOD_TEXT)
+
 /* linux/mount.h */
 LX_VALUE(MNT_NOSUID)
 LX_VALUE(MNT_NODEV)
diff --git a/scripts/gdb/linux/modules.py b/scripts/gdb/linux/modules.py
index 441b23239896..261f28640f4c 100644
--- a/scripts/gdb/linux/modules.py
+++ b/scripts/gdb/linux/modules.py
@@ -13,7 +13,7 @@ 
 
 import gdb
 
-from linux import cpus, utils, lists
+from linux import cpus, utils, lists, constants
 
 
 module_type = utils.CachedType("struct module")
@@ -73,7 +73,7 @@  class LxLsmod(gdb.Command):
                 "        " if utils.get_long_type().sizeof == 8 else ""))
 
         for module in module_list():
-            layout = module['core_layout']
+            layout = module['mem'][constants.LX_MOD_TEXT]
             gdb.write("{address} {name:<19} {size:>8}  {ref}".format(
                 address=str(layout['base']).split()[0],
                 name=module['name'].string(),
diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py
index dc07b6d12e30..fdad3f32c747 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, utils
+from linux import modules, utils, constants
 
 
 if hasattr(gdb, 'Breakpoint'):
@@ -109,7 +109,7 @@  lx-symbols command."""
 
     def load_module_symbols(self, module):
         module_name = module['name'].string()
-        module_addr = str(module['core_layout']['base']).split()[0]
+        module_addr = str(module['mem'][constants.LX_MOD_TEXT]['base']).split()[0]
 
         module_file = self._get_module_file(module_name)
         if not module_file and not self.module_files_updated: