Skip to content

Commit

Permalink
tools resolve_btfids: Add support for set symbols
Browse files Browse the repository at this point in the history
The set symbol does not have the unique number suffix,
so we need to give it a special parsing function.

This was omitted in the first batch, because there was
no set support yet, so it slipped in the testing.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200825192124.710397-3-jolsa@kernel.org
  • Loading branch information
Jiri Olsa authored and Alexei Starovoitov committed Aug 25, 2020
1 parent 193a983 commit a5f53b1
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion tools/bpf/resolve_btfids/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,24 @@ static char *get_id(const char *prefix_end)
return id;
}

static struct btf_id *add_set(struct object *obj, char *name)
{
/*
* __BTF_ID__set__name
* name = ^
* id = ^
*/
char *id = name + sizeof(BTF_SET "__") - 1;
int len = strlen(name);

if (id >= name + len) {
pr_err("FAILED to parse set name: %s\n", name);
return NULL;
}

return btf_id__add(&obj->sets, id, true);
}

static struct btf_id *add_symbol(struct rb_root *root, char *name, size_t size)
{
char *id;
Expand Down Expand Up @@ -383,7 +401,7 @@ static int symbols_collect(struct object *obj)
id = add_symbol(&obj->funcs, prefix, sizeof(BTF_FUNC) - 1);
/* set */
} else if (!strncmp(prefix, BTF_SET, sizeof(BTF_SET) - 1)) {
id = add_symbol(&obj->sets, prefix, sizeof(BTF_SET) - 1);
id = add_set(obj, prefix);
/*
* SET objects store list's count, which is encoded
* in symbol's size, together with 'cnt' field hence
Expand Down

0 comments on commit a5f53b1

Please sign in to comment.