stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] powerpc: Make setjmp/longjmp signature standard
       [not found] <20200327100801.161671-1-courbet@google.com>
@ 2020-03-30  6:43 ` Clement Courbet
  2020-03-30  7:57   ` Nathan Chancellor
  2020-03-30  8:03 ` [PATCH v3] " Clement Courbet
  1 sibling, 1 reply; 6+ messages in thread
From: Clement Courbet @ 2020-03-30  6:43 UTC (permalink / raw)
  Cc: Nick Desaulniers, Nathan Chancellor, Michael Ellerman,
	Segher Boessenkool, Clement Courbet, stable,
	Benjamin Herrenschmidt, Paul Mackerras, Allison Randal,
	Thomas Gleixner, Greg Kroah-Hartman, Christophe Leroy,
	linuxppc-dev, linux-kernel, clang-built-linux

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>

---

v2:
Use and array type as suggested by Segher Boessenkool
Cc: stable@vger.kernel.org # v4.14+
Fixes: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp")
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] powerpc: Make setjmp/longjmp signature standard
  2020-03-30  6:43 ` [PATCH v2] powerpc: Make setjmp/longjmp signature standard Clement Courbet
@ 2020-03-30  7:57   ` Nathan Chancellor
  0 siblings, 0 replies; 6+ messages in thread
From: Nathan Chancellor @ 2020-03-30  7:57 UTC (permalink / raw)
  To: Clement Courbet
  Cc: Nick Desaulniers, Michael Ellerman, Segher Boessenkool, stable,
	Benjamin Herrenschmidt, Paul Mackerras, Allison Randal,
	Thomas Gleixner, Greg Kroah-Hartman, Christophe Leroy,
	linuxppc-dev, linux-kernel, clang-built-linux

On Mon, Mar 30, 2020 at 08:43:19AM +0200, Clement Courbet 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>
> 
> ---
> 
> v2:
> Use and array type as suggested by Segher Boessenkool
> Cc: stable@vger.kernel.org # v4.14+
> Fixes: c9029ef9c957 ("powerpc: Avoid clang warnings around setjmp and longjmp")

Actual diff itself looks good but these two tags need to be above your
signoff to be included in the final changelog. Not sure if Michael will
want a v3 with that or if it can manually be done when applying.

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3] powerpc: Make setjmp/longjmp signature standard
       [not found] <20200327100801.161671-1-courbet@google.com>
  2020-03-30  6:43 ` [PATCH v2] powerpc: Make setjmp/longjmp signature standard Clement Courbet
@ 2020-03-30  8:03 ` Clement Courbet
  2020-03-30 16:20   ` Nick Desaulniers
  2020-03-31 13:11   ` Sasha Levin
  1 sibling, 2 replies; 6+ messages in thread
From: Clement Courbet @ 2020-03-30  8:03 UTC (permalink / raw)
  Cc: Nick Desaulniers, Nathan Chancellor, Michael Ellerman,
	Segher Boessenkool, Clement Courbet, stable,
	Benjamin Herrenschmidt, Paul Mackerras, Thomas Gleixner,
	Greg Kroah-Hartman, Christophe Leroy, linuxppc-dev, linux-kernel,
	clang-built-linux

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
-- 
2.26.0.rc2.310.g2932bb562d-goog


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] powerpc: Make setjmp/longjmp signature standard
  2020-03-30  8:03 ` [PATCH v3] " Clement Courbet
@ 2020-03-30 16:20   ` Nick Desaulniers
  2020-03-31 13:11   ` Sasha Levin
  1 sibling, 0 replies; 6+ messages in thread
From: Nick Desaulniers @ 2020-03-30 16:20 UTC (permalink / raw)
  To: Clement Courbet
  Cc: Nathan Chancellor, Michael Ellerman, Segher Boessenkool, # 3.4.x,
	Benjamin Herrenschmidt, Paul Mackerras, Thomas Gleixner,
	Greg Kroah-Hartman, Christophe Leroy, linuxppc-dev, LKML,
	clang-built-linux

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
>


-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] powerpc: Make setjmp/longjmp signature standard
  2020-03-30  8:03 ` [PATCH v3] " Clement Courbet
  2020-03-30 16:20   ` Nick Desaulniers
@ 2020-03-31 13:11   ` Sasha Levin
  2020-03-31 16:00     ` Nick Desaulniers
  1 sibling, 1 reply; 6+ messages in thread
From: Sasha Levin @ 2020-03-31 13:11 UTC (permalink / raw)
  To: Sasha Levin, Clement Courbet; +Cc: Nick Desaulniers, stable

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] powerpc: Make setjmp/longjmp signature standard
  2020-03-31 13:11   ` Sasha Levin
@ 2020-03-31 16:00     ` Nick Desaulniers
  0 siblings, 0 replies; 6+ messages in thread
From: Nick Desaulniers @ 2020-03-31 16:00 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: Clement Courbet, # 3.4.x, Nathan Chancellor, Sasha Levin

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



-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-03-31 16:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20200327100801.161671-1-courbet@google.com>
2020-03-30  6:43 ` [PATCH v2] powerpc: Make setjmp/longjmp signature standard Clement Courbet
2020-03-30  7:57   ` Nathan Chancellor
2020-03-30  8:03 ` [PATCH v3] " Clement Courbet
2020-03-30 16:20   ` Nick Desaulniers
2020-03-31 13:11   ` Sasha Levin
2020-03-31 16:00     ` Nick Desaulniers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).