* [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1
@ 2024-01-25 22:55 Nathan Chancellor
2024-01-25 22:55 ` [PATCH 07/11] riscv: Remove MCOUNT_NAME workaround Nathan Chancellor
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Nathan Chancellor @ 2024-01-25 22:55 UTC (permalink / raw)
To: akpm, masahiroy
Cc: nicolas, linux-kbuild, llvm, patches, linux-kernel,
Nathan Chancellor, tglx, mingo, bp, dave.hansen, x86, linux, ardb,
linux-arm-kernel, catalin.marinas, will, mark.rutland, mpe,
npiggin, aneesh.kumar, naveen.n.rao, linuxppc-dev, paul.walmsley,
palmer, aou, conor, linux-riscv, keescook, linux-hardening
Hi all,
This series bumps the minimum supported version of LLVM for building the
kernel to 13.0.1. The first patch does the bump and all subsequent
patches clean up all the various workarounds and checks for earlier
versions.
Quoting the first patch's commit message for those that were only on CC
for the clean ups:
When __builtin_mul_overflow() has arguments that differ in terms of
signedness and width, LLVM may generate a libcall to __muloti4 because
it performs the checks in terms of 65-bit multiplication. This issue
becomes harder to hit (but still possible) after LLVM 12.0.0, which
includes a special case for matching widths but different signs.
To gain access to this special case, which the kernel can take advantage
of when calls to __muloti4 appear, bump the minimum supported version of
LLVM for building the kernel to 13.0.1. 13.0.1 was chosen because there
is minimal impact to distribution support while allowing a few more
workarounds to be dropped in the kernel source than if 12.0.0 were
chosen. Looking at container images of up to date distribution versions:
archlinux:latest clang version 16.0.6
debian:oldoldstable-slim clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final)
debian:oldstable-slim Debian clang version 11.0.1-2
debian:stable-slim Debian clang version 14.0.6
debian:testing-slim Debian clang version 16.0.6 (19)
debian:unstable-slim Debian clang version 16.0.6 (19)
fedora:38 clang version 16.0.6 (Fedora 16.0.6-3.fc38)
fedora:latest clang version 17.0.6 (Fedora 17.0.6-1.fc39)
fedora:rawhide clang version 17.0.6 (Fedora 17.0.6-1.fc40)
opensuse/leap:latest clang version 15.0.7
opensuse/tumbleweed:latest clang version 17.0.6
ubuntu:focal clang version 10.0.0-4ubuntu1
ubuntu:latest Ubuntu clang version 14.0.0-1ubuntu1.1
ubuntu:rolling Ubuntu clang version 16.0.6 (15)
ubuntu:devel Ubuntu clang version 17.0.6 (3)
The only distribution that gets left behind is Debian Bullseye, as the
default version is 11.0.1; other distributions either have a newer
version than 13.0.1 or one older than the current minimum of 11.0.0.
Debian has easy access to more recent LLVM versions through
apt.llvm.org, so this is not as much of a concern. There are also the
kernel.org LLVM toolchains, which should work with distributions with
glibc 2.28 and newer.
Another benefit of slimming up the number of supported versions of LLVM
for building the kernel is reducing the build capacity needed to support
a matrix that builds with each supported version, which allows a matrix
to reallocate the freed up build capacity towards something else, such
as more configuration combinations.
This passes my build matrix with all supported versions.
This is based on Andrew's mm-nonmm-unstable to avoid trivial conflicts
with my series to update the LLVM links across the repository [1] but I
can easily rebase it to linux-kbuild if Masahiro would rather these
patches go through there (and defer the conflict resolution to the merge
window).
[1]: https://lore.kernel.org/20240109-update-llvm-links-v1-0-eb09b59db071@kernel.org/
---
Nathan Chancellor (11):
kbuild: Raise the minimum supported version of LLVM to 13.0.1
Makefile: Drop warn-stack-size plugin opt
x86: Drop stack-alignment plugin opt
ARM: Remove Thumb2 __builtin_thread_pointer workaround for Clang
arm64: Kconfig: Clean up tautological LLVM version checks
powerpc: Kconfig: Remove tautology in CONFIG_COMPAT
riscv: Remove MCOUNT_NAME workaround
riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE
fortify: Drop Clang version check for 12.0.1 or newer
lib/Kconfig.debug: Update Clang version check in CONFIG_KCOV
compiler-clang.h: Update __diag_clang() macros for minimum version bump
Documentation/process/changes.rst | 2 +-
Makefile | 8 --------
arch/arm/include/asm/current.h | 8 +-------
arch/arm64/Kconfig | 5 +----
arch/powerpc/Kconfig | 1 -
arch/riscv/Kconfig | 2 --
arch/riscv/include/asm/ftrace.h | 14 ++------------
arch/riscv/kernel/mcount.S | 10 +++++-----
arch/x86/Makefile | 6 ------
include/linux/compiler-clang.h | 8 ++------
lib/Kconfig.debug | 2 +-
scripts/min-tool-version.sh | 2 +-
scripts/recordmcount.pl | 2 +-
security/Kconfig | 2 --
14 files changed, 15 insertions(+), 57 deletions(-)
---
base-commit: 979741ebd48f75ed6d101c7290e3325340d361ff
change-id: 20240124-bump-min-llvm-ver-to-13-0-1-39f84dd36b19
Best regards,
--
Nathan Chancellor <nathan@kernel.org>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 07/11] riscv: Remove MCOUNT_NAME workaround
2024-01-25 22:55 [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Nathan Chancellor
@ 2024-01-25 22:55 ` Nathan Chancellor
2024-01-25 22:55 ` [PATCH 08/11] riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE Nathan Chancellor
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Nathan Chancellor @ 2024-01-25 22:55 UTC (permalink / raw)
To: akpm, masahiroy
Cc: nicolas, linux-kbuild, llvm, patches, linux-kernel,
Nathan Chancellor, paul.walmsley, palmer, aou, conor, linux-riscv
Now that the minimum supported version of LLVM for building the kernel
has been bumped to 13.0.1, the condition for using _mcount as
MCOUNT_NAME is always true, as the build will fail during the
configuration stage for older LLVM versions. Replace MCOUNT_NAME with
_mcount directly.
This effectively reverts commit 7ce047715030 ("riscv: Workaround mcount
name prior to clang-13").
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---
Cc: paul.walmsley@sifive.com
Cc: palmer@dabbelt.com
Cc: aou@eecs.berkeley.edu
Cc: conor@kernel.org
Cc: linux-riscv@lists.infradead.org
---
arch/riscv/include/asm/ftrace.h | 14 ++------------
arch/riscv/kernel/mcount.S | 10 +++++-----
scripts/recordmcount.pl | 2 +-
3 files changed, 8 insertions(+), 18 deletions(-)
diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h
index 06874fb1311e..cf5b63e789fa 100644
--- a/arch/riscv/include/asm/ftrace.h
+++ b/arch/riscv/include/asm/ftrace.h
@@ -13,19 +13,9 @@
#endif
#define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
-/*
- * Clang prior to 13 had "mcount" instead of "_mcount":
- * https://github.com/llvm/llvm-project/commit/ef58ae86ba778ed7d01cd3f6bd6d08f943abab44
- */
-#if defined(CONFIG_CC_IS_GCC) || CONFIG_CLANG_VERSION >= 130000
-#define MCOUNT_NAME _mcount
-#else
-#define MCOUNT_NAME mcount
-#endif
-
#define ARCH_SUPPORTS_FTRACE_OPS 1
#ifndef __ASSEMBLY__
-void MCOUNT_NAME(void);
+void _mcount(void);
static inline unsigned long ftrace_call_adjust(unsigned long addr)
{
return addr;
@@ -75,7 +65,7 @@ struct dyn_arch_ftrace {
* both auipc and jalr at the same time.
*/
-#define MCOUNT_ADDR ((unsigned long)MCOUNT_NAME)
+#define MCOUNT_ADDR ((unsigned long)_mcount)
#define JALR_SIGN_MASK (0x00000800)
#define JALR_OFFSET_MASK (0x00000fff)
#define AUIPC_OFFSET_MASK (0xfffff000)
diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
index d7ec69ac6910..3a42f6287909 100644
--- a/arch/riscv/kernel/mcount.S
+++ b/arch/riscv/kernel/mcount.S
@@ -50,8 +50,8 @@
SYM_TYPED_FUNC_START(ftrace_stub)
#ifdef CONFIG_DYNAMIC_FTRACE
- .global MCOUNT_NAME
- .set MCOUNT_NAME, ftrace_stub
+ .global _mcount
+ .set _mcount, ftrace_stub
#endif
ret
SYM_FUNC_END(ftrace_stub)
@@ -80,7 +80,7 @@ SYM_FUNC_END(return_to_handler)
#endif
#ifndef CONFIG_DYNAMIC_FTRACE
-SYM_FUNC_START(MCOUNT_NAME)
+SYM_FUNC_START(_mcount)
la t4, ftrace_stub
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
la t0, ftrace_graph_return
@@ -126,6 +126,6 @@ SYM_FUNC_START(MCOUNT_NAME)
jalr t5
RESTORE_ABI_STATE
ret
-SYM_FUNC_END(MCOUNT_NAME)
+SYM_FUNC_END(_mcount)
#endif
-EXPORT_SYMBOL(MCOUNT_NAME)
+EXPORT_SYMBOL(_mcount)
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index f84df9e383fd..0871b2e92584 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -352,7 +352,7 @@ if ($arch eq "x86_64") {
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
} elsif ($arch eq "riscv") {
$function_regex = "^([0-9a-fA-F]+)\\s+<([^.0-9][0-9a-zA-Z_\\.]+)>:";
- $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL(_PLT)?\\s_?mcount\$";
+ $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL(_PLT)?\\s_mcount\$";
$type = ".quad";
$alignment = 2;
} elsif ($arch eq "csky") {
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 08/11] riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE
2024-01-25 22:55 [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Nathan Chancellor
2024-01-25 22:55 ` [PATCH 07/11] riscv: Remove MCOUNT_NAME workaround Nathan Chancellor
@ 2024-01-25 22:55 ` Nathan Chancellor
2024-01-25 23:10 ` [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Kees Cook
2024-03-25 4:42 ` patchwork-bot+linux-riscv
3 siblings, 0 replies; 5+ messages in thread
From: Nathan Chancellor @ 2024-01-25 22:55 UTC (permalink / raw)
To: akpm, masahiroy
Cc: nicolas, linux-kbuild, llvm, patches, linux-kernel,
Nathan Chancellor, paul.walmsley, palmer, aou, conor, linux-riscv
Now that the minimum supported version of LLVM for building the kernel
has been bumped to 13.0.1, this condition is always true, as the build
will fail during the configuration stage for older LLVM versions. Remove
it.
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---
Cc: paul.walmsley@sifive.com
Cc: palmer@dabbelt.com
Cc: aou@eecs.berkeley.edu
Cc: conor@kernel.org
Cc: linux-riscv@lists.infradead.org
---
arch/riscv/Kconfig | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 69d24f513922..00edc4ff589c 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -174,8 +174,6 @@ config RISCV
config CLANG_SUPPORTS_DYNAMIC_FTRACE
def_bool CC_IS_CLANG
- # https://github.com/llvm/llvm-project/commit/6ab8927931851bb42b2c93a00801dc499d7d9b1e
- depends on CLANG_VERSION >= 130000
# https://github.com/ClangBuiltLinux/linux/issues/1817
depends on AS_IS_GNU || (AS_IS_LLVM && (LD_IS_LLD || LD_VERSION >= 23600))
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1
2024-01-25 22:55 [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Nathan Chancellor
2024-01-25 22:55 ` [PATCH 07/11] riscv: Remove MCOUNT_NAME workaround Nathan Chancellor
2024-01-25 22:55 ` [PATCH 08/11] riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE Nathan Chancellor
@ 2024-01-25 23:10 ` Kees Cook
2024-03-25 4:42 ` patchwork-bot+linux-riscv
3 siblings, 0 replies; 5+ messages in thread
From: Kees Cook @ 2024-01-25 23:10 UTC (permalink / raw)
To: Nathan Chancellor
Cc: akpm, masahiroy, nicolas, linux-kbuild, llvm, patches,
linux-kernel, tglx, mingo, bp, dave.hansen, x86, linux, ardb,
linux-arm-kernel, catalin.marinas, will, mark.rutland, mpe,
npiggin, aneesh.kumar, naveen.n.rao, linuxppc-dev, paul.walmsley,
palmer, aou, conor, linux-riscv, linux-hardening
On Thu, Jan 25, 2024 at 03:55:06PM -0700, Nathan Chancellor wrote:
> Hi all,
>
> This series bumps the minimum supported version of LLVM for building the
> kernel to 13.0.1. The first patch does the bump and all subsequent
> patches clean up all the various workarounds and checks for earlier
> versions.
>
> Quoting the first patch's commit message for those that were only on CC
> for the clean ups:
>
> When __builtin_mul_overflow() has arguments that differ in terms of
> signedness and width, LLVM may generate a libcall to __muloti4 because
> it performs the checks in terms of 65-bit multiplication. This issue
> becomes harder to hit (but still possible) after LLVM 12.0.0, which
> includes a special case for matching widths but different signs.
>
> To gain access to this special case, which the kernel can take advantage
> of when calls to __muloti4 appear, bump the minimum supported version of
> LLVM for building the kernel to 13.0.1. 13.0.1 was chosen because there
> is minimal impact to distribution support while allowing a few more
> workarounds to be dropped in the kernel source than if 12.0.0 were
> chosen. Looking at container images of up to date distribution versions:
>
> archlinux:latest clang version 16.0.6
> debian:oldoldstable-slim clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final)
> debian:oldstable-slim Debian clang version 11.0.1-2
> debian:stable-slim Debian clang version 14.0.6
> debian:testing-slim Debian clang version 16.0.6 (19)
> debian:unstable-slim Debian clang version 16.0.6 (19)
> fedora:38 clang version 16.0.6 (Fedora 16.0.6-3.fc38)
> fedora:latest clang version 17.0.6 (Fedora 17.0.6-1.fc39)
> fedora:rawhide clang version 17.0.6 (Fedora 17.0.6-1.fc40)
> opensuse/leap:latest clang version 15.0.7
> opensuse/tumbleweed:latest clang version 17.0.6
> ubuntu:focal clang version 10.0.0-4ubuntu1
> ubuntu:latest Ubuntu clang version 14.0.0-1ubuntu1.1
> ubuntu:rolling Ubuntu clang version 16.0.6 (15)
> ubuntu:devel Ubuntu clang version 17.0.6 (3)
>
> The only distribution that gets left behind is Debian Bullseye, as the
> default version is 11.0.1; other distributions either have a newer
> version than 13.0.1 or one older than the current minimum of 11.0.0.
> Debian has easy access to more recent LLVM versions through
> apt.llvm.org, so this is not as much of a concern. There are also the
> kernel.org LLVM toolchains, which should work with distributions with
> glibc 2.28 and newer.
>
> Another benefit of slimming up the number of supported versions of LLVM
> for building the kernel is reducing the build capacity needed to support
> a matrix that builds with each supported version, which allows a matrix
> to reallocate the freed up build capacity towards something else, such
> as more configuration combinations.
>
> This passes my build matrix with all supported versions.
>
> This is based on Andrew's mm-nonmm-unstable to avoid trivial conflicts
> with my series to update the LLVM links across the repository [1] but I
> can easily rebase it to linux-kbuild if Masahiro would rather these
> patches go through there (and defer the conflict resolution to the merge
> window).
>
> [1]: https://lore.kernel.org/20240109-update-llvm-links-v1-0-eb09b59db071@kernel.org/
>
> ---
> Nathan Chancellor (11):
> kbuild: Raise the minimum supported version of LLVM to 13.0.1
> Makefile: Drop warn-stack-size plugin opt
> x86: Drop stack-alignment plugin opt
> ARM: Remove Thumb2 __builtin_thread_pointer workaround for Clang
> arm64: Kconfig: Clean up tautological LLVM version checks
> powerpc: Kconfig: Remove tautology in CONFIG_COMPAT
> riscv: Remove MCOUNT_NAME workaround
> riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE
> fortify: Drop Clang version check for 12.0.1 or newer
> lib/Kconfig.debug: Update Clang version check in CONFIG_KCOV
> compiler-clang.h: Update __diag_clang() macros for minimum version bump
>
> Documentation/process/changes.rst | 2 +-
> Makefile | 8 --------
> arch/arm/include/asm/current.h | 8 +-------
> arch/arm64/Kconfig | 5 +----
> arch/powerpc/Kconfig | 1 -
> arch/riscv/Kconfig | 2 --
> arch/riscv/include/asm/ftrace.h | 14 ++------------
> arch/riscv/kernel/mcount.S | 10 +++++-----
> arch/x86/Makefile | 6 ------
> include/linux/compiler-clang.h | 8 ++------
> lib/Kconfig.debug | 2 +-
> scripts/min-tool-version.sh | 2 +-
> scripts/recordmcount.pl | 2 +-
> security/Kconfig | 2 --
> 14 files changed, 15 insertions(+), 57 deletions(-)
> ---
> base-commit: 979741ebd48f75ed6d101c7290e3325340d361ff
> change-id: 20240124-bump-min-llvm-ver-to-13-0-1-39f84dd36b19
>
> Best regards,
> --
> Nathan Chancellor <nathan@kernel.org>
>
Yes, please. :) This looks reasonable -- I appreciate the review of
default Clang versions across distros!
Reviewed-by: Kees Cook <keescook@chromium.org>
--
Kees Cook
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1
2024-01-25 22:55 [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Nathan Chancellor
` (2 preceding siblings ...)
2024-01-25 23:10 ` [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Kees Cook
@ 2024-03-25 4:42 ` patchwork-bot+linux-riscv
3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+linux-riscv @ 2024-03-25 4:42 UTC (permalink / raw)
To: Nathan Chancellor
Cc: linux-riscv, akpm, masahiroy, nicolas, linux-kbuild, llvm,
patches, linux-kernel, tglx, mingo, bp, dave.hansen, x86, linux,
ardb, linux-arm-kernel, catalin.marinas, will, mark.rutland, mpe,
npiggin, aneesh.kumar, naveen.n.rao, linuxppc-dev, paul.walmsley,
palmer, aou, conor, keescook, linux-hardening
Hello:
This series was applied to riscv/linux.git (fixes)
by Andrew Morton <akpm@linux-foundation.org>:
On Thu, 25 Jan 2024 15:55:06 -0700 you wrote:
> Hi all,
>
> This series bumps the minimum supported version of LLVM for building the
> kernel to 13.0.1. The first patch does the bump and all subsequent
> patches clean up all the various workarounds and checks for earlier
> versions.
>
> [...]
Here is the summary with links:
- [07/11] riscv: Remove MCOUNT_NAME workaround
https://git.kernel.org/riscv/c/de5f3984664e
- [08/11] riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE
https://git.kernel.org/riscv/c/a38d97181271
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-03-25 4:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-25 22:55 [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Nathan Chancellor
2024-01-25 22:55 ` [PATCH 07/11] riscv: Remove MCOUNT_NAME workaround Nathan Chancellor
2024-01-25 22:55 ` [PATCH 08/11] riscv: Kconfig: Remove version dependency from CONFIG_CLANG_SUPPORTS_DYNAMIC_FTRACE Nathan Chancellor
2024-01-25 23:10 ` [PATCH 00/11] Bump the minimum supported version of LLVM to 13.0.1 Kees Cook
2024-03-25 4:42 ` patchwork-bot+linux-riscv
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).