Signed-off-by: Tao Liu <[email protected]>
Reviewed-by: Philipp Rudo <[email protected]>
---
 kernel.c  | 1 +
 symbols.c | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/kernel.c b/kernel.c
index 3ead4bb..f10b8b2 100644
--- a/kernel.c
+++ b/kernel.c
@@ -4661,6 +4661,7 @@ reinit_modules(void)
         st->ext_module_symtable = NULL;
         st->load_modules = NULL;
         kt->mods_installed = 0;
+       memset(st->mod_symname_hash, 0, sizeof(st->mod_symname_hash));
 
         module_init();
 }
diff --git a/symbols.c b/symbols.c
index 8d3dd95..5603a2e 100644
--- a/symbols.c
+++ b/symbols.c
@@ -1668,6 +1668,7 @@ store_module_symbols_v1(ulong total, int mods_installed)
                                lm->mod_symend = sp;
                        }
                }
+               mod_symtable_hash_install_range(lm->mod_symtable, 
lm->mod_symend);
        }
 
        st->flags |= MODULE_SYMS;
@@ -2148,6 +2149,8 @@ store_module_symbols_v2(ulong total, int mods_installed)
                                lm->mod_init_symend = sp;
                        }
                }
+               mod_symtable_hash_install_range(lm->mod_symtable, 
lm->mod_symend);
+               mod_symtable_hash_install_range(lm->mod_init_symtable, 
lm->mod_init_symend);
        }
 
        st->flags |= MODULE_SYMS;
@@ -12478,8 +12481,10 @@ store_load_module_symbols(bfd *bfd, int dynamic, void 
*minisyms,
                error(INFO, "%s: last symbol: %s is not _MODULE_END_%s?\n",
                        lm->mod_name, lm->mod_load_symend->name, lm->mod_name);
 
+       mod_symtable_hash_remove_range(lm->mod_symtable, lm->mod_symend);
         lm->mod_symtable = lm->mod_load_symtable;
         lm->mod_symend = lm->mod_load_symend;
+       mod_symtable_hash_install_range(lm->mod_symtable, lm->mod_symend);
 
        lm->mod_flags &= ~MOD_EXT_SYMS;
        lm->mod_flags |= MOD_LOAD_SYMS;
@@ -12509,6 +12514,7 @@ delete_load_module(ulong base_addr)
                                req->name = lm->mod_namelist;
                                gdb_interface(req); 
                        }
+                       mod_symtable_hash_remove_range(lm->mod_symtable, 
lm->mod_symend);
                        if (lm->mod_load_symtable) {
                                free(lm->mod_load_symtable);
                                 namespace_ctl(NAMESPACE_FREE,
@@ -12518,6 +12524,7 @@ delete_load_module(ulong base_addr)
                                unlink_module(lm);
                        lm->mod_symtable = lm->mod_ext_symtable;
                        lm->mod_symend = lm->mod_ext_symend;
+                       mod_symtable_hash_install_range(lm->mod_symtable, 
lm->mod_symend);
                        lm->mod_flags &= 
~(MOD_LOAD_SYMS|MOD_REMOTE|MOD_NOPATCH);
                        lm->mod_flags |= MOD_EXT_SYMS;
                        lm->mod_load_symtable = NULL;
@@ -12546,6 +12553,7 @@ delete_load_module(ulong base_addr)
                                req->name = lm->mod_namelist;
                                gdb_interface(req);
                        }
+                       mod_symtable_hash_remove_range(lm->mod_symtable, 
lm->mod_symend);
                        if (lm->mod_load_symtable) {
                                free(lm->mod_load_symtable);
                                namespace_ctl(NAMESPACE_FREE,
@@ -12555,6 +12563,7 @@ delete_load_module(ulong base_addr)
                                unlink_module(lm);
                        lm->mod_symtable = lm->mod_ext_symtable;
                        lm->mod_symend = lm->mod_ext_symend;
+                       mod_symtable_hash_install_range(lm->mod_symtable, 
lm->mod_symend);
                         lm->mod_flags &= 
~(MOD_LOAD_SYMS|MOD_REMOTE|MOD_NOPATCH);
                         lm->mod_flags |= MOD_EXT_SYMS;
                         lm->mod_load_symtable = NULL;
-- 
2.29.2

--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility

Reply via email to