On 08/02/2023 20:51, Jiri Olsa wrote: > On Wed, Feb 08, 2023 at 11:43:18AM -0300, Arnaldo Carvalho de Melo wrote: >> Em Wed, Feb 08, 2023 at 02:19:20PM +0100, Jiri Olsa escreveu: >>> 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 >> >> Probably, but that can come as a followup patch, right? > > sure, if Alan is ok with that > it's a great catch; I sent: https://lore.kernel.org/bpf/1675896868-26339-1-git-send-email-alan.maguire@xxxxxxxxxx/ ...as a followup. Thanks! > jirka > >> >> I've applied the patches, combining the patches documenting the two new >> command line options with the patches where those options are >> introduced. >> >> Testing everything now. >> >> Thanks, >> >> - Arnaldo >> >>> 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 >> >> -- >> >> - Arnaldo