Hi James,
On 6/8/22 8:40 AM, James Hilliard wrote:
It seems the gcc preprocessor breaks when typeof is used with
macros.
Fixes errors like:
error: expected identifier or '(' before '#pragma'
106 | SEC("cgroup/bind6")
| ^~~
error: expected '=', ',', ';', 'asm' or '__attribute__' before '#pragma'
114 | char _license[] SEC("license") = "GPL";
| ^~~
Signed-off-by: James Hilliard <james.hilliard1@xxxxxxxxx>
---
Changes v1 -> v2:
- replace typeof with __typeof__ instead of changing pragma macros
---
tools/lib/bpf/bpf_core_read.h | 16 ++++++++--------
tools/lib/bpf/bpf_helpers.h | 4 ++--
tools/lib/bpf/bpf_tracing.h | 24 ++++++++++++------------
tools/lib/bpf/btf.h | 4 ++--
tools/lib/bpf/libbpf_internal.h | 6 +++---
tools/lib/bpf/usdt.bpf.h | 6 +++---
tools/lib/bpf/xsk.h | 12 ++++++------
7 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/tools/lib/bpf/bpf_core_read.h b/tools/lib/bpf/bpf_core_read.h
index fd48b1ff59ca..d3a88721c9e7 100644
--- a/tools/lib/bpf/bpf_core_read.h
+++ b/tools/lib/bpf/bpf_core_read.h
@@ -111,7 +111,7 @@ enum bpf_enum_value_kind {
})
#define ___bpf_field_ref1(field) (field)
-#define ___bpf_field_ref2(type, field) (((typeof(type) *)0)->field)
+#define ___bpf_field_ref2(type, field) (((__typeof__(type) *)0)->field)
#define ___bpf_field_ref(args...) \
___bpf_apply(___bpf_field_ref, ___bpf_narg(args))(args)
Can't we just add the below?
#ifndef typeof
# define typeof __typeof__
#endif
Thanks,
Daniel