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.
Context: https://lore.kernel.org/patchwork/patch/1214060 https://lore.kernel.org/patchwork/patch/1216174
Signed-off-by: Clement Courbet courbet@google.com Reviewed-by: Nathan Chancellor natechancellor@gmail.com Tested-by: Nathan Chancellor natechancellor@gmail.com Cc: stable@vger.kernel.org # v4.14+ Fixes: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp")
---
v2: Use and array type as suggested by Segher Boessenkool Add fix tags.
v3: Properly place tags. --- arch/powerpc/include/asm/setjmp.h | 6 ++++-- arch/powerpc/kexec/Makefile | 3 --- arch/powerpc/xmon/Makefile | 3 --- 3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/setjmp.h b/arch/powerpc/include/asm/setjmp.h index e9f81bb3f83b..f798e80e4106 100644 --- a/arch/powerpc/include/asm/setjmp.h +++ b/arch/powerpc/include/asm/setjmp.h @@ -7,7 +7,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 */ diff --git a/arch/powerpc/kexec/Makefile b/arch/powerpc/kexec/Makefile index 378f6108a414..86380c69f5ce 100644 --- a/arch/powerpc/kexec/Makefile +++ b/arch/powerpc/kexec/Makefile @@ -3,9 +3,6 @@ # Makefile for the linux kernel. #
-# Avoid clang warnings around longjmp/setjmp declarations -CFLAGS_crash.o += -ffreestanding - obj-y += core.o crash.o core_$(BITS).o
obj-$(CONFIG_PPC32) += relocate_32.o diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile index c3842dbeb1b7..6f9cccea54f3 100644 --- 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 - GCOV_PROFILE := n KCOV_INSTRUMENT := n UBSAN_SANITIZE := n
On Mon, Mar 30, 2020 at 1:04 AM Clement Courbet courbet@google.com wrote:
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.
Context: https://lore.kernel.org/patchwork/patch/1214060 https://lore.kernel.org/patchwork/patch/1216174
Signed-off-by: Clement Courbet courbet@google.com Reviewed-by: Nathan Chancellor natechancellor@gmail.com Tested-by: Nathan Chancellor natechancellor@gmail.com Cc: stable@vger.kernel.org # v4.14+ Fixes: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp")
Third time's a charm (for patches that tackle this warning). Thanks for following up on this cleanup! Reviewed-by: Nick Desaulniers ndesaulniers@google.com Tested-by: Nick Desaulniers ndesaulniers@google.com
The extent of my testing was compile testing with Clang.
v2: Use and array type as suggested by Segher Boessenkool Add fix tags.
v3: Properly place tags.
arch/powerpc/include/asm/setjmp.h | 6 ++++-- arch/powerpc/kexec/Makefile | 3 --- arch/powerpc/xmon/Makefile | 3 --- 3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/setjmp.h b/arch/powerpc/include/asm/setjmp.h index e9f81bb3f83b..f798e80e4106 100644 --- a/arch/powerpc/include/asm/setjmp.h +++ b/arch/powerpc/include/asm/setjmp.h @@ -7,7 +7,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 */ diff --git a/arch/powerpc/kexec/Makefile b/arch/powerpc/kexec/Makefile index 378f6108a414..86380c69f5ce 100644 --- a/arch/powerpc/kexec/Makefile +++ b/arch/powerpc/kexec/Makefile @@ -3,9 +3,6 @@ # Makefile for the linux kernel. #
-# Avoid clang warnings around longjmp/setjmp declarations -CFLAGS_crash.o += -ffreestanding
obj-y += core.o crash.o core_$(BITS).o
obj-$(CONFIG_PPC32) += relocate_32.o diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile index c3842dbeb1b7..6f9cccea54f3 100644 --- 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
GCOV_PROFILE := n KCOV_INSTRUMENT := n UBSAN_SANITIZE := n -- 2.26.0.rc2.310.g2932bb562d-goog
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp").
The bot has tested the following trees: v5.5.13, v5.4.28, v4.19.113, v4.14.174.
v5.5.13: Build OK! v5.4.28: Failed to apply! Possible dependencies: 74277f00b232 ("powerpc/fsl_booke/kaslr: export offset in VMCOREINFO ELF notes") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 9f7bd9201521 ("powerpc/32: Split kexec low level code out of misc_32.S")
v4.19.113: Failed to apply! Possible dependencies: 2874c5fd2842 ("treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152") 40b0b3f8fb2d ("treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 9f7bd9201521 ("powerpc/32: Split kexec low level code out of misc_32.S") aa497d435241 ("powerpc: Add attributes for setjmp/longjmp") c47ca98d32a2 ("powerpc: Move core kernel logic into arch/powerpc/Kbuild") fb0b0a73b223 ("powerpc: Enable kcov")
v4.14.174: Failed to apply! Possible dependencies: 06bb53b33804 ("powerpc: store and restore the pkey state across context switches") 1421dc6d4829 ("powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS") 1b4037deadb6 ("powerpc: helper function to read, write AMR, IAMR, UAMOR registers") 2ddc53f3a751 ("powerpc: implementation for arch_set_user_pkey_access()") 471d7ff8b51b ("powerpc/64s: Remove POWER4 support") 4d70b698f957 ("powerpc: helper functions to initialize AMR, IAMR and UAMOR registers") 4fb158f65ac5 ("powerpc: track allocation status of all pkeys") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 92e3da3cf193 ("powerpc: initial pkey plumbing") a73657ea19ae ("powerpc/64: Add GENERIC_CPU support for little endian") aa497d435241 ("powerpc: Add attributes for setjmp/longjmp") badf436f6fa5 ("powerpc/Makefiles: Convert ifeq to ifdef where possible") c0d64cf9fefd ("powerpc: Use feature bit for RTC presence rather than timebase presence") c1807e3f8466 ("powerpc/64: Free up CPU_FTR_ICSWX") c47ca98d32a2 ("powerpc: Move core kernel logic into arch/powerpc/Kbuild") cf43d3b26452 ("powerpc: Enable pkey subsystem")
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
Michael, is this worth us sending manual backports to stable?
On Tue, Mar 31, 2020 at 6:11 AM Sasha Levin sashal@kernel.org wrote:
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp").
The bot has tested the following trees: v5.5.13, v5.4.28, v4.19.113, v4.14.174.
v5.5.13: Build OK! v5.4.28: Failed to apply! Possible dependencies: 74277f00b232 ("powerpc/fsl_booke/kaslr: export offset in VMCOREINFO ELF notes") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 9f7bd9201521 ("powerpc/32: Split kexec low level code out of misc_32.S")
v4.19.113: Failed to apply! Possible dependencies: 2874c5fd2842 ("treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152") 40b0b3f8fb2d ("treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 9f7bd9201521 ("powerpc/32: Split kexec low level code out of misc_32.S") aa497d435241 ("powerpc: Add attributes for setjmp/longjmp") c47ca98d32a2 ("powerpc: Move core kernel logic into arch/powerpc/Kbuild") fb0b0a73b223 ("powerpc: Enable kcov")
v4.14.174: Failed to apply! Possible dependencies: 06bb53b33804 ("powerpc: store and restore the pkey state across context switches") 1421dc6d4829 ("powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS") 1b4037deadb6 ("powerpc: helper function to read, write AMR, IAMR, UAMOR registers") 2ddc53f3a751 ("powerpc: implementation for arch_set_user_pkey_access()") 471d7ff8b51b ("powerpc/64s: Remove POWER4 support") 4d70b698f957 ("powerpc: helper functions to initialize AMR, IAMR and UAMOR registers") 4fb158f65ac5 ("powerpc: track allocation status of all pkeys") 793b08e2efff ("powerpc/kexec: Move kexec files into a dedicated subdir.") 92e3da3cf193 ("powerpc: initial pkey plumbing") a73657ea19ae ("powerpc/64: Add GENERIC_CPU support for little endian") aa497d435241 ("powerpc: Add attributes for setjmp/longjmp") badf436f6fa5 ("powerpc/Makefiles: Convert ifeq to ifdef where possible") c0d64cf9fefd ("powerpc: Use feature bit for RTC presence rather than timebase presence") c1807e3f8466 ("powerpc/64: Free up CPU_FTR_ICSWX") c47ca98d32a2 ("powerpc: Move core kernel logic into arch/powerpc/Kbuild") cf43d3b26452 ("powerpc: Enable pkey subsystem")
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
-- Thanks Sasha
linux-stable-mirror@lists.linaro.org