Hi Aaron,
I split this feature into a couple commits, queued for crash-7.1.2: https://github.com/crash-utility/crash/commit/21874fe73785e8d17544e79c072a13ce1e1546db https://github.com/crash-utility/crash/commit/b3be954095ec08aadebc1f712182c8e190accc36 Thanks, Dave ----- Original Message ----- > > > ----- Original Message ----- > > On Wed 2015-07-08 17:16 -0400, Dave Anderson wrote: > > > > > > Hi Aaron, > > > > > > I was revisiting your v1 patch, and realized that the duplicate symbol > > > check > > > also needs to apply to the "can_eval()" section as well, because a user > > > could > > > enter "dis symbol+<offset>". > > > > > > So I extracted your do-while loop into a discrete function, and beefed it > > > up to handle the entry of symbols with multiple text and data symbols, as > > > well as some other possibilities. In so doing, things got a bit murkier > > > than your original patch. I've attached what I've come up with so far. > > > Tell me what you think. > > > > > > Thanks, > > > Dave > > > > Hi Dave, > > > > > > The changes seem great - thanks for this! > > I'd like to propose the following on top of what you've done so far: > > > > > > diff --git a/defs.h b/defs.h > > index ac17455..cc63de8 100644 > > --- a/defs.h > > +++ b/defs.h > > @@ -4542,6 +4542,7 @@ void symtab_init(void); > > char *check_specified_kernel_debug_file(void); > > void no_debugging_data(int); > > void get_text_init_space(void); > > +int is_symbol_text(struct syment *); > > int is_kernel_text(ulong); > > int is_kernel_data(ulong); > > int is_init_data(ulong value); > > diff --git a/kernel.c b/kernel.c > > index 7331a5b..9a3f14d 100644 > > --- a/kernel.c > > +++ b/kernel.c > > @@ -1347,7 +1347,7 @@ resolve_text_symbol(char *arg, struct syment *sp_in, > > struct gnu_request *req, in > > sp = sp_orig; > > > > do { > > - if ((sp->type == 't') || (sp->type == 'T')) { > > + if (is_symbol_text(sp)) { > > if (!first_text) > > first_text = sp; > > text_symbols++; > > @@ -1383,7 +1383,7 @@ resolve_text_symbol(char *arg, struct syment *sp_in, > > struct gnu_request *req, in > > count = 0; > > sp = sp_orig; > > do { > > - if ((sp->type == 't') || (sp->type == 'T')) { > > + if (is_symbol_text(sp)) { > > if (++count == 1) > > fprintf(fp, > > "duplicate text symbols found: %s\n", > > diff --git a/symbols.c b/symbols.c > > index b83b8b5..e190f24 100644 > > --- a/symbols.c > > +++ b/symbols.c > > @@ -2672,6 +2672,14 @@ compare_mods(const void *v1, const void *v2) > > lm1->mod_base == lm2->mod_base ? 0 : 1); > > } > > > > +int > > +is_symbol_text(struct syment *sp) > > +{ > > + if ((sp->type == 'T') || (sp->type == 't')) > > + return TRUE; > > + else > > + return FALSE; > > +} > > > > /* > > * Check whether a value falls into a text-type (SEC_CODE) section. > > Proposal accepted -- much cleaner... > > Thanks, > Dave > > -- > Crash-utility mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list [email protected] https://www.redhat.com/mailman/listinfo/crash-utility
