mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	scripts/gdb/symbols: add specific ko module load command
Patch series "Add GDB memory helper commands", v2. I've created some GDB commands I think useful when I debug some memory issues and kernel module issue. For memory issue, we would like to get slabinfo, slabtrace, page_owner and vmallocinfo to debug the memory issues. For module issue, we would like to query kernel module name when we get a module text address and load module symbol by specific path. Patch 1-2: - Add kernel module related command. Patch 3-5: - Prepares for the memory-related command. Patch 6-8: - Add memory-related commands. This patch (of 8): Add lx-symbols <ko_path> command to support add specific ko module. Example output like below: (gdb) lx-symbols mm/kasan/kasan_test.ko loading @0xffff800002d30000: mm/kasan/kasan_test.ko Link: https://lkml.kernel.org/r/20230808083020.22254-1-Kuan-Ying.Lee@mediatek.com Link: https://lkml.kernel.org/r/20230808083020.22254-2-Kuan-Ying.Lee@mediatek.com Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com> Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Cc: Chinwen Chang <chinwen.chang@mediatek.com> Cc: Matthias Brugger <matthias.bgg@gmail.com> Cc: Qun-Wei Lin <qun-wei.lin@mediatek.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									8e7b7ffbd4
								
							
						
					
					
						commit
						11f956538c
					
				
					 1 changed files with 21 additions and 2 deletions
				
			
		|  | @ -111,11 +111,12 @@ lx-symbols command.""" | |||
|         return "{textaddr} {sections}".format( | ||||
|             textaddr=textaddr, sections="".join(args)) | ||||
| 
 | ||||
|     def load_module_symbols(self, module): | ||||
|     def load_module_symbols(self, module, module_file=None): | ||||
|         module_name = module['name'].string() | ||||
|         module_addr = str(module['mem'][constants.LX_MOD_TEXT]['base']).split()[0] | ||||
| 
 | ||||
|         module_file = self._get_module_file(module_name) | ||||
|         if not module_file: | ||||
|             module_file = self._get_module_file(module_name) | ||||
|         if not module_file and not self.module_files_updated: | ||||
|             self._update_module_files() | ||||
|             module_file = self._get_module_file(module_name) | ||||
|  | @ -138,6 +139,19 @@ lx-symbols command.""" | |||
|         else: | ||||
|             gdb.write("no module object found for '{0}'\n".format(module_name)) | ||||
| 
 | ||||
|     def load_ko_symbols(self, mod_path): | ||||
|         self.loaded_modules = [] | ||||
|         module_list = modules.module_list() | ||||
| 
 | ||||
|         for module in module_list: | ||||
|             module_name = module['name'].string() | ||||
|             module_pattern = ".*/{0}\.ko(?:.debug)?$".format( | ||||
|                 module_name.replace("_", r"[_\-]")) | ||||
|             if re.match(module_pattern, mod_path) and os.path.exists(mod_path): | ||||
|                 self.load_module_symbols(module, mod_path) | ||||
|                 return | ||||
|         raise gdb.GdbError("%s is not a valid .ko\n" % mod_path) | ||||
| 
 | ||||
|     def load_all_symbols(self): | ||||
|         gdb.write("loading vmlinux\n") | ||||
| 
 | ||||
|  | @ -176,6 +190,11 @@ lx-symbols command.""" | |||
|         self.module_files = [] | ||||
|         self.module_files_updated = False | ||||
| 
 | ||||
|         argv = gdb.string_to_argv(arg) | ||||
|         if len(argv) == 1: | ||||
|             self.load_ko_symbols(argv[0]) | ||||
|             return | ||||
| 
 | ||||
|         self.load_all_symbols() | ||||
| 
 | ||||
|         if hasattr(gdb, 'Breakpoint'): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Kuan-Ying Lee
						Kuan-Ying Lee