62 lines
1.9 KiB
Diff
62 lines
1.9 KiB
Diff
From b31ca3fa0e62fde6aa66f855136e29e088ad9dde Mon Sep 17 00:00:00 2001
|
|
From: James Hilliard <james.hilliard1@gmail.com>
|
|
Date: Wed, 6 Jul 2022 05:18:38 -0600
|
|
Subject: [PATCH] libbpf: Disable SEC pragma macro on GCC
|
|
|
|
It seems the gcc preprocessor breaks with pragmas when surrounding
|
|
__attribute__.
|
|
|
|
Disable these pragmas on GCC due to upstream bugs see:
|
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578
|
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90400
|
|
|
|
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@gmail.com>
|
|
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
|
|
Link: https://lore.kernel.org/bpf/20220706111839.1247911-1-james.hilliard1@gmail.com
|
|
---
|
|
src/bpf_helpers.h | 13 +++++++++++++
|
|
1 file changed, 13 insertions(+)
|
|
|
|
diff --git a/src/bpf_helpers.h b/src/bpf_helpers.h
|
|
index fb04eaf..7349b16 100644
|
|
--- a/src/bpf_helpers.h
|
|
+++ b/src/bpf_helpers.h
|
|
@@ -22,12 +22,25 @@
|
|
* To allow use of SEC() with externs (e.g., for extern .maps declarations),
|
|
* make sure __attribute__((unused)) doesn't trigger compilation warning.
|
|
*/
|
|
+#if __GNUC__ && !__clang__
|
|
+
|
|
+/*
|
|
+ * Pragma macros are broken on GCC
|
|
+ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578
|
|
+ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90400
|
|
+ */
|
|
+#define SEC(name) __attribute__((section(name), used))
|
|
+
|
|
+#else
|
|
+
|
|
#define SEC(name) \
|
|
_Pragma("GCC diagnostic push") \
|
|
_Pragma("GCC diagnostic ignored \"-Wignored-attributes\"") \
|
|
__attribute__((section(name), used)) \
|
|
_Pragma("GCC diagnostic pop") \
|
|
|
|
+#endif
|
|
+
|
|
/* Avoid 'linux/stddef.h' definition of '__always_inline'. */
|
|
#undef __always_inline
|
|
#define __always_inline inline __attribute__((always_inline))
|
|
--
|
|
2.33.0
|
|
|