lkml.org 
[lkml]   [2022]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.18 60/93] libbpf: Disable SEC pragma macro on GCC
    Date
    From: James Hilliard <james.hilliard1@gmail.com>

    [ Upstream commit 18410251f66aee7e82234073ce6656ca20a732a9 ]

    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
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/lib/bpf/bpf_helpers.h | 13 +++++++++++++
    1 file changed, 13 insertions(+)

    diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h
    index 44df982d2a5c..e1ba0f3bb1ff 100644
    --- a/tools/lib/bpf/bpf_helpers.h
    +++ b/tools/lib/bpf/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.35.1
    \
     
     \ /
      Last update: 2022-08-11 18:07    [W:4.199 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site