summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAndrii Nakryiko <andrii@kernel.org>2021-04-23 11:13:33 -0700
committerAlexei Starovoitov <ast@kernel.org>2021-04-23 14:05:26 -0700
commit0fec7a3cee1cf8e4f86ff563d229408ccbdc2d66 (patch)
tree819ff515663653459f53849db97538345e828e29 /tools
parent5b438f01d7eb2dc9bec7cd79de881b5f155d9a71 (diff)
downloadlinux-stable-0fec7a3cee1cf8e4f86ff563d229408ccbdc2d66.tar.gz
linux-stable-0fec7a3cee1cf8e4f86ff563d229408ccbdc2d66.tar.bz2
linux-stable-0fec7a3cee1cf8e4f86ff563d229408ccbdc2d66.zip
libbpf: Suppress compiler warning when using SEC() macro with externs
When used on externs SEC() macro will trigger compilation warning about inapplicable `__attribute__((used))`. That's expected for extern declarations, so suppress it with the corresponding _Pragma. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/bpf/20210423181348.1801389-4-andrii@kernel.org
Diffstat (limited to 'tools')
-rw-r--r--tools/lib/bpf/bpf_helpers.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h
index b904128626c2..75c7581b304c 100644
--- a/tools/lib/bpf/bpf_helpers.h
+++ b/tools/lib/bpf/bpf_helpers.h
@@ -25,9 +25,16 @@
/*
* Helper macro to place programs, maps, license in
* different sections in elf_bpf file. Section names
- * are interpreted by elf_bpf loader
+ * are interpreted by libbpf depending on the context (BPF programs, BPF maps,
+ * extern variables, etc).
+ * To allow use of SEC() with externs (e.g., for extern .maps declarations),
+ * make sure __attribute__((unused)) doesn't trigger compilation warning.
*/
-#define SEC(NAME) __attribute__((section(NAME), used))
+#define SEC(name) \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Wignored-attributes\"") \
+ __attribute__((section(name), used)) \
+ _Pragma("GCC diagnostic pop") \
/* Avoid 'linux/stddef.h' definition of '__always_inline'. */
#undef __always_inline