diff options
Diffstat (limited to 'tools/lib/bpf/bpf_helpers.h')
| -rw-r--r-- | tools/lib/bpf/bpf_helpers.h | 21 | 
1 files changed, 17 insertions, 4 deletions
diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h index cd17f6d0791f..305c62817dd3 100644 --- a/tools/lib/bpf/bpf_helpers.h +++ b/tools/lib/bpf/bpf_helpers.h @@ -137,7 +137,8 @@  /*   * Helper function to perform a tail call with a constant/immediate map slot.   */ -#if __clang_major__ >= 8 && defined(__bpf__) +#if (defined(__clang__) && __clang_major__ >= 8) || (!defined(__clang__) && __GNUC__ > 12) +#if defined(__bpf__)  static __always_inline void  bpf_tail_call_static(void *ctx, const void *map, const __u32 slot)  { @@ -165,6 +166,7 @@ bpf_tail_call_static(void *ctx, const void *map, const __u32 slot)  		     : "r0", "r1", "r2", "r3", "r4", "r5");  }  #endif +#endif  enum libbpf_pin_type {  	LIBBPF_PIN_NONE, @@ -184,10 +186,21 @@ enum libbpf_tristate {  #define __kptr __attribute__((btf_type_tag("kptr")))  #define __percpu_kptr __attribute__((btf_type_tag("percpu_kptr"))) -#define bpf_ksym_exists(sym) ({									\ -	_Static_assert(!__builtin_constant_p(!!sym), #sym " should be marked as __weak");	\ -	!!sym;											\ +#if defined (__clang__) +#define bpf_ksym_exists(sym) ({						\ +	_Static_assert(!__builtin_constant_p(!!sym),			\ +		       #sym " should be marked as __weak");		\ +	!!sym;								\ +}) +#elif __GNUC__ > 8 +#define bpf_ksym_exists(sym) ({						\ +	_Static_assert(__builtin_has_attribute (*sym, __weak__),	\ +		       #sym " should be marked as __weak");		\ +	!!sym;								\  }) +#else +#define bpf_ksym_exists(sym) !!sym +#endif  #define __arg_ctx __attribute__((btf_decl_tag("arg:ctx")))  #define __arg_nonnull __attribute((btf_decl_tag("arg:nonnull")))  |