On Tue, Feb 07, 2023 at 05:14:59PM +0000, Alan Maguire wrote: SNIP > + > /* > * This corresponds to the same macro defined in > * include/linux/kallsyms.h > @@ -818,6 +901,11 @@ static int functions_cmp(const void *_a, const void *_b) > const struct elf_function *a = _a; > const struct elf_function *b = _b; > > + /* if search key allows prefix match, verify target has matching > + * prefix len and prefix matches. > + */ > + if (a->prefixlen && a->prefixlen == b->prefixlen) > + return strncmp(a->name, b->name, b->prefixlen); > return strcmp(a->name, b->name); > } > > @@ -850,14 +938,22 @@ static int btf_encoder__collect_function(struct btf_encoder *encoder, GElf_Sym * > } > > encoder->functions.entries[encoder->functions.cnt].name = name; > + if (strchr(name, '.')) { > + const char *suffix = strchr(name, '.'); > + > + encoder->functions.suffix_cnt++; > + encoder->functions.entries[encoder->functions.cnt].prefixlen = suffix - name; > + } > encoder->functions.entries[encoder->functions.cnt].generated = false; > + encoder->functions.entries[encoder->functions.cnt].function = NULL; should we zero functions.state in here? next patch adds other stuff like got_parameter_names and parameter_names in it, so looks like it could actually matter jirka > encoder->functions.cnt++; > return 0; > } > > -static struct elf_function *btf_encoder__find_function(const struct btf_encoder *encoder, const char *name) > +static struct elf_function *btf_encoder__find_function(const struct btf_encoder *encoder, > + const char *name, size_t prefixlen) > { > - struct elf_function key = { .name = name }; > + struct elf_function key = { .name = name, .prefixlen = prefixlen }; > SNIP