From 0c3a7f69afedcfe323a0a0d8871cf5f561843990 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 15 Apr 2020 19:28:12 +0200 Subject: [PATCH] 4.14-stable patches added patches: powerpc-add-attributes-for-setjmp-longjmp.patch powerpc-make-setjmp-longjmp-signature-standard.patch --- ...pc-add-attributes-for-setjmp-longjmp.patch | 41 +++++++++++ ...ke-setjmp-longjmp-signature-standard.patch | 73 +++++++++++++++++++ queue-4.14/series | 2 + 3 files changed, 116 insertions(+) create mode 100644 queue-4.14/powerpc-add-attributes-for-setjmp-longjmp.patch create mode 100644 queue-4.14/powerpc-make-setjmp-longjmp-signature-standard.patch diff --git a/queue-4.14/powerpc-add-attributes-for-setjmp-longjmp.patch b/queue-4.14/powerpc-add-attributes-for-setjmp-longjmp.patch new file mode 100644 index 00000000000..6b8cafa1223 --- /dev/null +++ b/queue-4.14/powerpc-add-attributes-for-setjmp-longjmp.patch @@ -0,0 +1,41 @@ +From aa497d4352414aad22e792b35d0aaaa12bbc37c5 Mon Sep 17 00:00:00 2001 +From: Segher Boessenkool +Date: Wed, 4 Sep 2019 14:11:07 +0000 +Subject: powerpc: Add attributes for setjmp/longjmp + +From: Segher Boessenkool + +commit aa497d4352414aad22e792b35d0aaaa12bbc37c5 upstream. + +The setjmp function should be declared as "returns_twice", or bad +things can happen[1]. This does not actually change generated code in +my testing. + +The longjmp function should be declared as "noreturn", so that the +compiler can optimise calls to it better. This makes the generated +code a little shorter. + +1: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-returns_005ftwice-function-attribute + +Signed-off-by: Segher Boessenkool +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/c02ce4a573f3bac907e2c70957a2d1275f910013.1567605586.git.segher@kernel.crashing.org +Signed-off-by: Nathan Chancellor +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/include/asm/setjmp.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/powerpc/include/asm/setjmp.h ++++ b/arch/powerpc/include/asm/setjmp.h +@@ -12,7 +12,7 @@ + + #define JMP_BUF_LEN 23 + +-extern long setjmp(long *); +-extern void longjmp(long *, long); ++extern long setjmp(long *) __attribute__((returns_twice)); ++extern void longjmp(long *, long) __attribute__((noreturn)); + + #endif /* _ASM_POWERPC_SETJMP_H */ diff --git a/queue-4.14/powerpc-make-setjmp-longjmp-signature-standard.patch b/queue-4.14/powerpc-make-setjmp-longjmp-signature-standard.patch new file mode 100644 index 00000000000..4f66c5ba4e2 --- /dev/null +++ b/queue-4.14/powerpc-make-setjmp-longjmp-signature-standard.patch @@ -0,0 +1,73 @@ +From c17eb4dca5a353a9dbbb8ad6934fe57af7165e91 Mon Sep 17 00:00:00 2001 +From: Clement Courbet +Date: Mon, 30 Mar 2020 10:03:56 +0200 +Subject: powerpc: Make setjmp/longjmp signature standard + +From: Clement Courbet + +commit c17eb4dca5a353a9dbbb8ad6934fe57af7165e91 upstream. + +Declaring setjmp()/longjmp() as taking longs makes the signature +non-standard, and makes clang complain. In the past, this has been +worked around by adding -ffreestanding to the compile flags. + +The implementation looks like it only ever propagates the value +(in longjmp) or sets it to 1 (in setjmp), and we only call longjmp +with integer parameters. + +This allows removing -ffreestanding from the compilation flags. + +Fixes: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp") +Cc: stable@vger.kernel.org # v4.14+ +Signed-off-by: Clement Courbet +Reviewed-by: Nathan Chancellor +Tested-by: Nathan Chancellor +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/20200330080400.124803-1-courbet@google.com +Signed-off-by: Nathan Chancellor +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/include/asm/setjmp.h | 6 ++++-- + arch/powerpc/kernel/Makefile | 3 --- + arch/powerpc/xmon/Makefile | 3 --- + 3 files changed, 4 insertions(+), 8 deletions(-) + +--- a/arch/powerpc/include/asm/setjmp.h ++++ b/arch/powerpc/include/asm/setjmp.h +@@ -12,7 +12,9 @@ + + #define JMP_BUF_LEN 23 + +-extern long setjmp(long *) __attribute__((returns_twice)); +-extern void longjmp(long *, long) __attribute__((noreturn)); ++typedef long jmp_buf[JMP_BUF_LEN]; ++ ++extern int setjmp(jmp_buf env) __attribute__((returns_twice)); ++extern void longjmp(jmp_buf env, int val) __attribute__((noreturn)); + + #endif /* _ASM_POWERPC_SETJMP_H */ +--- a/arch/powerpc/kernel/Makefile ++++ b/arch/powerpc/kernel/Makefile +@@ -5,9 +5,6 @@ + + CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"' + +-# Avoid clang warnings around longjmp/setjmp declarations +-CFLAGS_crash.o += -ffreestanding +- + subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror + + ifeq ($(CONFIG_PPC64),y) +--- a/arch/powerpc/xmon/Makefile ++++ b/arch/powerpc/xmon/Makefile +@@ -1,9 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0 + # Makefile for xmon + +-# Avoid clang warnings around longjmp/setjmp declarations +-subdir-ccflags-y := -ffreestanding +- + subdir-ccflags-$(CONFIG_PPC_WERROR) += -Werror + + GCOV_PROFILE := n diff --git a/queue-4.14/series b/queue-4.14/series index cd995e3e9d3..352b7a1bb42 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -90,3 +90,5 @@ powerpc-hash64-devmap-use-h_page_thp_huge-when-setting-up-huge-devmap-pte-entrie powerpc-xive-use-xive_bad_irq-instead-of-zero-to-catch-non-configured-ipis.patch powerpc-kprobes-ignore-traps-that-happened-in-real-mode.patch scsi-mpt3sas-fix-kernel-panic-observed-on-soft-hba-unplug.patch +powerpc-add-attributes-for-setjmp-longjmp.patch +powerpc-make-setjmp-longjmp-signature-standard.patch -- 2.47.3