Re: [PATCH v2 1/1] libbpf: replace typeof with __typeof__

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux