On 2023/05/25 23:39, lijiang wrote: > On Thu, May 11, 2023 at 12:35 PM HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab@xxxxxxx> > wrote: > >> fix {lowest,highest}_module_address() and is_kernel_text() >> >> Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> >> --- >> defs.h | 6 ++++-- >> symbols.c | 29 ++++++++++++++++++----------- >> 2 files changed, 22 insertions(+), 13 deletions(-) >> >> diff --git a/defs.h b/defs.h >> index 4051eb8d134e..95e44e8cb87c 100644 >> --- a/defs.h >> +++ b/defs.h >> @@ -2988,8 +2988,10 @@ struct load_module { >> int nr_mems; >> }; >> >> -#define IN_MODULE(A,L) (_in_module(A, L, MOD_TEXT)) >> -#define IN_MODULE_INIT(A,L) (_in_module(A, L, MOD_INIT_TEXT)) > > +#define IN_MODULE(A,L) (_in_module_range(A, L, MOD_TEXT, >> MOD_RO_AFTER_INIT)) >> +#define IN_MODULE_INIT(A,L) (_in_module_range(A, L, MOD_INIT_TEXT, >> MOD_INIT_RODATA)) >> +#define IN_MODULE_TEXT(A,L) (_in_module_range(A, L, MOD_TEXT, >> MOD_TEXT) || \ >> + _in_module_range(A, L, MOD_INIT_TEXT, >> MOD_INIT_TEXT)) >> >> /* >> #define IN_MODULE(A,L) \ >> diff --git a/symbols.c b/symbols.c >> index 5edc4844b3d8..ef00ce0b79ca 100644 >> --- a/symbols.c >> +++ b/symbols.c >> @@ -106,7 +106,7 @@ static void dump_node(struct struct_elem *, char *, >> unsigned char, unsigned char >> >> static int module_mem_type(ulong, struct load_module *); >> static ulong module_mem_end(ulong, struct load_module *); >> -static int _in_module(ulong, struct load_module *, int); >> +static int _in_module_range(ulong, struct load_module *, int, int); >> struct syment *value_search_module_v2(ulong, ulong *); >> >> static const char *module_start_tags[]; >> @@ -3119,7 +3119,10 @@ lowest_module_address(void) >> lowest = (ulong)(-1); >> for (i = 0; i < st->mods_installed; i++) { >> lm = &st->load_modules[i]; >> - low = lm->mod_base; >> + if (MODULE_MEMORY()) >> + low = lm->mem[lm->address_order[0]].base; >> > > Because the [patch 03/15] will be dropped, oh, so I misunderstood your comment on the patch 03/15, I thought that patch was good. will comment to that 03/15 thread. Thanks, Kazu > the {lowest,highest}_modules_address() need to walk through all module > memory types. I will comment on it next time when reimplementing these two > functions. > > Thanks. > Lianbo > > + else >> + low = lm->mod_base; >> if (low < lowest) >> lowest = low; >> } >> @@ -3133,11 +3136,16 @@ highest_module_address(void) >> int i; >> struct load_module *lm; >> ulong high, highest; >> + struct module_memory *mem; >> >> highest = 0; >> for (i = 0; i < st->mods_installed; i++) { >> lm = &st->load_modules[i]; >> - high = lm->mod_base + lm->mod_size; >> + if (MODULE_MEMORY()) { >> + mem = &lm->mem[lm->address_order[lm->nr_mems-1]]; >> + high = mem->base + mem->size; >> + } else >> + high = lm->mod_base + lm->mod_size; >> if (high > highest) >> highest = high; >> } >> @@ -3530,6 +3538,9 @@ is_kernel_text(ulong value) >> if ((value >= start) && (value < end)) >> return TRUE; >> } >> + } else if (MODULE_MEMORY()) { >> + if (IN_MODULE_TEXT(value, lm)) >> + return TRUE; >> } else { >> switch (kt->flags & (KMOD_V1|KMOD_V2)) >> { >> @@ -14157,17 +14168,13 @@ symbol_complete_match(const char *match, struct >> syment *sp_last) >> } >> >> static int >> -_in_module(ulong addr, struct load_module *lm, int type) >> +_in_module_range(ulong addr, struct load_module *lm, int start, int end) >> { >> ulong base, size; >> - int i, last; >> + int i; >> >> if (MODULE_MEMORY()) { >> - if (type == MOD_TEXT) >> - last = MOD_RO_AFTER_INIT; >> - else >> - last = MOD_INIT_RODATA; >> - for (i = type ; i <= last; i++) { >> + for (i = start ; i <= end; i++) { >> base = lm->mem[i].base; >> size = lm->mem[i].size; >> if (!base) >> @@ -14178,7 +14185,7 @@ _in_module(ulong addr, struct load_module *lm, int >> type) >> return FALSE; >> } >> >> - if (type == MOD_TEXT) { >> + if (start == MOD_TEXT) { >> base = lm->mod_base; >> size = lm->mod_size; >> } else { >> -- >> 2.31.1 >> >> >> -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility Contribution Guidelines: https://github.com/crash-utility/crash/wiki