diff options
Diffstat (limited to 'tools/lib/bpf/bpf_helpers.h')
| -rw-r--r-- | tools/lib/bpf/bpf_helpers.h | 15 | 
1 files changed, 10 insertions, 5 deletions
| diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h index 929a3baca8ef..bbab9ad9dc5a 100644 --- a/tools/lib/bpf/bpf_helpers.h +++ b/tools/lib/bpf/bpf_helpers.h @@ -77,16 +77,21 @@  /*   * Helper macros to manipulate data structures   */ -#ifndef offsetof -#define offsetof(TYPE, MEMBER)	((unsigned long)&((TYPE *)0)->MEMBER) -#endif -#ifndef container_of + +/* offsetof() definition that uses __builtin_offset() might not preserve field + * offset CO-RE relocation properly, so force-redefine offsetof() using + * old-school approach which works with CO-RE correctly + */ +#undef offsetof +#define offsetof(type, member)	((unsigned long)&((type *)0)->member) + +/* redefined container_of() to ensure we use the above offsetof() macro */ +#undef container_of  #define container_of(ptr, type, member)				\  	({							\  		void *__mptr = (void *)(ptr);			\  		((type *)(__mptr - offsetof(type, member)));	\  	}) -#endif  /*   * Compiler (optimization) barrier. |