fprintf: Fix `*` not being printed for pointers with btf_type_tag
Recent change to fprintf (see below) causes incorrect `type_fprintf()`
behavior for pointers annotated with btf_type_tag, for example:
$ cat tag-test.c
#define __t __attribute__((btf_type_tag("t1")))
struct foo {
int __t *a;
} g;
$ clang -g -c tag-test.c -o tag-test.o && \
pahole -J tag-test.o && pahole --sort -F dwarf tag-test.o
struct foo {
int a; /* 0 8 */
...
};
Note that `*` is missing in the pahole output.
The issue is caused by `goto next_type` that jumps over the
`tag__name()` that is responsible for pointer printing.
As agreed in [1] `type__fprintf()` is modified to skip type tags for now
and would be modified to emit type tags later.
The change in `__tag__name()` is necessary to avoid the following behavior:
$ cat tag-test.c
#define __t __attribute__((btf_type_tag("t1")))
struct foo {
int __t *a;
int __t __t *b;
} g;
$ clang -g -c tag-test.c -o tag-test.o && \
pahole -J tag-test.o && pahole --sort -F dwarf tag-test.o
struct foo {
int * a; /* 0 8 */
int * b; /* 8 8 */
...
};
Note the extra space before `*` for field `b`.
The issue was reported and tracked down to the root cause by
Arnaldo Carvalho de Melo.
Links:
[1] https://lore.kernel.org/dwarves/20230314230417.1507266-1-eddyz87@gmail.com/T/#md82b04f66867434524beec746138951f26a3977e
Fixes: 40ebd8b9e3312d0a ("fprintf: Correct names for types with btf_type_tag attribute")
Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Eduard Zingerman <eddyz87@gmail.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Cc: kernel-team@fb.com
Link: https://lore.kernel.org/dwarves/20230314230417.1507266-1-eddyz87@gmail.com/T/#mc630bcd474ddd64c70d237edd4e0590dc048d63d
Link: https://lore.kernel.org/r/20230330212700.697124-1-eddyz87@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 file changed