lkml.org 
[lkml]   [2019]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] powerpc: Avoid clang warnings around setjmp and longjmp
    On Sun, Aug 11, 2019 at 7:42 PM Nathan Chancellor
    <natechancellor@gmail.com> wrote:
    >
    > Commit aea447141c7e ("powerpc: Disable -Wbuiltin-requires-header when
    > setjmp is used") disabled -Wbuiltin-requires-header because of a warning
    > about the setjmp and longjmp declarations.
    >
    > r367387 in clang added another diagnostic around this, complaining that
    > there is no jmp_buf declaration.
    >
    > In file included from ../arch/powerpc/xmon/xmon.c:47:
    > ../arch/powerpc/include/asm/setjmp.h:10:13: error: declaration of
    > built-in function 'setjmp' requires the declaration of the 'jmp_buf'
    > type, commonly provided in the header <setjmp.h>.
    > [-Werror,-Wincomplete-setjmp-declaration]
    > extern long setjmp(long *);
    > ^
    > ../arch/powerpc/include/asm/setjmp.h:11:13: error: declaration of
    > built-in function 'longjmp' requires the declaration of the 'jmp_buf'
    > type, commonly provided in the header <setjmp.h>.
    > [-Werror,-Wincomplete-setjmp-declaration]
    > extern void longjmp(long *, long);
    > ^
    > 2 errors generated.
    >
    > Take the same approach as the above commit by disabling the warning for
    > the same reason, we provide our own longjmp/setjmp function.
    >
    > Cc: stable@vger.kernel.org # 4.19+
    > Link: https://github.com/ClangBuiltLinux/linux/issues/625
    > Link: https://github.com/llvm/llvm-project/commit/3be25e79477db2d31ac46493d97eca8c20592b07
    > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

    Thanks for the patch, Nathan.
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

    > ---
    >
    > It may be worth using -fno-builtin-setjmp and -fno-builtin-longjmp
    > instead as it makes it clear to clang that we are not using the builtin
    > longjmp and setjmp functions, which I think is why these warnings are
    > appearing (at least according to the commit that introduced this waring).
    >
    > Sample patch:
    > https://github.com/ClangBuiltLinux/linux/issues/625#issuecomment-519251372
    >
    > However, this is the most conservative approach, as I have already had
    > someone notice this error when building LLVM with PGO on tip of tree
    > LLVM.
    >
    > arch/powerpc/kernel/Makefile | 5 +++--
    > arch/powerpc/xmon/Makefile | 5 +++--
    > 2 files changed, 6 insertions(+), 4 deletions(-)
    >
    > diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
    > index ea0c69236789..44e340ed4722 100644
    > --- a/arch/powerpc/kernel/Makefile
    > +++ b/arch/powerpc/kernel/Makefile
    > @@ -5,8 +5,9 @@
    >
    > CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"'
    >
    > -# Disable clang warning for using setjmp without setjmp.h header
    > -CFLAGS_crash.o += $(call cc-disable-warning, builtin-requires-header)
    > +# Avoid clang warnings about longjmp and setjmp built-ins (inclusion of setjmp.h and declaration of jmp_buf type)
    > +CFLAGS_crash.o += $(call cc-disable-warning, builtin-requires-header) \
    > + $(call cc-disable-warning, incomplete-setjmp-declaration)
    >
    > ifdef CONFIG_PPC64
    > CFLAGS_prom_init.o += $(NO_MINIMAL_TOC)
    > diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
    > index f142570ad860..53f341391210 100644
    > --- a/arch/powerpc/xmon/Makefile
    > +++ b/arch/powerpc/xmon/Makefile
    > @@ -1,8 +1,9 @@
    > # SPDX-License-Identifier: GPL-2.0
    > # Makefile for xmon
    >
    > -# Disable clang warning for using setjmp without setjmp.h header
    > -subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header)
    > +# Avoid clang warnings about longjmp and setjmp built-ins (inclusion of setjmp.h and declaration of jmp_buf type)
    > +subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header) \
    > + $(call cc-disable-warning, incomplete-setjmp-declaration)
    >
    > GCOV_PROFILE := n
    > KCOV_INSTRUMENT := n
    > --
    > 2.23.0.rc2
    >


    --
    Thanks,
    ~Nick Desaulniers

    \
     
     \ /
      Last update: 2019-08-12 19:37    [W:4.348 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site