Message ID | 20191011032901.452042-1-andriin@fb.com |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf-next] libbpf: handle invalid typedef emitted by old GCC | expand |
On Thu, Oct 10, 2019 at 08:29:01PM -0700, Andrii Nakryiko wrote: > Old GCC versions are producing invalid typedef for __gnuc_va_list > pointing to void. Special-case this and emit valid: > > typedef __builtin_va_list __gnuc_va_list; Acked-by: Martin KaFai Lau <kafai@fb.com>
Andrii Nakryiko wrote: > Old GCC versions are producing invalid typedef for __gnuc_va_list > pointing to void. Special-case this and emit valid: > > typedef __builtin_va_list __gnuc_va_list; > > Reported-by: John Fastabend <john.fastabend@gmail.com> > Signed-off-by: Andrii Nakryiko <andriin@fb.com> > --- Acked-by: John Fastabend <john.fastabend@gmail.com>
On Thu, Oct 10, 2019 at 08:29:01PM -0700, Andrii Nakryiko wrote: > Old GCC versions are producing invalid typedef for __gnuc_va_list > pointing to void. Special-case this and emit valid: > > typedef __builtin_va_list __gnuc_va_list; > > Reported-by: John Fastabend <john.fastabend@gmail.com> > Signed-off-by: Andrii Nakryiko <andriin@fb.com> Applied, thanks!
diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c index 87f27e2664c5..139812b46c7b 100644 --- a/tools/lib/bpf/btf_dump.c +++ b/tools/lib/bpf/btf_dump.c @@ -975,6 +975,17 @@ static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id, { const char *name = btf_dump_ident_name(d, id); + /* + * Old GCC versions are emitting invalid typedef for __gnuc_va_list + * pointing to VOID. This generates warnings from btf_dump() and + * results in uncompilable header file, so we are fixing it up here + * with valid typedef into __builtin_va_list. + */ + if (t->type == 0 && strcmp(name, "__gnuc_va_list") == 0) { + btf_dump_printf(d, "typedef __builtin_va_list __gnuc_va_list"); + return; + } + btf_dump_printf(d, "typedef "); btf_dump_emit_type_decl(d, t->type, name, lvl); }
Old GCC versions are producing invalid typedef for __gnuc_va_list pointing to void. Special-case this and emit valid: typedef __builtin_va_list __gnuc_va_list; Reported-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: Andrii Nakryiko <andriin@fb.com> --- tools/lib/bpf/btf_dump.c | 11 +++++++++++ 1 file changed, 11 insertions(+)