diff --git a/.buildkite-external-version b/.buildkite-external-version index ba2906d0666cf..37f6b6626894f 100644 --- a/.buildkite-external-version +++ b/.buildkite-external-version @@ -1 +1 @@ -main +release-julia-1.10 diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index a688be130711c..0000000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM julia:latest - -RUN apt-get update && apt-get install -y build-essential libatomic1 python gfortran perl wget m4 cmake pkg-config git diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a3747ca019694..455f8bea3e952 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,8 +1,12 @@ { - "extensions": [ - "julialang.language-julia", - "ms-vscode.cpptools" - ], - - "dockerFile": "Dockerfile" + "image": "docker.io/library/julia:latest", + "customizations": { + "vscode": { + "extensions": [ + "julialang.language-julia", + "ms-vscode.cpptools" + ] + } + }, + "onCreateCommand": "apt-get update && apt-get install -y build-essential libatomic1 python3 gfortran perl wget m4 cmake pkg-config git" } diff --git a/.github/workflows/LabelCheck.yml b/.github/workflows/LabelCheck.yml index 194b0c92065c9..84bdb74150e6c 100644 --- a/.github/workflows/LabelCheck.yml +++ b/.github/workflows/LabelCheck.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 2 steps: - - uses: yogevbd/enforce-label-action@2.2.2 + - uses: yogevbd/enforce-label-action@a3c219da6b8fa73f6ba62b68ff09c469b3a1c024 # 2.2.2 with: # REQUIRED_LABELS_ANY: "bug,enhancement,skip-changelog" # REQUIRED_LABELS_ANY_DESCRIPTION: "Select at least one label ['bug','enhancement','skip-changelog']" diff --git a/base/.gitignore b/base/.gitignore index 0fab5b41fda08..4d02a98c01000 100644 --- a/base/.gitignore +++ b/base/.gitignore @@ -7,5 +7,6 @@ /uv_constants.jl /version_git.jl /version_git.jl.phony +/version_git_dirty /userimg.jl /JuliaSyntax diff --git a/base/Makefile b/base/Makefile index d27325e7600f8..cf7f974fd7bd4 100644 --- a/base/Makefile +++ b/base/Makefile @@ -314,4 +314,5 @@ clean: -rm -f $(BUILDDIR)/file_constants.jl -rm -f $(BUILDDIR)/version_git.jl -rm -f $(BUILDDIR)/version_git.jl.phony + -rm -f $(BUILDDIR)/version_git_dirty -rm -f $(build_private_libdir)/lib*.$(SHLIB_EXT)* diff --git a/base/client.jl b/base/client.jl index d2f337a1d0062..388e34d5b19f7 100644 --- a/base/client.jl +++ b/base/client.jl @@ -31,9 +31,6 @@ stackframe_lineinfo_color() = repl_color("JULIA_STACKFRAME_LINEINFO_COLOR", :bol stackframe_function_color() = repl_color("JULIA_STACKFRAME_FUNCTION_COLOR", :bold) function repl_cmd(cmd, out) - shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) - shell_name = Base.basename(shell[1]) - # Immediately expand all arguments, so that typing e.g. ~/bin/foo works. cmd.exec .= expanduser.(cmd.exec) @@ -63,19 +60,15 @@ function repl_cmd(cmd, out) cd(dir) println(out, pwd()) else - @static if !Sys.iswindows() - if shell_name == "fish" - shell_escape_cmd = "begin; $(shell_escape_posixly(cmd)); and true; end" - else - shell_escape_cmd = "($(shell_escape_posixly(cmd))) && true" - end + if !Sys.iswindows() + shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) + shell_escape_cmd = shell_escape_posixly(cmd) cmd = `$shell -c $shell_escape_cmd` end try run(ignorestatus(cmd)) catch - # Windows doesn't shell out right now (complex issue), so Julia tries to run the program itself - # Julia throws an exception if it can't find the program, but the stack trace isn't useful + # Julia throws an exception if it can't find the cmd (which may be the shell itself), but the stack trace isn't useful lasterr = current_exceptions() lasterr = ExceptionStack([(exception = e[1], backtrace = [] ) for e in lasterr]) invokelatest(display_error, lasterr) diff --git a/base/intfuncs.jl b/base/intfuncs.jl index c81d3085642b0..0ce01f7ccd222 100644 --- a/base/intfuncs.jl +++ b/base/intfuncs.jl @@ -384,18 +384,20 @@ julia> powermod(5, 3, 19) function powermod(x::Integer, p::Integer, m::T) where T<:Integer p == 0 && return mod(one(m),m) # When the concrete type of p is signed and has the lowest value, - # `p != 0 && p == -p` is equivalent to `p == typemin(typeof(p))` for 2's complement representation. + # `p < 0 && p == -p` is equivalent to `p == typemin(typeof(p))` for 2's complement representation. # but will work for integer types like `BigInt` that don't have `typemin` defined # It needs special handling otherwise will cause overflow problem. - if p == -p - imod = invmod(x, m) - rhalf = powermod(imod, -(p÷2), m) - r::T = mod(widemul(rhalf, rhalf), m) - isodd(p) && (r = mod(widemul(r, imod), m)) - #else odd - return r - elseif p < 0 - return powermod(invmod(x, m), -p, m) + if p < 0 + if p == -p + imod = invmod(x, m) + rhalf = powermod(imod, -(p÷2), m) + r::T = mod(widemul(rhalf, rhalf), m) + isodd(p) && (r = mod(widemul(r, imod), m)) + #else odd + return r + else + return powermod(invmod(x, m), -p, m) + end end (m == 1 || m == -1) && return zero(m) b = oftype(m,mod(x,m)) # this also checks for divide by zero diff --git a/base/loading.jl b/base/loading.jl index 7c918a1f4a83a..c5b372b6772e9 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -460,6 +460,8 @@ function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) path = manifest_uuid_path(env, pkg) # missing is used as a sentinel to stop looking further down in envs if path === missing + # Before stopping, try stdlib fallback + is_stdlib(pkg) && @goto stdlib_fallback path = nothing @goto done end @@ -471,6 +473,7 @@ function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) stopenv == env && break end end + @label stdlib_fallback # Allow loading of stdlibs if the name/uuid are given # e.g. if they have been explicitly added to the project/manifest mbypath = manifest_uuid_path(Sys.STDLIB, pkg) diff --git a/base/lock.jl b/base/lock.jl index 1663a765111bb..e070307f13abc 100644 --- a/base/lock.jl +++ b/base/lock.jl @@ -258,6 +258,9 @@ end ``` This is similar to using [`lock`](@ref) with a `do` block, but avoids creating a closure and thus can improve the performance. + +!!! compat + `@lock` was added in Julia 1.3, and exported in Julia 1.7. """ macro lock(l, expr) quote diff --git a/base/logging.jl b/base/logging.jl index 49f0a52600102..8d1ec27d5d696 100644 --- a/base/logging.jl +++ b/base/logging.jl @@ -128,6 +128,8 @@ end LogLevel(level::LogLevel) = level isless(a::LogLevel, b::LogLevel) = isless(a.level, b.level) +isless(a::LogLevel, b::Integer) = isless(a.level, b) +isless(a::Integer, b::LogLevel) = isless(a, b.level) +(level::LogLevel, inc::Integer) = LogLevel(level.level+inc) -(level::LogLevel, inc::Integer) = LogLevel(level.level-inc) convert(::Type{LogLevel}, level::Integer) = LogLevel(level) diff --git a/base/meta.jl b/base/meta.jl index 99683aac38a99..6c8d37462561b 100644 --- a/base/meta.jl +++ b/base/meta.jl @@ -403,7 +403,7 @@ function _partially_inline!(@nospecialize(x), slot_replacements::Vector{Any}, end return x elseif head === :cfunction - @assert !isa(type_signature, UnionAll) || !isempty(spvals) + @assert !isa(type_signature, UnionAll) || !isempty(static_param_values) if !isa(x.args[2], QuoteNode) # very common no-op x.args[2] = _partially_inline!(x.args[2], slot_replacements, type_signature, static_param_values, slot_offset, diff --git a/base/options.jl b/base/options.jl index a94936391fa8d..b7967f4e7fdf9 100644 --- a/base/options.jl +++ b/base/options.jl @@ -9,7 +9,7 @@ struct JLOptions commands::Ptr{Ptr{UInt8}} # (e)eval, (E)print, (L)load image_file::Ptr{UInt8} cpu_target::Ptr{UInt8} - nthreadpools::Int16 + nthreadpools::Int8 nthreads::Int16 nmarkthreads::Int16 nsweepthreads::Int8 diff --git a/base/stream.jl b/base/stream.jl index 1635f3c5ad22a..2b62605cf0850 100644 --- a/base/stream.jl +++ b/base/stream.jl @@ -1215,7 +1215,15 @@ function _redirect_io_libc(stream, unix_fd::Int) -10 - unix_fd, Libc._get_osfhandle(posix_fd)) end end - dup(posix_fd, RawFD(unix_fd)) + GC.@preserve stream dup(posix_fd, RawFD(unix_fd)) + nothing +end +function _redirect_io_cglobal(handle::Union{LibuvStream, IOStream, Nothing}, unix_fd::Int) + c_sym = unix_fd == 0 ? cglobal(:jl_uv_stdin, Ptr{Cvoid}) : + unix_fd == 1 ? cglobal(:jl_uv_stdout, Ptr{Cvoid}) : + unix_fd == 2 ? cglobal(:jl_uv_stderr, Ptr{Cvoid}) : + C_NULL + c_sym == C_NULL || unsafe_store!(c_sym, handle === nothing ? Ptr{Cvoid}(unix_fd) : handle.handle) nothing end function _redirect_io_global(io, unix_fd::Int) @@ -1226,11 +1234,7 @@ function _redirect_io_global(io, unix_fd::Int) end function (f::RedirectStdStream)(handle::Union{LibuvStream, IOStream}) _redirect_io_libc(handle, f.unix_fd) - c_sym = f.unix_fd == 0 ? cglobal(:jl_uv_stdin, Ptr{Cvoid}) : - f.unix_fd == 1 ? cglobal(:jl_uv_stdout, Ptr{Cvoid}) : - f.unix_fd == 2 ? cglobal(:jl_uv_stderr, Ptr{Cvoid}) : - C_NULL - c_sym == C_NULL || unsafe_store!(c_sym, handle.handle) + _redirect_io_cglobal(handle, f.unix_fd) _redirect_io_global(handle, f.unix_fd) return handle end @@ -1239,6 +1243,7 @@ function (f::RedirectStdStream)(::DevNull) handle = open(nulldev, write=f.writable) _redirect_io_libc(handle, f.unix_fd) close(handle) # handle has been dup'ed in _redirect_io_libc + _redirect_io_cglobal(nothing, f.unix_fd) _redirect_io_global(devnull, f.unix_fd) return devnull end diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 72088e0e06153..a12523934c449 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -795,6 +795,8 @@ write(io::IO, s::CodeUnits) = write(io, s.s) unsafe_convert(::Type{Ptr{T}}, s::CodeUnits{T}) where {T} = unsafe_convert(Ptr{T}, s.s) unsafe_convert(::Type{Ptr{Int8}}, s::CodeUnits{UInt8}) = unsafe_convert(Ptr{Int8}, s.s) +similar(::Type{<:CodeUnits{T}}, dims::Dims) where {T} = similar(Array{T}, dims) + """ codeunits(s::AbstractString) diff --git a/base/strings/string.jl b/base/strings/string.jl index a26791958cd50..ce1268269f421 100644 --- a/base/strings/string.jl +++ b/base/strings/string.jl @@ -7,9 +7,9 @@ An error occurred when trying to access `str` at index `i` that is not valid. """ struct StringIndexError <: Exception string::AbstractString - index::Integer + index::Int end -@noinline string_index_err(s::AbstractString, i::Integer) = +@noinline string_index_err((@nospecialize s::AbstractString), i::Integer) = throw(StringIndexError(s, Int(i))) function Base.showerror(io::IO, exc::StringIndexError) s = exc.string diff --git a/base/strings/unicode.jl b/base/strings/unicode.jl index 2e04633b87487..990be016a18f8 100644 --- a/base/strings/unicode.jl +++ b/base/strings/unicode.jl @@ -725,7 +725,7 @@ isgraphemebreak(c1::AbstractChar, c2::AbstractChar) = # Stateful grapheme break required by Unicode-9 rules: the string # must be processed in sequence, with state initialized to Ref{Int32}(0). # Requires utf8proc v2.0 or later. -function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) +@inline function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) if ismalformed(c1) || ismalformed(c2) state[] = 0 return true diff --git a/base/threadingconstructs.jl b/base/threadingconstructs.jl index e202bb0acb317..eadad4bf31f0a 100644 --- a/base/threadingconstructs.jl +++ b/base/threadingconstructs.jl @@ -234,8 +234,14 @@ A macro to execute a `for` loop in parallel. The iteration space is distributed coarse-grained tasks. This policy can be specified by the `schedule` argument. The execution of the loop waits for the evaluation of all iterations. +Tasks spawned by `@threads` are scheduled on the `:default` threadpool. This means that +`@threads` will not use threads from the `:interactive` threadpool, even if called from +the main thread or from a task in the interactive pool. The `:default` threadpool is +intended for compute-intensive parallel workloads. + See also: [`@spawn`](@ref Threads.@spawn) and `pmap` in [`Distributed`](@ref man-distributed). +For more information on threadpools, see the chapter on [threadpools](@ref man-threadpools). # Extended help diff --git a/base/version_git.sh b/base/version_git.sh index 76092e9800594..b88fbcf04d0d1 100644 --- a/base/version_git.sh +++ b/base/version_git.sh @@ -6,7 +6,7 @@ echo "# This file was autogenerated by base/version_git.sh" echo "struct GitVersionInfo" echo " commit::String" -echo " commit_short::String" +echo " commit_short_raw::String" echo " branch::String" echo " build_number::Int" echo " date_string::String" @@ -17,6 +17,24 @@ echo " build_system_commit::String" echo " build_system_commit_short::String" echo "end" echo "" +echo "function Base.getproperty(info::GitVersionInfo, s::Symbol)" +echo " if s === :commit_short" +echo " commit = getfield(info, :commit_short_raw)" +echo " dirty_file = joinpath(Sys.BINDIR, Base.DATAROOTDIR, \"julia\", \"base\", \"version_git_dirty\")" +echo " dirty_str = try" +echo " read(dirty_file, String)" +echo " catch" +echo " \"\"" +echo " end" +echo " if strip(dirty_str) == \"true\"" +echo " return commit * \"*\"" +echo " end" +echo " return commit" +echo " else" +echo " return getfield(info, s)" +echo " end" +echo "end" +echo "" cd $1 @@ -38,8 +56,9 @@ git_time=$(git log -1 --pretty=format:%ct) commit=$(git rev-parse HEAD) commit_short=$(git rev-parse --short HEAD) if [ -n "$(git status --porcelain)" ]; then - # append dirty mark '*' if the repository has uncommitted changes - commit_short="$commit_short"* + dirty="true" +else + dirty="false" fi # Our CI system checks commits out as a detached head, and so we must @@ -117,3 +136,7 @@ echo " $fork_master_timestamp.0," echo " \"$build_system_commit\"," echo " \"$build_system_commit_short\"," echo ")" + +# Write dirty status to a separate file to avoid triggering rebuilds +# when only the dirty status changes +echo "$dirty" > version_git_dirty diff --git a/deps/checksums/cacert-2023-01-10.pem/md5 b/deps/checksums/cacert-2023-01-10.pem/md5 deleted file mode 100644 index 92063050b50f3..0000000000000 --- a/deps/checksums/cacert-2023-01-10.pem/md5 +++ /dev/null @@ -1 +0,0 @@ -e7cf471ba7c88f4e313f492a76e624b3 diff --git a/deps/checksums/cacert-2023-01-10.pem/sha512 b/deps/checksums/cacert-2023-01-10.pem/sha512 deleted file mode 100644 index d3322e5890f81..0000000000000 --- a/deps/checksums/cacert-2023-01-10.pem/sha512 +++ /dev/null @@ -1 +0,0 @@ -08cd35277bf2260cb3232d7a7ca3cce6b2bd58af9221922d2c6e9838a19c2f96d1ca6d77f3cc2a3ab611692f9fec939e9b21f67442282e867a487b0203ee0279 diff --git a/deps/checksums/cacert-2025-12-02.pem/md5 b/deps/checksums/cacert-2025-12-02.pem/md5 new file mode 100644 index 0000000000000..c482d2cc8dc9c --- /dev/null +++ b/deps/checksums/cacert-2025-12-02.pem/md5 @@ -0,0 +1 @@ +fafa2b78f98273ea332251e3d1628b02 diff --git a/deps/checksums/cacert-2025-12-02.pem/sha512 b/deps/checksums/cacert-2025-12-02.pem/sha512 new file mode 100644 index 0000000000000..92e9d653aee45 --- /dev/null +++ b/deps/checksums/cacert-2025-12-02.pem/sha512 @@ -0,0 +1 @@ +aef293e084ef15a55a4f9dee395ee4bbbadea1f5a49c0590e0ff67a0630b5298d2bc79699ab95d70be0d2d06f9f1e55fe676b3e1d5ff912df88f2d6bff0d5736 diff --git a/deps/checksums/mbedtls b/deps/checksums/mbedtls index 11ee2786abb98..c3fa7edbc0505 100644 --- a/deps/checksums/mbedtls +++ b/deps/checksums/mbedtls @@ -1,34 +1,34 @@ -MbedTLS.v2.28.2+1.aarch64-apple-darwin.tar.gz/md5/ef83fb4706100ee678cd8af3f7a5c762 -MbedTLS.v2.28.2+1.aarch64-apple-darwin.tar.gz/sha512/03dda8cc9afa3d79c3c733e45c77891e75d939dc2bcca5ba8eb7aa3bd01fb52011ea9323df9cf7294fe6dcf87eb86c1b1c4b2f3b8af6116929b3371698559fe4 -MbedTLS.v2.28.2+1.aarch64-linux-gnu.tar.gz/md5/ac46c3840d2d0cc7c573f31c2f3d0d61 -MbedTLS.v2.28.2+1.aarch64-linux-gnu.tar.gz/sha512/bb458f1dc9b8684a38f603136ee4ba1c51b47f5047c5a5cfe2c552be266e79dfcd8243b216b0831abf24390eeb6f4524bc7e43b2642eb2ad0227399222cd0d8a -MbedTLS.v2.28.2+1.aarch64-linux-musl.tar.gz/md5/d74732e0bbcd03666243605e60bb345a -MbedTLS.v2.28.2+1.aarch64-linux-musl.tar.gz/sha512/90b0699477b697b94c0ab1ba0607fb3e1cd40d66a80a51cb1e0f3b927de03ba201e7e280d453db672e6265db5b07d0145846e53ddbcb4b550afcabef1716470b -MbedTLS.v2.28.2+1.armv6l-linux-gnueabihf.tar.gz/md5/65ce7c51884b50dcb8343a945644b862 -MbedTLS.v2.28.2+1.armv6l-linux-gnueabihf.tar.gz/sha512/e9df753e9f3a08fd645b15422be7cc0ec3aeac3f8d5f76e0c4c5ec24c54e1b653db320ed0c6799411802a05801241a5363bb449a8765fda7856413c7e3297721 -MbedTLS.v2.28.2+1.armv6l-linux-musleabihf.tar.gz/md5/7b7fc8eafc95416d75e3f1bfb2640e09 -MbedTLS.v2.28.2+1.armv6l-linux-musleabihf.tar.gz/sha512/68362114808fb4f986dea673ef1c7f104caad8233bed1c7f6a365d5d69bb7f7c92b234d6b1bfa5b014e7096411841c115a5cfe9932ae9ce642293cab962f8d38 -MbedTLS.v2.28.2+1.armv7l-linux-gnueabihf.tar.gz/md5/4a477379b15fafbf0c05435f5ab370ac -MbedTLS.v2.28.2+1.armv7l-linux-gnueabihf.tar.gz/sha512/fd34b475bf94b411e3155f5a5166d1ad081fef3622d7b99f4915b592d4235f63a0b910e0559ba2a0c3d596df9ccc2d7ecb61984091debb20bd4b995942857132 -MbedTLS.v2.28.2+1.armv7l-linux-musleabihf.tar.gz/md5/fc6551ef5f189010a84230dd48f6bdfe -MbedTLS.v2.28.2+1.armv7l-linux-musleabihf.tar.gz/sha512/d3a7199f3e1ffb1c289c5f0a4384f3b5d1af6e868eb1081d66d6cbfc60e6415e68a7e22afb497f2e7c7900678a19bf1ba2a4c888efa1019c03bce376af62154c -MbedTLS.v2.28.2+1.i686-linux-gnu.tar.gz/md5/5f06aeeacb93e8419da5dcc6dbadff67 -MbedTLS.v2.28.2+1.i686-linux-gnu.tar.gz/sha512/48dd5de23dd1513dd496b7ae9c88bc5a4f206442c3916ffdd602232b6f5fdc621adf0a3a014821d70092e1c3c90d96e462bc0e7608a984b0ff428c4bdbe42ecf -MbedTLS.v2.28.2+1.i686-linux-musl.tar.gz/md5/435b864b02d1d2c96e5d8dc32b433ae1 -MbedTLS.v2.28.2+1.i686-linux-musl.tar.gz/sha512/52e3a79a70b3ff4617c93cafdeb702105c13b34687fc0fa31eebc91aa5cacea356d5b6a6bdbbfd81417d77debe256ea8f0f2a43c8d140154099bde097740dce7 -MbedTLS.v2.28.2+1.i686-w64-mingw32.tar.gz/md5/09c0450a373e30ddef1ae31e06b288d4 -MbedTLS.v2.28.2+1.i686-w64-mingw32.tar.gz/sha512/59a3529e7826a2f2266c1482d5dbdae2fb578416b3b6ee3b0c8507df21c1395dcd681be65ad953e8306971c549efad342ee4e0725391a88b202475f56aebc062 -MbedTLS.v2.28.2+1.powerpc64le-linux-gnu.tar.gz/md5/26c8f09aa65e5b70be528311519d4376 -MbedTLS.v2.28.2+1.powerpc64le-linux-gnu.tar.gz/sha512/2d47567388b8554ce7714f4ded013fcbffbf94726dbc6a1b7287dc17b27d1fa35baba55cf7dac17c555892a5f4c74119afdf552b42b0e8f80f26621adaa4dbca -MbedTLS.v2.28.2+1.x86_64-apple-darwin.tar.gz/md5/dfc263208b1a8d4c29b4ec3b6f10e5ce -MbedTLS.v2.28.2+1.x86_64-apple-darwin.tar.gz/sha512/3b2941c4b151206a56a9a795f0f30519676ea4bc0c93f66b419b15568edc91bb976954f584116accb7f9bd067580712e61b3c580a249332640e27e6346ca51ff -MbedTLS.v2.28.2+1.x86_64-linux-gnu.tar.gz/md5/94b908036eecbe59372722b41f0b1985 -MbedTLS.v2.28.2+1.x86_64-linux-gnu.tar.gz/sha512/c37a4c34eb450bd716c076c4105bd6022892731c470d64a854ac0fca6653dcf5a70b23982050e7d82cdfd67d02902d9efe4c94d2cf5e0d29d497c3c5ac03f8e8 -MbedTLS.v2.28.2+1.x86_64-linux-musl.tar.gz/md5/217866be499144eeb2e0944b0b60cc09 -MbedTLS.v2.28.2+1.x86_64-linux-musl.tar.gz/sha512/144180e1968da627c92173277a130283aea711157a04a2655786658234232e397985f63d5407166377fc5f38a7447c19797c51b66a9c4b1773601d9e7e01d0e0 -MbedTLS.v2.28.2+1.x86_64-unknown-freebsd.tar.gz/md5/5a1ec1b183f30cb7998550e5ce15c62d -MbedTLS.v2.28.2+1.x86_64-unknown-freebsd.tar.gz/sha512/3d07fc1a54a832515a1340eaa5de03707fc52fe8770a75ac80106942f5d23e1d52297c6068d28ab07f55fd2b3f1c683b1e25e82bf4c34b4f14af58287a5b662f -MbedTLS.v2.28.2+1.x86_64-w64-mingw32.tar.gz/md5/edb5477223f9a35054160585fdb07f7e -MbedTLS.v2.28.2+1.x86_64-w64-mingw32.tar.gz/sha512/617779d6944ea153c63e6d9ce66d9bb33520e1539324a449151594937e648ef7ccb30364d3e7aa3eed3b68b02366e5724e14787565db565f0686334ab4df3701 -mbedtls-2.28.2.tar.gz/md5/421c47c18ef46095e3ad38ffc0543e11 -mbedtls-2.28.2.tar.gz/sha512/93cdb44f764b200131b8dbefb9363e5fa38760eaf01473a512f93673cc55db3515830e16b813e03b39cb819323ad78cee4cb7f3fa85861ec5e72e0f89541c7fc +MbedTLS.v2.28.1010+0.aarch64-apple-darwin.tar.gz/md5/63222eee032c2f238052f8a2fbf0236a +MbedTLS.v2.28.1010+0.aarch64-apple-darwin.tar.gz/sha512/b1f9de221a4bb19c8e41a94a1a4b4ea8860a81150b95783e1011b561cae595494bca1547bf91e39e25d4bce7330121f0c6e7cbd084311ae6b3b9cd8ab65b7c0a +MbedTLS.v2.28.1010+0.aarch64-linux-gnu.tar.gz/md5/e84e155f5c4ce23d5c8f5222095c02c1 +MbedTLS.v2.28.1010+0.aarch64-linux-gnu.tar.gz/sha512/d1950f8bc75c13990783851736befccd2b3b8d56fb90dbc90a40fce568acbea172e264e43eaa43d246cc5cdd28121aaec5d29d16e93e271618df568ea9558169 +MbedTLS.v2.28.1010+0.aarch64-linux-musl.tar.gz/md5/2b2e850f04c81a6f1d59e88db5add5a4 +MbedTLS.v2.28.1010+0.aarch64-linux-musl.tar.gz/sha512/c9272f76a02d2154eea43f27bb5a6d0c2be3159a766b1745e4a2cf2393945cf1f0ea99d7ea1c11abfa84f0875958a8cad41a6ab26c4c9b3c69f4b535a6ec3859 +MbedTLS.v2.28.1010+0.armv6l-linux-gnueabihf.tar.gz/md5/1e84b1b7d207b21aeb95b1ca0748e10f +MbedTLS.v2.28.1010+0.armv6l-linux-gnueabihf.tar.gz/sha512/4d0bae08f2361abb13a258c2472615701988cb439b3a32eb04d49b3b1b49f3b740661a5255b8660013971b2b05df3eee0f492e87061b8f5399e1e88b274eff9a +MbedTLS.v2.28.1010+0.armv6l-linux-musleabihf.tar.gz/md5/25c93d7f79a595aa12bb40155885ac93 +MbedTLS.v2.28.1010+0.armv6l-linux-musleabihf.tar.gz/sha512/edae193d95da9c288bf3f8beaf81065a86657bb84f0c9060aab8f2ce4177d81f63f47ab353d616d80a331d537de7f90589cad5085b383ced9aa902e7ec83b1d7 +MbedTLS.v2.28.1010+0.armv7l-linux-gnueabihf.tar.gz/md5/ff8e7adce04c9854b1a33b75476e5474 +MbedTLS.v2.28.1010+0.armv7l-linux-gnueabihf.tar.gz/sha512/162a5d77863e883fc37acdd1a53f35770408f54b75db2a7bd93ef148243b4acd9c279c60dd58167e44d107edf4c4a03e1e506be2a5dba420b284cbc741d53773 +MbedTLS.v2.28.1010+0.armv7l-linux-musleabihf.tar.gz/md5/05755bede28095b6ad60048a488912c5 +MbedTLS.v2.28.1010+0.armv7l-linux-musleabihf.tar.gz/sha512/e9ada77b26d4f79946b5c93ac19ae8bc79573f3d7303b61676eb44c9152417a3145aa809f0fb5d7e6525846d6d663d35550c19053616adb5518de34d290476d0 +MbedTLS.v2.28.1010+0.i686-linux-gnu.tar.gz/md5/3bc31f2e89c1bccfa4999a7e2f042e34 +MbedTLS.v2.28.1010+0.i686-linux-gnu.tar.gz/sha512/1189f09e2971e3d06aa45a1b96d9066a9efccc748e5bb999873d24d745c26107694cfe364ca4db6860dad67fdb0d117fa49acb44585123053fb1836bb6e0f438 +MbedTLS.v2.28.1010+0.i686-linux-musl.tar.gz/md5/b68b8373edd64cb359a41d7f25835319 +MbedTLS.v2.28.1010+0.i686-linux-musl.tar.gz/sha512/ffa73c069f6a1ac2fd71f9b09c2121e742b8f50b25cd115316dc0154a93896015283d182338a235eea4972738b0209acb35e1c165afce63cf7360d352911ac56 +MbedTLS.v2.28.1010+0.i686-w64-mingw32.tar.gz/md5/b893d7b1ae6ff167341d813859782bac +MbedTLS.v2.28.1010+0.i686-w64-mingw32.tar.gz/sha512/eacd83e8e159492be6c93195537d3e413b94c0dc1c3edf98d68ff43945070be62abb406d96c697e5e739741c83f1bc9c5a61e1e58782262339dfe2fc54d9e181 +MbedTLS.v2.28.1010+0.powerpc64le-linux-gnu.tar.gz/md5/15af953eede4242cef937dae5c9ad94e +MbedTLS.v2.28.1010+0.powerpc64le-linux-gnu.tar.gz/sha512/50a6aa54ac9b91827551d2faed0c5cd42a0e7ad209ce097be6416c2943ba41cbfe9c34f4dd01f60b9f7ff68df0790ebfa0a53e203814accd7720997209a9827a +MbedTLS.v2.28.1010+0.x86_64-apple-darwin.tar.gz/md5/3bbdad364220010a79bf855b38978c4c +MbedTLS.v2.28.1010+0.x86_64-apple-darwin.tar.gz/sha512/bdcee887bdf90751701cd83840c44d2bfb7e021424ff7269cc05d4d6084a0be5f7e18b3e7bd728a309c8bfe41b220fb8f17f8339bb4fe198d5852256a4cf309a +MbedTLS.v2.28.1010+0.x86_64-linux-gnu.tar.gz/md5/e9d21d70dba95a63d8c6eef265fd43cb +MbedTLS.v2.28.1010+0.x86_64-linux-gnu.tar.gz/sha512/8d37f7039287f365d677e6d7f70b4a45df8fb36249df2df0ff0f6ae13235d6d90db82acba7c3e66aaa3bd34b2bdd011b2afb60f04bb543e7fb3eaef6f7c05ef4 +MbedTLS.v2.28.1010+0.x86_64-linux-musl.tar.gz/md5/0b018c6bc67bd74c1c451ed95dc284db +MbedTLS.v2.28.1010+0.x86_64-linux-musl.tar.gz/sha512/d068b0b08e09df29cf4784e979c70d06c5a825cc3e73aa73b24a34e83be30b3c200a17d94e43c042fc38f3cf2b678dd6b43500fdc2cae4bac82156f15515e547 +MbedTLS.v2.28.1010+0.x86_64-unknown-freebsd.tar.gz/md5/5a8d39b5a2f1f845523a2c24ae759b92 +MbedTLS.v2.28.1010+0.x86_64-unknown-freebsd.tar.gz/sha512/d6fb9ec38b4e688e07e4e2e829678929985d23028ede99ba49c938557c16380d3272ba0a824942586d3732325402b01f11959ef2b6cb87269b01d624cd3f6c49 +MbedTLS.v2.28.1010+0.x86_64-w64-mingw32.tar.gz/md5/d35218bc795bc1118ec8314dfa9f7499 +MbedTLS.v2.28.1010+0.x86_64-w64-mingw32.tar.gz/sha512/92d1a9eb2d8b45d2e206b978ee851d4226ecfaf5c29ba9e3514e74576e5c0684de8867fa578fdf40987fd557b0750a5941c0e6600f23fe4e1c5eed989e05300b +mbedtls-2.28.10.tar.gz/md5/3da397a7311f39ec3d338818e215e537 +mbedtls-2.28.10.tar.gz/sha512/4d25f09bda60afa0a657e247ed939ad30e82f790f901f73590ea8007047e3c081e97c4bbc9f483584ef92c75d45e356a3aab333be9a8c18be980197c706101f5 diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 0d176cafe7aca..66199ba007c17 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/md5/4396075a0a35187b500ed7f55254a6bd -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/2df0bb2eeb6c2945cd53b0182d00ab09e2cdf1731fe626af501a7632e8995bea21d8453d8e5671d4be9fd77a9ad12facdedf9e803c1fca35c36994dde26a6ac5 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/md5/48023d189673623c1cf79cfc73df696b -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/ecaaa3f6df848f4c247f4ef5ec9bb6e344c4ccf73b413b43ddaced9ce75a378b8ac59c6a9735a7030c61c7d74ba068329d4f9f60d1200a86df50644b604a15fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/md5/af961e90dc125b29b17868efb4a3ae61 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/30ca662a9ac89b907d9f49743e247a53d60d48be74c7ad4e19973fb7a5de908f4ad4566f08a1b576fe4aac146565c29fbcdc29c2b3f5226a3ede897f441477fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/md5/3b3534a64ca7363f206e4c8fabd69fd8 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/cf2f7b5b0b634f8826ae1ce76fe018b9d2c5d5c1b1bd511ea45c9a9004363adac3339ffd28c62ce7bf9424678c350221c3ed8919a2afbb61d2b3ccbe3283009e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/md5/e07bfcf56f7765adf431b834f36a1f09 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/sha512/6953043361c07583ff52074ad0cddb5b7f01b5f35d46435d442b907fc6c213df548fa6c010179355bbfa0a44a97761fec437c64384971821316f1063e909ac4e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/md5/3c949da2727e857cfa67f21b092d544c -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/sha512/ffc6d956d5a2414324bf8e5db6b5a9c5ada72e2fd4c6f798a3f328ce21ddf5e86d664e2bcefd6e163684e7d5eb4cefeec9a597f3d9c6ab58d555a6d279b06c12 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/md5/458e31ac7b23846da374cb1593764166 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/sha512/fe1026095f3734e0540f482989ad62a7bd6f0521049f4f44eee944938b7dc8a8fc7fce744548c947a36b46944b8a7651c4b76ed82499038fc8bc8c5efcdb978e -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/md5/e7ea6dd9b95e5c527faa4fab39ac8f86 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/sha512/b6ada30e5b80e2460ae3a7396aee066315d01fe918efbc39fda958fe1755ff3549b94a6c774e53f72920f1bb5123181810fcc8c637af847ff3b4ca8ae07a8c10 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/md5/3fab9e79dd80c80bcfc84929db41f13f -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/sha512/7e8815ca0fce0e6943e54ccee98acf8ce90c514794394a7975ee3e1e51c02367688991042c34d3dc498d1d9487025c35296640bd2d5676d13fdbaecf9fa8bf19 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/md5/59b82e8d7b93ce3d2b2e5c471d10e12e -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/sha512/6266f32518ad9e4322d44ba7536a5d8cf734c4ecd0674f16adba73cc64da944b29cd80b83e6304be408d237e06013881deffdbe89aecd459b52242cf2be6ba7b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/md5/f4daa1792329c98b7098119670c81d15 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/sha512/d6b5780af9a64df8fb510e158c0fb5da7bca67fc34e55e53891dd704203a4305e9efca865149e5719ecec9d3c202ce3ec0e1071ad2bb1a6f46e19e6a853d9f67 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/md5/8c799c1b1e1c8bb343beabb63b86a2d5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/sha512/2ade84eba8f79a3312ca869fb8876b65ce010cbf2b43532bc88da75590ca2b392d7d1e2a2ce5c565d4a9490cf124b10686c0c429793e5ccb1c01640052f6ac4b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/md5/a9be243128a45d2243c8bd42289a36f5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/sha512/941b1f63549d725c477ef98282906c706ceca9daf19b7d856ffd6bd83095fb8b45bc2d099576938f4e984c6e737c94b0a79e686eda11474ddfbecdefc3ec637a -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/md5/2aa088a9a41ec94b63aca317ce0a0fdc -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/sha512/7e291fcb11edb95d4e10b725a3acef4cec9d16ffd1e596687c0112ae8f0a298e128e12c0b96c54df98dd1bcb5917b53aad7c55e6325c09abee1153267103a432 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/md5/9d82aa30a6a08ea6294f935d2f0b05d3 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/sha512/2ea777015ddbdcac128b3313d091b63ce24504e368089cbd14d966c768e7109c4b94d17e190d9a0be222458f4d01e8542625b69057a30fae8f6cdc985ae70751 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/md5/409b6ce4af7e85bb6ea2c05d4075db81 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/sha512/a814c9fb705c4d779fc18a598ee67d68206d93010cc919a0b39b4514ab415c044fa385f1c50fa06fee45d894fa72715ba84d51ef3a11a08fe7a3fc1747348e4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3a7c1cc48100da0941e5ce8d85cb3a4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/296574c54b2dbe3b7995a9661f8e79edbac091174260e44d7e791e225a5488676a9b29b1315c8e38c7d7db4927fb235dbf6b45d06a843fb653b5746a8f3adb7d -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/136cd6727be4b3c5d8576faf4ed09b03 -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/85f2ce79ca038fb85da85667b0aa79c26d43003543796240a1e5c2f6fc00f24af29d78bb587e66b94015cb973aed33fe0b7a16d5a2d39ad8c2fcf480c63797ab -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/f8a6961fd047c73da271f1e4b441fc3f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/d4350fd12b1351060b977658c4483d18fddf18dc59b690b367f32bfa0b6d699ca49651392c49fd7addeef357239c60e17d0978c19acd661fa13ff78a7144e1dd -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/md5/80e5628c507d2bf82e7098a0666c6c4b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5582854c2182e5bac5de86d318ba833b4454ce1c2f7d8f7d7f0b3c1effa341f97cb3e43a541cf4197eca0cb93c4da46337f73b153d55fa5283e7d134c2b2660e -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/md5/f130da7a989b870a930b6dc659112a7b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/0292a32d01b13fa69ed2d7620480611cc9e0a8aa325b4366dca3932971fa3ef989eff02ca14c06adfa7718840803b49fe7bf56982ad6f340569d9c7c1750dac2 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/md5/b7d214ade95b63cbd950aa3cb976f679 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/d21f17a713a25983f415de063b3911cf39fc7f15493d41104b9e0b26b3a467f4b37a9dd5c5d0a3883de38e0a16c2a4a6a3bd7634b7f6868fbebdb473a15992d4 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/md5/78f95af8bdd31302311fc5a05ec6f895 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/540e02f90f7d844ea3b93bb00de1097b092d46ad710026cfd4a659695f6e1b6ff359c2273c0abe14bb53a20ec1c6343c27bc718f84e8720790906451590d0258 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/md5/f4261f43d8ae1fdb38280072dbcaf1ba -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/40f69bbbf5e929346a9dcf2f30af00d91874f889137a9664800cb986c9354d0825b4a6a8746e27ef6b14af9611766ee9538daa1c5cbde24736924c8588071941 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/md5/474eaed6749628e58bff5893492ad902 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/1fde4b09a4035a5177c60cc05bde8add73a06b3edfd59563ed5e6383e04d2b055bcfcbc989a8b6f7200efc1f862ea1b49ea2cfc7db4b30bf1aeb7dd641a622aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/md5/3388a7a9cd0c7bc64ff3dd5bbd6221c1 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/sha512/5e84afb5cef4d050ae7a0b290556d726fd8e9c59f0a7e9bc778ea1352c1985c7fa942849781dfc3bc14f0a1c51138d858c9bbca9124b434e331fa3a0343e8fd8 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/md5/bfac12f41bb0d3be8123deb6a032a5aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/sha512/30226271a4fa1ec44a01c68cf9d779142563786c19716e74c7a19029ccece71400cc6c9489794cb8f5b28815d8138c98dc3cb2d4011d5c5f7a009aa811b8088f -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/md5/b105fea98718ff0e7fc7cced91e5fa33 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/sha512/d8a09e174f49a0542a3e87a746338198e3f6e37ed6989f89ae3fe8f95eeef9d6625814cd30abd3927d059b3076f91d3793e1e3292e417edfdbea3171729af68c -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/809864b6b4ea73554202f47691e5487d -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/42fb2b1a331a9ca86f004e63188153b82a6e4f85ea36b361725fca4b476ccc64f85b35f287bae067f21ea43f6f85642e54915f33b134e7a68dfe64fe33b05200 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/0caba2da8ea3be51848e3e57de5fdc4e -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/39c9a9b6c893699491373efad401224eb499e636420545aaeca8c3475955601623abc0f3e10793ab72054b65a68651b663873c073cb9c0bbd89344f4b9496071 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1735272b015753d79e7539e2c750c291 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/89dd7a92e5f9182abddc9a90f443568818a84a960959599b35d6c6d3fcb4f60d340f6f319510771f7c45123e591460a7a019067d550ac71d9af9a37d824eb123 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/238c184ab1cb65a6e48137859a8a52bb -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/a73c4b42b798770e5f08ff83704c5d83bbd1f1101bf7c07effad1cabaf2b665d6e05ee2a73a552933d4bf48085bd4f80f5fd72c709b2012c5cf25c71aace1124 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/127aca06dc9461387cd5d2a91784242e -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/03099f50dc81427762c404a27ce4d8eb20c37c9664789cac5640ecf360c4dadf7a759680cd81d00301781d68e5df780ab981cb89fd20c448d72e7f0d1a909bf9 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/92f18261534ceb1e3181c4b6071b0063 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/38894868b7d7638e61a503a30c88ddf910af4e0ff8b9480b97f4ee7598088ba5c4735d1d85575deb1e593d8b6baf8fc549c85c8ba8d1b9683eb58cffb3f9e670 -openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/7ccaaaafc8176b87dc59d4e527ca4d9f +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/md5/2dc152e2799b095e38b1e0eaa0a91eb5 +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/f2d666634e572130af44749acdec5885867e528173242b0a4054ed95de20659142031488e26b9963d19413b9ae25b3ca49a1eab533b0a93a2631dc87df8d12aa +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/md5/83037a3237f101a6b41edecff23f3b6e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/a07ea0aa0caf9467bbf4ab90f509d822df00037ee0b88b9b5920c2eceac0e6148fd4943504a8fae44e57f5d062bd7431b95fa3d96a01096ae068480421e8a6df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/md5/efa78f7c581a1578a857de05c5ef337e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/37b3ee02391506fba50e8fafbf9a8f42806bebbc143f682958f2ccade49adf6be91ecc58afc9a41ceaa7582dc12537f7297571034e921a1e253b749415877672 +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/md5/dddddf9a74f094d8f7e8336a559701df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/4b8bb053d574329598fc59bd630a18461f972d86e7af6e8b022d9a5d124b3b6dd5adc62f84fe490dad4a5a80fbb8021fa90f4877ac580a85d54c30b6dd1336a1 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/md5/d2b4ffb0ab3290601e36503fca9ffd34 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/sha512/95342209d2aa3e9e501258092b8ee8c014eeace3f2683601190e676b69160e85476b3f0b762ea84e98fc4eb07f532b11147cbafad39b567dbac658676deb1889 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/md5/4912822999c62fe8f5310fc0eeb55547 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/sha512/496b8a396a027960ef66701a00bb4cb27462717cd46e10ef20922feb7cd897eef60e84bf7bc5cf6d3755e8411c067bf4f6cf27484698f583e900e49735477784 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/md5/cb39b61fb73577309875d159218402a9 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/sha512/e577e7610f4acf392b2b92c560f5aa9b9bd91d0f2c0e5cef9ecba4d5eff23f836c8a487088896f686582f917eee8542f28248f1f3a7506d73ae68bd62294c095 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/md5/43018db9b925939a361bc7f2b0af2e78 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/sha512/c37b3d8b146568878e1fbafbe012848c562dc88bde2563d9472fbac54119f57a39a1a693bcff3d23fcd7ca01ea631d5c55df9204f8f6412e8abc90d42f8ce788 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/md5/8c8c9de02167772624144c26b6eb4ddf +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/sha512/ed684b21db18039243366c3f3e2db8a733a79cd463ef2b05f8a1b7c983991ea21ee3dbe2f78febdb6df5a11c087fa19b64e5c2009d63e472e1c63d5ff1a12ca6 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/md5/7cda10161d1911ef1c55bc79437be0c2 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/sha512/b11ac5899d437639ca8e95d0d29a981328552086e25644c2284fa0081dd81ce474128cbc0b198649ad1ef4784d39d7f1b054a258ee650d3a3b3ac0d337b13424 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/md5/b355a49a55323d3d60d27a7a366d0e79 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/sha512/a9590c57d8931ca8b2c8e55d1095dc75290f0d7bee14a4dfa0cff2fc2b5f2be73bfd77dc46dca22467886016df06c3a9dfa21946b4c8fb867e9bb1c16098fd85 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/md5/60a33b3b5216a73f56fa324901d7c869 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/sha512/50832dc62a08c04c688d14afea8b3f141263d554cd0af1b3bb4b9db1b1cfa2a64a1450a015e9506fc967cb847b18bfde595fdf3c54fb0e6b93b8a520aa77344f +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/md5/8622a48a2e43041f9f2c6fdaff217b57 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/sha512/03d5c2b1882815b541876d2cb3d54f010e402167a6d8c84683d53f195e97f69e2bae4c39a6829c5c9abf100652168873dcb4268175b94f74447815920a65e2f1 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/md5/710e4246ab705481bb8a27341883bcc5 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/sha512/da16d22c8bc5628744987ceb1fc3c9e8b3ae8485d2bc9e93da0593bb177e3daeb6591e49c29832296e095b27300030bf7da14f52a08c77fb82c914b6c00264c6 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/md5/af159e18cfb7b1ec349f61d75ed4f4b4 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4f9fa98fb6feb8e3367d24bd2dd6ee27097898b73afdbc2a61231e2a359e2b5cbc311fead6e393f9a4cb355e5ef9a3f52e8d61e1f40e103869e1a87d4fa353b3 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/md5/6101533ade279afb216247c2a2a5d94e +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/sha512/ae800315993016ee9fab1e4c264cef8addd92155509de296488528441cfd69e695c30caeabb20dba8bfd5602eea07a646fa6037c68f0f0dc4ad262b7c926abd6 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/d614ec4c2abb2f6350405b3991138be1 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/8b5a0459d83bdd2cae1c6766a479ac92a8d3dc027c7c394a5eff04cd63ace68177cf36d56a8d9d8dd6611efdb3b0b9c2b9c80c6a99fdb5850d49043f54f6ca5d +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/812e8a33efb8f7f36da290a9ba6382e7 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/295e5219f1c6e22646d840d573df662fb5304ce2634b865607348a3c75fe8ddd8bb6cd16d9446ff64eecdfcdb9796d702807013c08fcf24316e28800361d1929 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/18f5cf23c5b83bf6d56c343fdeb97e3c +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/fc140a43d134d65b752f41e96062883dfdb170f168612d7f624e72990d66c30d2e3e6379364d8a6fa27e39c6380d8cdffe3d3fff0a32d0b85d5453a7d98fdf4f +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/md5/aaa467004ff0e3a439d56143bf4fc7dc +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/aa82a5cc564aac5e430a6b842998e6b6d3c960b2ef31b330e8ac42455c556aca5529d709409d165f9268b7586840632493e2aeaee37407837a2522a1433568f3 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/md5/301898a84303e00ee02d8b68876d92e5 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/6c7b59fcfca9b67f15db8706de30cd06d28b058d736129f847f986d8cf2f3b8453936e714aef48f2d563725bfb1000de096d51c73a65786cbe3119ef0dd91a63 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/md5/9df5e9390a965327d53c8a7419e35a9e +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/ba93faad7b50ab168061420d5ae0e09dad52c6133fa65b9b7717302ea23e2b8778e8e88dd583a8299c8c6105977dcf78578fc79e88434add6228909d4062915c +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/md5/efaa4403801599f45b01f1388de88262 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/cddf570cdef3cba4c29ebfecf3c3cf5fd31c3517524eb0c646d8aabe0d9d5856ad29132ca456122654f58444a02f2b3687b74a6818ab3d0882dd7f691ab8709a +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/md5/605bc2f322d4c0fd8758733c818f33d7 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/083a0c1caf378d349e7da99dba441bf81ab45cc23241c6b367938f9dcc07fa3b5dbca5b6c7ed9b0dd55f665b733bdfd64475b2a5f5b61aa8e9775fcae7e0724d +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/md5/93a11e5ba14eafcbdde5ed097833e6d2 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/b903fd48c4d5628d1de12b0439c568f24be2ce4a3f413f39957a394940a227a3a16aaad54601082dbbe42f11a2ae742b2485239464c71640677f445b32c342fd +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/md5/8c78e914758ed162faa1038388407617 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/sha512/829e3e9cce5d8df81bb2a88547793755aef74fc11bce8cdb28502264c42752ab0e2ef559f604b376b169b2d7c332e94a64c87e2514b8bba1db50d5d3280ac95f +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/md5/f6ef4b9521212e24b088f874acb7d926 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/sha512/8f953ab32a9b801332698df37bd8f838d6ef01f320824dc0bcd95b0f4ec97dd700e3f6d39df6c19a6ca7844f9b2fb8fb4e2aabec17a9135fe1412bb2fd2c8e12 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/md5/80501c5b7407177b18c84c0559340bd2 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/sha512/595eb78563425fc42bc4685b3a09bffa8df653ac0e73c879eecd5d7cc0f1dc3183055236764f32e7909ece36cf662f13ec41f8b082cdbd7941965de6f4df14b9 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/23f4fd43aa2898c58594912acb080bd6 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/7c73f26e73c2f47c9be2a7c4275432ed9e7a5d41828ab6299b95f6553a69262bceedb8f8e73d0cf164687e89413f35856b1d949b497659e6a552b6ac54a55971 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/28155c8edfaa160258216a25ffcd891a +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/c7c861345442308bafbe10781e3b5c2e4057cb82152f66bdde941b24d13336db0dc7c18b8174c0beb6c3333a518adb43046a6249c57a0b9ffdabe07598e06f0b +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1bbcda3a44c961b710ecd14a77e6fcc2 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/62505812e22be03af77809ff8d257f6afa007f6e34e98c54ce2943777bbe7c84160833047c348dc6087a59d1d63f0cf768e28e4a2010c7f76db2c24c1564ac6c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/dc6a09a63cd26b0a63bd140e2c3be5d6 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/aed98d4c2e41a66cbc9530841618a201dceb08feab79a2e429444fbee1fdc5fde3e3c716e5792661cbd42a49fcbb6044d10c5fcbc352d39c1bb4353862f29660 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/c27de85153c436e8588962d3c204c31c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/cee528de9a1f06f42c2abd6aa4d3bc3ba2472e0ba1203c562c614d250b2ba54aa2cbb011c9590219012d3f52f62e6622aac5347e61e780ea873d3ad749d617b3 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/c78a85d643c561483a60bb00a8156192 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/6b7d270388c1a13433b6f7f425f6be0d3a2abc20bf3964995be80f8641e4e5b7c57303ff2dc79f4acc700dbc3ccc6bdaa3fb741972cc719c34ca8722ff22d464 +openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/4e30022e79990d5a6fa008e099a3ec56 openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/3d1a096a738aa70c6c6c15acb9ac7fb77f3c8f9684c7f22dac1ceb7921c85131e3a7e55c893b6aed01f85f1bdff124d0b3a3fae3ca2dc5c0aae192c38c012417 diff --git a/deps/libgit2.version b/deps/libgit2.version index 5233b67754dad..5d405841d5c19 100644 --- a/deps/libgit2.version +++ b/deps/libgit2.version @@ -10,4 +10,4 @@ LIBGIT2_SHA1=e6325351ceee58cf56f58bdce61b38907805544f # Specify the version of the Mozilla CA Certificate Store to obtain. # The versions of cacert.pem are identified by the date (YYYY-MM-DD) of their changes. # See https://curl.haxx.se/docs/caextract.html for more details. -MOZILLA_CACERT_VERSION := 2023-01-10 +MOZILLA_CACERT_VERSION := 2025-12-02 diff --git a/deps/mbedtls.mk b/deps/mbedtls.mk index b4147c2c2684e..94c41058aed07 100644 --- a/deps/mbedtls.mk +++ b/deps/mbedtls.mk @@ -32,7 +32,8 @@ $(SRCCACHE)/$(MBEDTLS_SRC)/source-extracted: $(SRCCACHE)/$(MBEDTLS_SRC).tar.gz checksum-mbedtls: $(SRCCACHE)/$(MBEDTLS_SRC).tar.gz $(JLCHECKSUM) $< -$(BUILDDIR)/$(MBEDTLS_SRC)/build-configured: $(SRCCACHE)/$(MBEDTLS_SRC)/source-extracted +# $(BUILDDIR)/$(MBEDTLS_SRC)/build-configured: $(SRCCACHE)/$(MBEDTLS_SRC)/source-extracted +$(BUILDDIR)/$(MBEDTLS_SRC)/build-configured: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch14.patch-applied mkdir -p $(dir $@) cd $(dir $@) && \ $(CMAKE) $(dir $<) $(MBEDTLS_OPTS) @@ -95,3 +96,73 @@ else # USE_BINARYBUILDER_MBEDTLS $(eval $(call bb-install,mbedtls,MBEDTLS,false)) endif + +### Patches +# We carry eleven security patches from Debian (2.16.9) +# The patches are numbered 01 through 13, but we skip numbers 06 and 07 + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch01.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/source-extracted + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/01-CVE-2025-52496.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch02.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch01.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/02-CVE-2025-47917.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch03.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch02.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/03-CVE-2025-47917-test.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch04.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch03.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/04-CVE-2025-47917-2.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch05.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch04.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/05-CVE-2025-47917-2-test.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch08.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch05.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/08-CVE-2025-48965-1.patch + echo 1 > $@ + +# We skip numbers 06 and 07 + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch09.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch08.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/09-CVE-2025-48965-1-test.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch10.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch09.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/10-CVE-2025-52497-0-1.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch11.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch10.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/11-CVE-2025-52497-0-2.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch12.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch11.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/12-CVE-2025-52497.patch + echo 1 > $@ + +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch13.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch12.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/13-CVE-2025-52497-test.patch + echo 1 > $@ + +# Patch 14 isn't a security patch. +# We just need to edit CMakeLists.txt, because otherwise newer Cmakes will error with: +# > Compatibility with CMake < 3.5 has been removed from CMake. +$(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch14.patch-applied: $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-patch13.patch-applied + cd $(SRCCACHE)/$(MBEDTLS_SRC) && \ + patch -p1 -f < $(SRCDIR)/patches/mbedtls/14-CMakeLists.patch + + echo 1 > $@ diff --git a/deps/mbedtls.version b/deps/mbedtls.version index f262476af1684..a4b8a098ea12e 100644 --- a/deps/mbedtls.version +++ b/deps/mbedtls.version @@ -2,4 +2,7 @@ MBEDTLS_JLL_NAME := MbedTLS ## source build -MBEDTLS_VER := 2.28.2 +MBEDTLS_VER := 2.28.10 + +# Our JLL version number is 2.28.1010, which is upstream 2.28.10 plus +# Debian's (2.16.9) security patches. diff --git a/deps/openblas.mk b/deps/openblas.mk index 6be017b967f94..6c3023f6ee8d1 100644 --- a/deps/openblas.mk +++ b/deps/openblas.mk @@ -105,7 +105,17 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied: $(BUILDDIR)/$(OP patch -p1 -f < $(SRCDIR)/patches/openblas-m1-4003.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-asum-avx512.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-casum-fallback-fix.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/mbedtls/01-CVE-2025-52496.patch b/deps/patches/mbedtls/01-CVE-2025-52496.patch new file mode 100644 index 0000000000000..ea3c28621ebbf --- /dev/null +++ b/deps/patches/mbedtls/01-CVE-2025-52496.patch @@ -0,0 +1,76 @@ +From 6db4ef1f07496a1b09f038ce3a961f19c2766b85 Mon Sep 17 00:00:00 2001 +From: Gilles Peskine +Date: Mon, 9 Jun 2025 23:34:59 +0200 +Subject: [PATCH] Fix race condition in mbedtls_aesni_has_support + +Fix a race condition in `mbedtls_aes_ni_has_support()` with some compilers. +A compiler could hoist the assignment `done = 1` above the assignment to `c`, +in which case if two threads call `mbedtls_aes_ni_has_support()` at almost +the same time, they could be interleaved as follows: + + Initially: done = 0, c = 0 + + thread A thread B + if (!done) + done = 1; # hoisted + if (!done) + return c & what; # wrong! + c = cpuid(); + return c & what + +This would lead to thread B using software AES even though AESNI was +available. This is a very minor performance bug. But also, given a very +powerful adversary who can block thread A indefinitely (which may be +possible when attacking an SGX enclave), thread B could use software AES for +a long time, opening the way to a timing side channel attack. + +Signed-off-by: Gilles Peskine +--- + ChangeLog.d/aesni_has_support.txt | 15 +++++++++++++++ + library/aesni.c | 8 ++++++-- + 2 files changed, 21 insertions(+), 2 deletions(-) + create mode 100644 ChangeLog.d/aesni_has_support.txt + +diff --git a/ChangeLog.d/aesni_has_support.txt b/ChangeLog.d/aesni_has_support.txt +new file mode 100644 +index 0000000000..6ae0a56584 +--- /dev/null ++++ b/ChangeLog.d/aesni_has_support.txt +@@ -0,0 +1,15 @@ ++Bugfix ++ * Fix a race condition on x86/amd64 platforms in AESNI support detection ++ that could lead to using software AES in some threads at the very ++ beginning of a multithreaded program. Reported by Solar Designer. ++ Fixes #9840. ++ ++Security ++ * On x86/amd64 platforms, with some compilers, when the library is ++ compiled with support for both AESNI and software AES and AESNI is ++ available in hardware, an adversary with fine control over which ++ threads make progress in a multithreaded program could force software ++ AES to be used for some time when the program starts. This could allow ++ the adversary to conduct timing attacks and potentially recover the ++ key. In particular, this attacker model may be possible against an SGX ++ enclave. +diff --git a/library/aesni.c b/library/aesni.c +index 7491f8d980..bc6165069f 100644 +--- a/library/aesni.c ++++ b/library/aesni.c +@@ -42,8 +42,12 @@ + */ + int mbedtls_aesni_has_support(unsigned int what) + { +- static int done = 0; +- static unsigned int c = 0; ++ /* To avoid a race condition, tell the compiler that the assignment ++ * `done = 1` and the assignment to `c` may not be reordered. ++ * https://github.com/Mbed-TLS/mbedtls/issues/9840 ++ */ ++ static volatile int done = 0; ++ static volatile unsigned int c = 0; + + if (!done) { + #if MBEDTLS_AESNI_HAVE_CODE == 2 +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/02-CVE-2025-47917.patch b/deps/patches/mbedtls/02-CVE-2025-47917.patch new file mode 100644 index 0000000000000..22d39878f74fb --- /dev/null +++ b/deps/patches/mbedtls/02-CVE-2025-47917.patch @@ -0,0 +1,71 @@ +From 857114bba065e3fc5a7e0a110ec1c23aa3655c07 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Mon, 5 May 2025 16:41:52 +0200 +Subject: [PATCH] Fix undocumented free() in x509_string_to_names() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Now programs/x509/cert_write san="DN:CN=#0000;DN:CN=#0000" is no longer +crashing with use-after-free, instead it's now failing cleanly: + + failed + ! mbedtls_x509_string_to_names returned -0x2800 - X509 - Input invalid + +That's better of course but still not great, will be fixed by future +commits. + +Signed-off-by: Manuel Pégourié-Gonnard +--- + .../fix-string-to-names-memory-management.txt | 18 ++++++++++++++++++ + library/x509_create.c | 8 ++++++-- + 2 files changed, 24 insertions(+), 2 deletions(-) + create mode 100644 ChangeLog.d/fix-string-to-names-memory-management.txt + +diff --git a/ChangeLog.d/fix-string-to-names-memory-management.txt b/ChangeLog.d/fix-string-to-names-memory-management.txt +new file mode 100644 +index 0000000000..1b2198287d +--- /dev/null ++++ b/ChangeLog.d/fix-string-to-names-memory-management.txt +@@ -0,0 +1,18 @@ ++Security ++ * Fix possible use-after-free or double-free in code calling ++ mbedtls_x509_string_to_names(). This was caused by the function calling ++ mbedtls_asn1_free_named_data_list() on its head argument, while the ++ documentation did no suggest it did, making it likely for callers relying ++ on the documented behaviour to still hold pointers to memory blocks after ++ they were free()d, resulting in high risk of use-after-free or double-free, ++ with consequences ranging up to arbitrary code execution. ++ In particular, the two sample programs x509/cert_write and x509/cert_req ++ were affected (use-after-free if the san string contains more than one DN). ++ Code that does not call mbedtls_string_to_names() directly is not affected. ++ Found by Linh Le and Ngan Nguyen from Calif. ++ ++Changes ++ * The function mbedtls_x509_string_to_names() now requires its head argument ++ to point to NULL on entry. This make it likely that existing risky uses of ++ this function (see the entry in the Security section) will be detected and ++ fixed. +diff --git a/library/x509_create.c b/library/x509_create.c +index 4ffd3b6a80..c04d3bbc04 100644 +--- a/library/x509_create.c ++++ b/library/x509_create.c +@@ -122,8 +122,12 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam + char data[MBEDTLS_X509_MAX_DN_NAME_SIZE]; + char *d = data; + +- /* Clear existing chain if present */ +- mbedtls_asn1_free_named_data_list(head); ++ /* Ensure the output parameter is not already populated. ++ * (If it were, overwriting it would likely cause a memory leak.) ++ */ ++ if (*head != NULL) { ++ return MBEDTLS_ERR_X509_BAD_INPUT_DATA; ++ } + + while (c <= end) { + if (in_tag && *c == '=') { +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/03-CVE-2025-47917-test.patch b/deps/patches/mbedtls/03-CVE-2025-47917-test.patch new file mode 100644 index 0000000000000..7e69e5ed436c7 --- /dev/null +++ b/deps/patches/mbedtls/03-CVE-2025-47917-test.patch @@ -0,0 +1,54 @@ +From 4050bc4f45a50cdbe1de353fee0db4b1f6352b5c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Wed, 21 May 2025 14:35:42 +0200 +Subject: [PATCH] Add tests for bug in mbedtls_x509_string_to_names() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The commented out tests cause crashes (in different ways) until the bug +is fixed; the first two test are passing already and are here mostly to +provide a reference point. + +The bug report was using programs/x509/cert_write, but string_to_names() +is what it was really targetting, which is better for automated tests. +The strings used are a minor adapation of those from the report. + +Signed-off-by: Manuel Pégourié-Gonnard +--- + tests/suites/test_suite_x509write.data | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/tests/suites/test_suite_x509write.data b/tests/suites/test_suite_x509write.data +index 6bb81c7e78..59f93d24c9 100644 +--- a/tests/suites/test_suite_x509write.data ++++ b/tests/suites/test_suite_x509write.data +@@ -141,3 +141,24 @@ x509_set_serial_check: + + Check max extension length + x509_set_extension_length_check: ++ ++# Note: the behaviour is incorrect, output from string->names->string should be ++# the same as the input, rather than just the last component, see ++# https://github.com/Mbed-TLS/mbedtls/issues/10189 ++# Still including tests for the current incorrect behaviour because of the ++# variants below where we want to ensure at least that no memory corruption ++# happens (which would be a lot worse than just a functional bug). ++X509 String to Names (repeated OID) ++mbedtls_x509_string_to_names:"CN=ab,CN=cd,CN=ef":"CN=ef":0 ++ ++# Note: when a value starts with a # sign, it's treated as the hex encoding of ++# the DER encoding of the value. Here, 0400 is a zero-length OCTET STRING. ++# The tag actually doesn't matter for our purposes, only the length. ++X509 String to Names (repeated OID, 1st is zero-length) ++mbedtls_x509_string_to_names:"CN=#0400,CN=cd,CN=ef":"CN=ef":0 ++ ++#X509 String to Names (repeated OID, middle is zero-length) ++#mbedtls_x509_string_to_names:"CN=ab,CN=#0400,CN=ef":"CN=ef":0 ++ ++#X509 String to Names (repeated OID, last is zero-length) ++#mbedtls_x509_string_to_names:"CN=ab,CN=cd,CN=#0400":"CN=ef":0 +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/04-CVE-2025-47917-2.patch b/deps/patches/mbedtls/04-CVE-2025-47917-2.patch new file mode 100644 index 0000000000000..cfe90d9b9f09f --- /dev/null +++ b/deps/patches/mbedtls/04-CVE-2025-47917-2.patch @@ -0,0 +1,58 @@ +From 11c27db751d0a1bd8a31372ad9db12beb0800ce2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Mon, 5 May 2025 16:49:45 +0200 +Subject: [PATCH] Restore behaviour of mbedtls_x509write_set_foo_name() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The documentation doesn't say you can't call these functions more than +once on the same context, and if you do it shouldn't result in a memory +leak. Historically, the call to mbedtls_asn1_free_named_data_list() in +mbedtls_x509_string_to_names() (that was removed in the previous commit) +was ensuring that. Let's restore it where it makes sense. (These are the +only 3 places calling mbedtls_x509_string_to_names() in the library.) + +Signed-off-by: Manuel Pégourié-Gonnard + +Origin: backport, https://github.com/Mbed-TLS/mbedtls/commit/2dc6b583acde7dfe99e920e7c41edec49de54da5 +--- + library/x509write_crt.c | 2 ++ + library/x509write_csr.c | 1 + + 2 files changed, 3 insertions(+) + +diff --git a/library/x509write_crt.c b/library/x509write_crt.c +index 1e16b53b3d..e2db5e84d1 100644 +--- a/library/x509write_crt.c ++++ b/library/x509write_crt.c +@@ -74,12 +74,14 @@ void mbedtls_x509write_crt_set_issuer_key(mbedtls_x509write_cert *ctx, + int mbedtls_x509write_crt_set_subject_name(mbedtls_x509write_cert *ctx, + const char *subject_name) + { ++ mbedtls_asn1_free_named_data_list(&ctx->subject); + return mbedtls_x509_string_to_names(&ctx->subject, subject_name); + } + + int mbedtls_x509write_crt_set_issuer_name(mbedtls_x509write_cert *ctx, + const char *issuer_name) + { ++ mbedtls_asn1_free_named_data_list(&ctx->issuer); + return mbedtls_x509_string_to_names(&ctx->issuer, issuer_name); + } + +diff --git a/library/x509write_csr.c b/library/x509write_csr.c +index 3c3ab3a078..f1f61bb436 100644 +--- a/library/x509write_csr.c ++++ b/library/x509write_csr.c +@@ -60,6 +60,7 @@ void mbedtls_x509write_csr_set_key(mbedtls_x509write_csr *ctx, mbedtls_pk_contex + int mbedtls_x509write_csr_set_subject_name(mbedtls_x509write_csr *ctx, + const char *subject_name) + { ++ mbedtls_asn1_free_named_data_list(&ctx->subject); + return mbedtls_x509_string_to_names(&ctx->subject, subject_name); + } + +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/05-CVE-2025-47917-2-test.patch b/deps/patches/mbedtls/05-CVE-2025-47917-2-test.patch new file mode 100644 index 0000000000000..1f47ac2885805 --- /dev/null +++ b/deps/patches/mbedtls/05-CVE-2025-47917-2-test.patch @@ -0,0 +1,35 @@ +From f6e8bc8a014eaf4bb86417237375c2c735ec118a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Mon, 5 May 2025 18:25:26 +0200 +Subject: [PATCH] Add unit test for new behaviour of string_to_names() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Manuel Pégourié-Gonnard + +Origin: backport, https://github.com/Mbed-TLS/mbedtls/commit/bda3ab927826ae7603a46d8073790cc051848976 +--- + tests/suites/test_suite_x509write.function | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/tests/suites/test_suite_x509write.function b/tests/suites/test_suite_x509write.function +index 61b317c625..e3d8a7bddf 100644 +--- a/tests/suites/test_suite_x509write.function ++++ b/tests/suites/test_suite_x509write.function +@@ -489,6 +489,11 @@ void mbedtls_x509_string_to_names(char *name, char *parsed_name, int result + + TEST_ASSERT(strcmp((char *) out, parsed_name) == 0); + ++ /* Check that calling a 2nd time with the same param (now non-NULL) ++ * returns an error as expected. */ ++ ret = mbedtls_x509_string_to_names(&names, name); ++ TEST_EQUAL(ret, MBEDTLS_ERR_X509_BAD_INPUT_DATA); ++ + exit: + mbedtls_asn1_free_named_data_list(&names); + +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/08-CVE-2025-48965-1.patch b/deps/patches/mbedtls/08-CVE-2025-48965-1.patch new file mode 100644 index 0000000000000..5e679510c9ade --- /dev/null +++ b/deps/patches/mbedtls/08-CVE-2025-48965-1.patch @@ -0,0 +1,63 @@ +From b9954febfc1df91c51c0e76aab4b03dfba884fca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Mon, 26 May 2025 10:42:14 +0200 +Subject: [PATCH] Fix bug in mbedtls_asn1_store_named_data() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When passed a zero-length val, the function was free-ing the buffer as +the documentation suggests: + + * \param val_len The minimum length of the data buffer needed. + * If this is 0, do not allocate a buffer for the associated + * data. + * If the OID was already present, enlarge, shrink or free + * the existing buffer to fit \p val_len. + +However it kept the previous length, leaving the val structure in the +corresponding item in the output list in an inconsistent state: + + p == NULL but len != 0 + +As a result, functions that would try using this item in the list +(including the same function!) afterwards would trip an dereference the +NULL pointer. + +Signed-off-by: Manuel Pégourié-Gonnard +--- + library/asn1write.c | 1 + + tests/suites/test_suite_x509write.data | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/library/asn1write.c b/library/asn1write.c +index 0147c49f68..c671bdd9ed 100644 +--- a/library/asn1write.c ++++ b/library/asn1write.c +@@ -453,6 +453,7 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( + } else if (val_len == 0) { + mbedtls_free(cur->val.p); + cur->val.p = NULL; ++ cur->val.len = 0; + } else if (cur->val.len != val_len) { + /* + * Enlarge existing value buffer if needed +diff --git a/tests/suites/test_suite_x509write.data b/tests/suites/test_suite_x509write.data +index 59f93d24c9..0599dfd44a 100644 +--- a/tests/suites/test_suite_x509write.data ++++ b/tests/suites/test_suite_x509write.data +@@ -157,8 +157,8 @@ mbedtls_x509_string_to_names:"CN=ab,CN=cd,CN=ef":"CN=ef":0 + X509 String to Names (repeated OID, 1st is zero-length) + mbedtls_x509_string_to_names:"CN=#0400,CN=cd,CN=ef":"CN=ef":0 + +-#X509 String to Names (repeated OID, middle is zero-length) +-#mbedtls_x509_string_to_names:"CN=ab,CN=#0400,CN=ef":"CN=ef":0 ++X509 String to Names (repeated OID, middle is zero-length) ++mbedtls_x509_string_to_names:"CN=ab,CN=#0400,CN=ef":"CN=ef":0 + + #X509 String to Names (repeated OID, last is zero-length) + #mbedtls_x509_string_to_names:"CN=ab,CN=cd,CN=#0400":"CN=ef":0 +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/09-CVE-2025-48965-1-test.patch b/deps/patches/mbedtls/09-CVE-2025-48965-1-test.patch new file mode 100644 index 0000000000000..68df926323dd4 --- /dev/null +++ b/deps/patches/mbedtls/09-CVE-2025-48965-1-test.patch @@ -0,0 +1,34 @@ +From 852e6a23bd0a87d920efe78dba29c40636f05b13 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= + +Date: Mon, 26 May 2025 10:55:59 +0200 +Subject: [PATCH] Improve unit tests for mbedtls_asn1_store_named_data +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Every time we check found->val.p we should also check found->val.len. + +Signed-off-by: Manuel Pégourié-Gonnard +--- + tests/suites/test_suite_asn1write.function | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tests/suites/test_suite_asn1write.function b/tests/suites/test_suite_asn1write.function +index 77bf4ef3c2..d99bca6152 100644 +--- a/tests/suites/test_suite_asn1write.function ++++ b/tests/suites/test_suite_asn1write.function +@@ -583,8 +583,10 @@ void store_named_data_val_new(int new_len, int set_new_val) + TEST_MEMORY_COMPARE(found->oid.p, found->oid.len, oid, oid_len); + if (new_len == 0) { + TEST_ASSERT(found->val.p == NULL); ++ TEST_EQUAL(found->val.len, 0); + } else if (new_val == NULL) { + TEST_ASSERT(found->val.p != NULL); ++ TEST_EQUAL(found->val.len, new_len); + } else { + TEST_ASSERT(found->val.p != new_val); + TEST_MEMORY_COMPARE(found->val.p, found->val.len, +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/10-CVE-2025-52497-0-1.patch b/deps/patches/mbedtls/10-CVE-2025-52497-0-1.patch new file mode 100644 index 0000000000000..64f48e55cd9f2 --- /dev/null +++ b/deps/patches/mbedtls/10-CVE-2025-52497-0-1.patch @@ -0,0 +1,80 @@ +From 53c03ed8013b2887339a17a49b7c5dadf730cbd2 Mon Sep 17 00:00:00 2001 +From: Valerio Setti +Date: Thu, 8 Feb 2024 17:51:00 +0100 +Subject: [PATCH] pem: fix valid data length returned by + mbedtls_pem_read_buffer() + +ctx->buflen now returns the amount of valid data in ctx->buf. +Unencrypted buffers were already ok, but encrypted ones were +used to return the length of the encrypted buffer, not the +unencrypted one. +This commit fix this behavior for encrypted buffers. + +Signed-off-by: Valerio Setti +--- + include/mbedtls/pem.h | 6 +++--- + library/pem.c | 19 ++++++++++++------- + 2 files changed, 15 insertions(+), 10 deletions(-) + +diff --git a/include/mbedtls/pem.h b/include/mbedtls/pem.h +index ffe6e473da..2f7e6c51f3 100644 +--- a/include/mbedtls/pem.h ++++ b/include/mbedtls/pem.h +@@ -76,11 +76,11 @@ void mbedtls_pem_init(mbedtls_pem_context *ctx); + * \param data source data to look in (must be nul-terminated) + * \param pwd password for decryption (can be NULL) + * \param pwdlen length of password +- * \param use_len destination for total length used (set after header is +- * correctly read, so unless you get ++ * \param use_len destination for total length used from data buffer. It is ++ * set after header is correctly read, so unless you get + * MBEDTLS_ERR_PEM_BAD_INPUT_DATA or + * MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT, use_len is +- * the length to skip) ++ * the length to skip. + * + * \note Attempts to check password correctness by verifying if + * the decrypted text starts with an ASN.1 sequence of +diff --git a/library/pem.c b/library/pem.c +index c1a47b0da4..57d6f1ca0b 100644 +--- a/library/pem.c ++++ b/library/pem.c +@@ -17,6 +17,7 @@ + #include "mbedtls/cipher.h" + #include "mbedtls/platform_util.h" + #include "mbedtls/error.h" ++#include "mbedtls/asn1.h" + + #include + +@@ -421,16 +422,20 @@ int mbedtls_pem_read_buffer(mbedtls_pem_context *ctx, const char *header, const + } + + /* +- * The result will be ASN.1 starting with a SEQUENCE tag, with 1 to 3 +- * length bytes (allow 4 to be sure) in all known use cases. +- * +- * Use that as a heuristic to try to detect password mismatches. ++ * The result will be ASN.1 starting with a SEQUENCE tag. Parse it ++ * with ASN.1 functions in order to: ++ * - Have an heuristic guess about password mismatches. ++ * - Update len variable to the amount of valid data inside buf. + */ +- if (len <= 2 || buf[0] != 0x30 || buf[1] > 0x83) { +- mbedtls_platform_zeroize(buf, len); ++ unsigned char *p = buf; ++ ret = mbedtls_asn1_get_tag(&p, buf + len, &len, ++ MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED); ++ if (ret != 0) { + mbedtls_free(buf); +- return MBEDTLS_ERR_PEM_PASSWORD_MISMATCH; ++ return MBEDTLS_ERR_PEM_INVALID_DATA + ret; + } ++ /* Add also the sequence block (tag + len) to the total amount of valid data. */ ++ len += (p - buf); + #else + mbedtls_platform_zeroize(buf, len); + mbedtls_free(buf); +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/11-CVE-2025-52497-0-2.patch b/deps/patches/mbedtls/11-CVE-2025-52497-0-2.patch new file mode 100644 index 0000000000000..65ef93631c81f --- /dev/null +++ b/deps/patches/mbedtls/11-CVE-2025-52497-0-2.patch @@ -0,0 +1,130 @@ +From e5cd988988eac19f3f7cc99a8156ec38659e3344 Mon Sep 17 00:00:00 2001 +From: Valerio Setti +Date: Mon, 12 Feb 2024 11:01:37 +0100 +Subject: [PATCH] pem: check data padding in DES/AES decrypted buffers + +Signed-off-by: Valerio Setti + +pem: reject empty PEM contents + +Signed-off-by: Valerio Setti + +pem: fix return values in pem_check_pkcs_padding() + +Return MBEDTLS_ERR_PEM_PASSWORD_MISMATCH instead of +MBEDTLS_ERR_PEM_BAD_INPUT_DATA in case of errors. +This commit also fix related failures in test pkparse and +pem test suites. + +Signed-off-by: Valerio Setti +--- + library/pem.c | 54 ++++++++++++++++++++++++++++---- + tests/suites/test_suite_pem.data | 4 +++ + 2 files changed, 52 insertions(+), 6 deletions(-) + +diff --git a/library/pem.c b/library/pem.c +index 57d6f1ca0b..0c7b0ec275 100644 +--- a/library/pem.c ++++ b/library/pem.c +@@ -223,6 +223,29 @@ exit: + } + #endif /* MBEDTLS_AES_C */ + ++#if defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) ++static int pem_check_pkcs_padding(unsigned char *input, size_t input_len, size_t *data_len) ++{ ++ /* input_len > 0 is guaranteed by mbedtls_pem_read_buffer(). */ ++ size_t pad_len = input[input_len - 1]; ++ size_t i; ++ ++ if (pad_len > input_len) { ++ return MBEDTLS_ERR_PEM_PASSWORD_MISMATCH; ++ } ++ ++ *data_len = input_len - pad_len; ++ ++ for (i = *data_len; i < input_len; i++) { ++ if (input[i] != pad_len) { ++ return MBEDTLS_ERR_PEM_PASSWORD_MISMATCH; ++ } ++ } ++ ++ return 0; ++} ++#endif /* MBEDTLS_DES_C || MBEDTLS_AES_C */ ++ + #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && + ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ + +@@ -377,6 +400,10 @@ int mbedtls_pem_read_buffer(mbedtls_pem_context *ctx, const char *header, const + return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_PEM_INVALID_DATA, ret); + } + ++ if (len == 0) { ++ return MBEDTLS_ERR_PEM_BAD_INPUT_DATA; ++ } ++ + if ((buf = mbedtls_calloc(1, len)) == NULL) { + return MBEDTLS_ERR_PEM_ALLOC_FAILED; + } +@@ -421,21 +448,36 @@ int mbedtls_pem_read_buffer(mbedtls_pem_context *ctx, const char *header, const + return ret; + } + ++ /* Check PKCS padding and update data length based on padding info. ++ * This can be used to detect invalid padding data and password ++ * mismatches. */ ++ ret = pem_check_pkcs_padding(buf, len, &len); ++ if (ret != 0) { ++ mbedtls_free(buf); ++ return ret; ++ } ++ + /* +- * The result will be ASN.1 starting with a SEQUENCE tag. Parse it +- * with ASN.1 functions in order to: +- * - Have an heuristic guess about password mismatches. +- * - Update len variable to the amount of valid data inside buf. ++ * In RFC1421 PEM is used as container for DER (ASN.1) content so we ++ * can use ASN.1 functions to parse the main SEQUENCE tag and to get its ++ * length. + */ + unsigned char *p = buf; +- ret = mbedtls_asn1_get_tag(&p, buf + len, &len, ++ size_t sequence_len; ++ ret = mbedtls_asn1_get_tag(&p, buf + len, &sequence_len, + MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED); + if (ret != 0) { + mbedtls_free(buf); + return MBEDTLS_ERR_PEM_INVALID_DATA + ret; + } + /* Add also the sequence block (tag + len) to the total amount of valid data. */ +- len += (p - buf); ++ sequence_len += (p - buf); ++ ++ /* Ensure that the reported SEQUENCE length matches the data len (i.e. no ++ * trailing garbage data). */ ++ if (len != sequence_len) { ++ return MBEDTLS_ERR_PEM_BAD_INPUT_DATA; ++ } + #else + mbedtls_platform_zeroize(buf, len); + mbedtls_free(buf); +diff --git a/tests/suites/test_suite_pem.data b/tests/suites/test_suite_pem.data +index 0f4b6b42a2..b63755452a 100644 +--- a/tests/suites/test_suite_pem.data ++++ b/tests/suites/test_suite_pem.data +@@ -16,6 +16,10 @@ mbedtls_pem_write_buffer:"-----START TEST-----\n":"-----END TEST-----\n":"000102 + PEM write (exactly two lines + 1) + mbedtls_pem_write_buffer:"-----START TEST-----\n":"-----END TEST-----\n":"000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F00":"-----START TEST-----\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAA==\n-----END TEST-----\n" + ++PEM read (unencrypted, empty content) ++depends_on:MBEDTLS_MD_CAN_MD5:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CBC ++mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\n\n-----END EC PRIVATE KEY-----":"":MBEDTLS_ERR_PEM_BAD_INPUT_DATA ++ + PEM read (DES-EDE3-CBC + invalid iv) + mbedtls_pem_read_buffer:"^":"$":"^\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-EDE3-CBC,00$":"pwd":MBEDTLS_ERR_PEM_INVALID_ENC_IV + +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/12-CVE-2025-52497.patch b/deps/patches/mbedtls/12-CVE-2025-52497.patch new file mode 100644 index 0000000000000..a10db54e140d9 --- /dev/null +++ b/deps/patches/mbedtls/12-CVE-2025-52497.patch @@ -0,0 +1,29 @@ +From e9170a1b78524e32fb3f446e40d26c0a6f5ff962 Mon Sep 17 00:00:00 2001 +From: Felix Conway +Date: Tue, 27 May 2025 16:00:48 +0100 +Subject: [PATCH] Add fix for PEM underflow + +Signed-off-by: Felix Conway +--- + library/pem.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/library/pem.c b/library/pem.c +index 0c7b0ec275..b97c378687 100644 +--- a/library/pem.c ++++ b/library/pem.c +@@ -226,7 +226,10 @@ exit: + #if defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) + static int pem_check_pkcs_padding(unsigned char *input, size_t input_len, size_t *data_len) + { +- /* input_len > 0 is guaranteed by mbedtls_pem_read_buffer(). */ ++ /* input_len > 0 is not guaranteed by mbedtls_pem_read_buffer(). */ ++ if (input_len < 1) { ++ return MBEDTLS_ERR_PEM_INVALID_DATA; ++ } + size_t pad_len = input[input_len - 1]; + size_t i; + +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/13-CVE-2025-52497-test.patch b/deps/patches/mbedtls/13-CVE-2025-52497-test.patch new file mode 100644 index 0000000000000..7634c1cda596d --- /dev/null +++ b/deps/patches/mbedtls/13-CVE-2025-52497-test.patch @@ -0,0 +1,28 @@ +From bab93af2b19f2b74380299667953bc3c0952f916 Mon Sep 17 00:00:00 2001 +From: Felix Conway +Date: Tue, 27 May 2025 14:54:07 +0100 +Subject: [PATCH] Add test using underflow-causing PEM keyfile + +Signed-off-by: Felix Conway +--- + tests/suites/test_suite_pem.data | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tests/suites/test_suite_pem.data b/tests/suites/test_suite_pem.data +index b63755452a..798d21eab0 100644 +--- a/tests/suites/test_suite_pem.data ++++ b/tests/suites/test_suite_pem.data +@@ -34,6 +34,10 @@ PEM read (unknown encryption algorithm) + depends_on:MBEDTLS_AES_C + mbedtls_pem_read_buffer:"^":"$":"^\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-,00$":"pwd":MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG + ++PEM read (malformed PEM AES-128-CBC with fewer than 4 base64 chars) ++depends_on:MBEDTLS_MD_CAN_MD5:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CBC ++mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-128-CBC,7BA38DE00F67851E4207216809C3BB15\n\n8Q-----END EC PRIVATE KEY-----":"pwd":MBEDTLS_ERR_PEM_INVALID_DATA ++ + PEM read (malformed PEM DES-CBC) + depends_on:MBEDTLS_DES_C:MBEDTLS_CIPHER_MODE_CBC + mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-CBC,AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":"pwd":MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH +-- +2.39.5 (Apple Git-154) + diff --git a/deps/patches/mbedtls/14-CMakeLists.patch b/deps/patches/mbedtls/14-CMakeLists.patch new file mode 100644 index 0000000000000..23393c44f49ea --- /dev/null +++ b/deps/patches/mbedtls/14-CMakeLists.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt 2026-01-19 17:44:58 ++++ b/CMakeLists.txt 2026-01-19 17:45:04 +@@ -20,7 +20,7 @@ + # mbedtls, mbedx509, mbedcrypto and apidoc targets. + # + +-cmake_minimum_required(VERSION 2.8.12) ++cmake_minimum_required(VERSION 3.5) + + # https://cmake.org/cmake/help/latest/policy/CMP0011.html + # Setting this policy is required in CMake >= 3.18.0, otherwise a warning is generated. The OLD diff --git a/deps/patches/openblas-asum-avx512.patch b/deps/patches/openblas-asum-avx512.patch new file mode 100644 index 0000000000000..64ec6b4e42233 --- /dev/null +++ b/deps/patches/openblas-asum-avx512.patch @@ -0,0 +1,68 @@ +From 9019bc494514a74c2042152cdca0a36adea7b42f Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Sat, 4 Nov 2023 22:10:06 +0100 +Subject: [PATCH] Use SkylakeX ?ASUM microkernel for Cooperlake/Sapphirerapids + as well + +--- + kernel/x86_64/casum.c | 2 +- + kernel/x86_64/dasum.c | 2 +- + kernel/x86_64/sasum.c | 2 +- + kernel/x86_64/zasum.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index 60feec0ce..e4d054311 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "casum_microk_skylakex-2.c" + #endif + +diff --git a/kernel/x86_64/dasum.c b/kernel/x86_64/dasum.c +index a9c40f38f..0147c6978 100644 +--- a/kernel/x86_64/dasum.c ++++ b/kernel/x86_64/dasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "dasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "dasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/sasum.c b/kernel/x86_64/sasum.c +index 37a92468f..3f22cb97a 100644 +--- a/kernel/x86_64/sasum.c ++++ b/kernel/x86_64/sasum.c +@@ -9,7 +9,7 @@ + + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "sasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "sasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/zasum.c b/kernel/x86_64/zasum.c +index 80e95a2c8..3f17ab1cf 100644 +--- a/kernel/x86_64/zasum.c ++++ b/kernel/x86_64/zasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "zasum_microk_skylakex-2.c" + #endif + +-- +2.50.1 + diff --git a/deps/patches/openblas-casum-fallback-fix.patch b/deps/patches/openblas-casum-fallback-fix.patch new file mode 100644 index 0000000000000..eb9dea864f9a5 --- /dev/null +++ b/deps/patches/openblas-casum-fallback-fix.patch @@ -0,0 +1,79 @@ +From f8ad5344c210960fc399ca5b0ad8559ab5ca253e Mon Sep 17 00:00:00 2001 +From: Bart Oldeman +Date: Fri, 17 Nov 2023 23:49:34 +0000 +Subject: [PATCH] Fix casum fallback kernel. + +This kernel is only used on Skylake+ if the kernel with AVX512 +intrinsics can't be used, but used the variable x1 incorrectly +in the tail end of the loop, as it is still at the initial +value instead of where x points to. + +This caused 55 "other error"s in the LAPACK tests +(https://github.com/OpenMathLib/OpenBLAS/issues/4282) + +This change makes casum.c as similar as possible as zasum.c, +because zasum.c does this correctly. +--- + kernel/x86_64/casum.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index e4d054311..28d78d279 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -9,12 +9,12 @@ + #endif + + #ifndef HAVE_CASUM_KERNEL +-static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) ++static FLOAT casum_kernel(BLASLONG n, FLOAT *x) + { + + BLASLONG i=0; + BLASLONG n_8 = n & -8; +- FLOAT *x = x1; ++ FLOAT *x1 = x; + FLOAT temp0, temp1, temp2, temp3; + FLOAT temp4, temp5, temp6, temp7; + FLOAT sum0 = 0.0; +@@ -24,14 +24,14 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + FLOAT sum4 = 0.0; + + while (i < n_8) { +- temp0 = ABS_K(x[0]); +- temp1 = ABS_K(x[1]); +- temp2 = ABS_K(x[2]); +- temp3 = ABS_K(x[3]); +- temp4 = ABS_K(x[4]); +- temp5 = ABS_K(x[5]); +- temp6 = ABS_K(x[6]); +- temp7 = ABS_K(x[7]); ++ temp0 = ABS_K(x1[0]); ++ temp1 = ABS_K(x1[1]); ++ temp2 = ABS_K(x1[2]); ++ temp3 = ABS_K(x1[3]); ++ temp4 = ABS_K(x1[4]); ++ temp5 = ABS_K(x1[5]); ++ temp6 = ABS_K(x1[6]); ++ temp7 = ABS_K(x1[7]); + + sum0 += temp0; + sum1 += temp1; +@@ -43,12 +43,12 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + sum2 += temp6; + sum3 += temp7; + +- x+=8; ++ x1+=8; + i+=4; + } + + while (i < n) { +- sum4 += (ABS_K(x1[0]) + ABS_K(x1[1])); ++ sum4 += ABS_K(x1[0]) + ABS_K(x1[1]); + x1 += 2; + i++; + } +-- +2.50.1 + diff --git a/doc/Makefile b/doc/Makefile index 4469a40f74248..d7247b349c4cd 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -57,3 +57,8 @@ deploy: deps @echo "Deploying HTML documentation." $(JULIA_EXECUTABLE) --color=yes $(call cygpath_w,$(SRCDIR)/make.jl) -- deploy $(DOCUMENTER_OPTIONS) @echo "Build & deploy of docs finished." + +.PHONY: update-documenter +update-documenter: + @echo "Updating Documenter." + JULIA_PKG_PRECOMPILE_AUTO=0 $(JULIA_EXECUTABLE) --project=. --color=yes -e 'using Pkg; Pkg.update()' diff --git a/doc/Manifest.toml b/doc/Manifest.toml index be49a18729b80..83ca30f6c5198 100644 --- a/doc/Manifest.toml +++ b/doc/Manifest.toml @@ -1,14 +1,23 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.2" +julia_version = "1.10.10" manifest_format = "2.0" -project_hash = "94441cf327e3c2e23c216d2e7b11c5c833d323b9" +project_hash = "e0c77beb18dc1f6cce661ebd60658c0c1a77390f" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" version = "0.0.1" +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" @@ -17,47 +26,99 @@ uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.4" +version = "0.7.8" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "5158c2b41018c5f7eb1470d558127ac274eca0c9" +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.1" +version = "0.9.5" [[deps.Documenter]] -deps = ["ANSIColoredPrinters", "Base64", "Dates", "DocStringExtensions", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"] -git-tree-sha1 = "6030186b00a38e9d0434518627426570aac2ef95" +deps = ["ANSIColoredPrinters", "AbstractTrees", "Base64", "CodecZlib", "Dates", "DocStringExtensions", "Downloads", "Git", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "MarkdownAST", "Pkg", "PrecompileTools", "REPL", "RegistryInstances", "SHA", "TOML", "Test", "Unicode"] +git-tree-sha1 = "b37458ae37d8bdb643d763451585cd8d0e5b4a9e" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "0.27.23" - -[[deps.DocumenterInventoryWritingBackport]] -deps = ["CodecZlib", "Documenter", "TOML"] -git-tree-sha1 = "1b89024e375353961bb98b9818b44a4e38961cc4" -uuid = "195adf08-069f-4855-af3e-8933a2cdae94" -version = "0.1.0" +version = "1.16.1" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.7.3+0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.Git]] +deps = ["Git_LFS_jll", "Git_jll", "JLLWrappers", "OpenSSH_jll"] +git-tree-sha1 = "824a1890086880696fc908fe12a17bcf61738bd8" +uuid = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" +version = "1.5.0" + +[[deps.Git_LFS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "bb8471f313ed941f299aa53d32a94ab3bee08844" +uuid = "020c3dae-16b3-5ae5-87b3-4cb189e250b2" +version = "3.7.0+0" + +[[deps.Git_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "b6a684587ebe896d9f68ae777f648205940f0f70" +uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" +version = "2.51.3+0" [[deps.IOCapture]] deps = ["Logging", "Random"] -git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" +git-tree-sha1 = "0ee181ec08df7d7c911901ea38baf16f755114dc" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.2" +version = "1.0.0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + [[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "5b6bb73f555bc753a6153deec3717b8904f5551c" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.3" +version = "1.3.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.LazilyInitializedFields]] +git-tree-sha1 = "0f2da712350b020bc3957f269c9caad516383ee0" +uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" +version = "1.3.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" [[deps.LibGit2]] deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] @@ -76,6 +137,12 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" @@ -83,23 +150,64 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +[[deps.MarkdownAST]] +deps = ["AbstractTrees", "Markdown"] +git-tree-sha1 = "465a70f0fc7d443a00dcdc3267a497397b8a3899" +uuid = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" +version = "0.1.2" + [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.2+1" -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" +[[deps.OpenSSH_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll"] +git-tree-sha1 = "301412a644646fdc0ad67d0a87487466b491e53d" +uuid = "9bd350c2-7e96-507f-8002-3f2e150b4e1b" +version = "10.2.1+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f19301ae653233bc88b1810ae908194f07f8db9d" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.4+0" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + [[deps.Parsers]] -deps = ["Dates"] -git-tree-sha1 = "3d5bf43e3e8b412656404ed9466f1dcbf7c50269" +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.4.0" +version = "2.8.3" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.0" [[deps.Printf]] deps = ["Unicode"] @@ -113,6 +221,12 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +[[deps.RegistryInstances]] +deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"] +git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51" +uuid = "2792f1a3-b283-48e8-9a74-f99dce5104f3" +version = "0.1.0" + [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" @@ -123,23 +237,42 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "79529b493a44927dd5b13dde1c7ce957c2d049e4" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.6.0" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" version = "1.0.3" +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.TranscodingStreams]] -git-tree-sha1 = "3caa21522e7efac1ba21834a03734c57b4611c7e" +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.4" -weakdeps = ["Random", "Test"] +version = "0.11.3" - [deps.TranscodingStreams.extensions] - TestExt = ["Test", "Random"] +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" @@ -148,3 +281,13 @@ uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.13+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" diff --git a/doc/Project.toml b/doc/Project.toml index 2f1addd369506..dfa65cd107d06 100644 --- a/doc/Project.toml +++ b/doc/Project.toml @@ -1,3 +1,2 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -DocumenterInventoryWritingBackport = "195adf08-069f-4855-af3e-8933a2cdae94" diff --git a/doc/make.jl b/doc/make.jl index 917c3989bc254..3d57a286263d1 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -8,7 +8,7 @@ using Pkg Pkg.instantiate() using Documenter -using DocumenterInventoryWritingBackport +import LibGit2 baremodule GenStdLib end @@ -43,6 +43,75 @@ cd(joinpath(@__DIR__, "src")) do end end +# Because we have standard libraries that are hosted outside of the julia repo, +# but their docs are included in the manual, we need to populate the remotes argument +# of makedocs(), to make sure that Documenter knows how to resolve the directories +# in stdlib/ to the correct remote Git repositories (for source and edit links). +# +# This function parses the *.version files in stdlib/, returning a dictionary with +# all the key-value pairs from those files. *_GIT_URL and *_SHA1 fields are the ones +# we will actually be interested in. +function parse_stdlib_version_file(path) + values = Dict{String,String}() + for line in readlines(path) + m = match(r"^([A-Z0-9_]+)\s+:?=\s+(\S+)$", line) + if isnothing(m) + @warn "Unable to parse line in $(path)" line + else + values[m[1]] = m[2] + end + end + return values +end +# This generates the value that will be passed to the `remotes` argument of makedocs(), +# by looking through all *.version files in stdlib/. +documenter_stdlib_remotes = let stdlib_dir = realpath(joinpath(@__DIR__, "..", "stdlib")) + # Get a list of all *.version files in stdlib/.. + version_files = filter(readdir(stdlib_dir)) do fname + isfile(joinpath(stdlib_dir, fname)) && endswith(fname, ".version") + end + # .. and then parse them, each becoming an entry for makedocs's remotes. + # The values for each are of the form path => (remote, sha1), where + # - path: the path to the stdlib package's root directory, i.e. "stdlib/$PACKAGE" + # - remote: a Documenter.Remote object, pointing to the Git repository where package is hosted + # - sha1: the SHA1 of the commit that is included with the current Julia version + remotes_list = map(version_files) do version_fname + package = match(r"(.+)\.version", version_fname)[1] + versionfile = parse_stdlib_version_file(joinpath(stdlib_dir, version_fname)) + # From the (all uppercase) $(package)_GIT_URL and $(package)_SHA1 fields, we'll determine + # the necessary information. If this logic happens to fail for some reason for any of the + # standard libraries, we'll crash the documentation build, so that it could be fixed. + remote = let git_url_key = "$(uppercase(package))_GIT_URL" + haskey(versionfile, git_url_key) || error("Missing $(git_url_key) in $version_fname") + m = match(LibGit2.GITHUB_REGEX, versionfile[git_url_key]) + isnothing(m) && error("Unable to parse $(git_url_key)='$(versionfile[git_url_key])' in $version_fname") + Documenter.Remotes.GitHub(m[2], m[3]) + end + package_sha = let sha_key = "$(uppercase(package))_SHA1" + haskey(versionfile, sha_key) || error("Missing $(sha_key) in $version_fname") + versionfile[sha_key] + end + # Construct the absolute (local) path to the stdlib package's root directory + package_root_dir = joinpath(stdlib_dir, "$(package)-$(package_sha)") + # Documenter needs package_root_dir to exist --- it's just a sanity check it does on the remotes= keyword. + # In normal (local) builds, this will be the case, since the Makefiles will have unpacked the standard + # libraries. However, on CI we do this thing where we actually build docs in a clean worktree, just + # unpacking the `usr/` directory from the main build, and the unpacked stdlibs will be missing, and this + # will cause Documenter to throw an error. However, we don't _actually_ need the source files of the standard + # libraries to be present, so we just generate empty root directories to satisfy the check in Documenter. + isdir(package_root_dir) || mkpath(package_root_dir) + package_root_dir => (remote, package_sha) + end + Dict( + # We also add the root of the repository to `remotes`, because we do not always build the docs in a + # checked out JuliaLang/julia repository. In particular, when building Julia from tarballs, there is no + # Git information available. And also the way the BuildKite CI is configured to check out the code means + # that in some circumstances the Git repository information is incorrect / no available via Git. + dirname(@__DIR__) => (Documenter.Remotes.GitHub("JuliaLang", "julia"), Base.GIT_VERSION_INFO.commit), + remotes_list... + ) +end + # Check if we are building a PDF const render_pdf = "pdf" in ARGS @@ -288,6 +357,8 @@ else collapselevel = 1, sidebar_sitename = false, ansicolor = true, + size_threshold = 800 * 2^10, # 800 KiB + size_threshold_warn = 200 * 2^10, # the manual has quite a few large pages, so we warn at 200+ KiB only ) end @@ -299,12 +370,12 @@ makedocs( doctest = ("doctest=fix" in ARGS) ? (:fix) : ("doctest=only" in ARGS) ? (:only) : ("doctest=true" in ARGS) ? true : false, linkcheck = "linkcheck=true" in ARGS, linkcheck_ignore = ["https://bugs.kde.org/show_bug.cgi?id=136779"], # fails to load from nanosoldier? - strict = true, checkdocs = :none, format = format, sitename = "The Julia Language", authors = "The Julia Project", pages = PAGES, + remotes = documenter_stdlib_remotes, ) # Update URLs to external stdlibs (JuliaLang/julia#43199) diff --git a/doc/src/devdocs/eval.md b/doc/src/devdocs/eval.md index 8f2fd68159676..21ec343f7f6be 100644 --- a/doc/src/devdocs/eval.md +++ b/doc/src/devdocs/eval.md @@ -62,25 +62,11 @@ The 10,000 foot view of the whole process is as follows: ## [Parsing](@id dev-parsing) -The Julia parser is a small lisp program written in femtolisp, the source-code for which is distributed -inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). - -The interface functions for this are primarily defined in [`jlfrontend.scm`](https://github.com/JuliaLang/julia/blob/master/src/jlfrontend.scm). -The code in [`ast.c`](https://github.com/JuliaLang/julia/blob/master/src/ast.c) handles this handoff -on the Julia side. - -The other relevant files at this stage are [`julia-parser.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm), -which handles tokenizing Julia code and turning it into an AST, and [`julia-syntax.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-syntax.scm), -which handles transforming complex AST representations into simpler, "lowered" AST representations -which are more suitable for analysis and execution. - -If you want to test the parser without re-building Julia in its entirety, you can run the frontend -on its own as follows: - - $ cd src - $ flisp/flisp - > (load "jlfrontend.scm") - > (jl-parse-file "") +By default, Julia uses [JuliaSyntax.jl](https://github.com/JuliaLang/JuliaSyntax.jl) to produce the +AST. Historically, it used a small lisp program written in femtolisp, the source-code for which is +distributed inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). +If the `JULIA_USE_FLISP_PARSER` environment variable is set to `1`, the old parser will be used +instead. ## [Macro Expansion](@id dev-macro-expansion) diff --git a/doc/src/manual/unicode-input.md b/doc/src/manual/unicode-input.md index 7539e75bb4f24..db1bd69c2e480 100644 --- a/doc/src/manual/unicode-input.md +++ b/doc/src/manual/unicode-input.md @@ -52,11 +52,12 @@ function fix_combining_chars(char) return cat == 6 || cat == 8 ? "$NBSP$char$NBSP" : "$char" end - function table_entries(completions, unicode_dict) - entries = [[ - "Code point(s)", "Character(s)", - "Tab completion sequence(s)", "Unicode name(s)" + entries = Any[Any[ + ["Code point(s)"], + ["Character(s)"], + ["Tab completion sequence(s)"], + ["Unicode name(s)"], ]] for (chars, inputs) in sort!(collect(completions), by = first) code_points, unicode_names, characters = String[], String[], String[] @@ -65,12 +66,21 @@ function table_entries(completions, unicode_dict) push!(unicode_names, get(unicode_dict, UInt32(char), "(No Unicode name)")) push!(characters, isempty(characters) ? fix_combining_chars(char) : "$char") end + inputs_md = [] + for (i, input) in enumerate(inputs) + i > 1 && push!(inputs_md, ", ") + push!(inputs_md, Markdown.Code("", input)) + end push!(entries, [ - join(code_points, " + "), join(characters), - join(inputs, ", "), join(unicode_names, " + ") + [join(code_points, " + ")], + [join(characters)], + inputs_md, + [join(unicode_names, " + ")], ]) end - return Markdown.Table(entries, [:l, :l, :l, :l]) + table = Markdown.Table(entries, [:l, :c, :l, :l]) + # We also need to wrap the Table in a Markdown.MD "document" + return Markdown.MD([table]) end table_entries( diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 7b3d80061413b..d0aec4c040405 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -115,6 +115,15 @@ void jl_get_llvm_gvs_impl(void *native_code, arraylist_t *gvs) memcpy(gvs->items, data->jl_value_to_llvm.data(), gvs->len * sizeof(void*)); } +extern "C" JL_DLLEXPORT_CODEGEN +void jl_get_llvm_gvs_globals_impl(void *native_code, arraylist_t *gvs) +{ + // map a memory location (jl_value_t or jl_binding_t) to a GlobalVariable + jl_native_code_desc_t *data = (jl_native_code_desc_t*)native_code; + arraylist_grow(gvs, data->jl_sysimg_gvars.size()); + memcpy(gvs->items, data->jl_sysimg_gvars.data(), gvs->len * sizeof(void*)); +} + extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_external_fns_impl(void *native_code, arraylist_t *external_fns) { diff --git a/src/cgutils.cpp b/src/cgutils.cpp index d560ad47ff7aa..5a509428f3847 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -638,13 +638,13 @@ static Value *emit_struct_gep(jl_codectx_t &ctx, Type *lty, Value *base, unsigne static Type *_julia_struct_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool llvmcall=false); -static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed) +static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool no_boxing) { // this function converts a Julia Type into the equivalent LLVM type if (isboxed) *isboxed = false; if (jt == (jl_value_t*)jl_bottom_type) return getVoidTy(ctxt); - if (jl_is_concrete_immutable(jt)) { + if (jl_is_concrete_immutable(jt) || no_boxing) { if (jl_datatype_nbits(jt) == 0) return getVoidTy(ctxt); Type *t = _julia_struct_to_llvm(ctx, ctxt, jt, isboxed); @@ -657,13 +657,20 @@ static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl static Type *julia_type_to_llvm(jl_codectx_t &ctx, jl_value_t *jt, bool *isboxed) { - return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed); + return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed, false); } extern "C" JL_DLLEXPORT_CODEGEN Type *jl_type_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) { - return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed); + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, false); +} + + +extern "C" JL_DLLEXPORT_CODEGEN +Type *jl_struct_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) +{ + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, true); } @@ -3086,6 +3093,7 @@ static void init_bits_value(jl_codectx_t &ctx, Value *newv, Value *v, MDNode *tb static void init_bits_cgval(jl_codectx_t &ctx, Value *newv, const jl_cgval_t& v, MDNode *tbaa) { // newv should already be tagged + newv = maybe_decay_tracked(ctx, newv); if (v.ispointer()) { emit_memcpy(ctx, newv, jl_aliasinfo_t::fromTBAA(ctx, tbaa), v, jl_datatype_size(v.typ), sizeof(void*)); } diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index b48ad7b98791f..1844387164231 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -14,6 +14,7 @@ JL_DLLEXPORT void jl_dump_native_fallback(void *native_code, const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname, ios_t *z, ios_t *s) UNAVAILABLE JL_DLLEXPORT void jl_get_llvm_gvs_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE +JL_DLLEXPORT void jl_get_llvm_gvs_globals_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE JL_DLLEXPORT void jl_get_llvm_external_fns_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE JL_DLLEXPORT void jl_extern_c_fallback(jl_function_t *f, jl_value_t *rt, jl_value_t *argt, char *name) UNAVAILABLE @@ -97,6 +98,8 @@ JL_DLLEXPORT LLVMOrcThreadSafeModuleRef jl_get_llvm_module_fallback(void *native JL_DLLEXPORT void *jl_type_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE +JL_DLLEXPORT void *jl_struct_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE + JL_DLLEXPORT jl_value_t *jl_get_libllvm_fallback(void) JL_NOTSAFEPOINT { return jl_nothing; diff --git a/src/codegen.cpp b/src/codegen.cpp index 20a6240a926d0..a7aeccfd79dcc 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6553,8 +6553,11 @@ static Function* gen_cfun_wrapper( ctx.builder.ClearInsertionPoint(); if (aliasname) { - GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), + auto alias = GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), GlobalValue::ExternalLinkage, aliasname, cw, M); + if(ctx.emission_context.TargetTriple.isOSBinFormatCOFF()) { + alias->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DLLExportStorageClass); + } } if (nest) { diff --git a/src/datatype.c b/src/datatype.c index b823f933b1376..b97f842c593f7 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -892,10 +892,14 @@ JL_DLLEXPORT int jl_reinit_foreign_type(jl_datatype_t *dt, const jl_datatype_layout_t *layout = dt->layout; jl_fielddescdyn_t * desc = (jl_fielddescdyn_t *) ((char *)layout + sizeof(*layout)); - assert(!desc->markfunc); - assert(!desc->sweepfunc); - desc->markfunc = markfunc; - desc->sweepfunc = sweepfunc; + if (desc->markfunc != markfunc) { + assert(!desc->markfunc); + desc->markfunc = markfunc; + } + if (desc->sweepfunc != sweepfunc) { + assert(!desc->sweepfunc); + desc->sweepfunc = sweepfunc; + } return 1; } diff --git a/src/gf.c b/src/gf.c index 1f87a3035076e..4dc87cf3bb183 100644 --- a/src/gf.c +++ b/src/gf.c @@ -112,7 +112,7 @@ static int8_t jl_cachearg_offset(jl_methtable_t *mt) static uint_t speccache_hash(size_t idx, jl_svec_t *data) { - jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); + jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); // This must always happen inside the lock jl_value_t *sig = ml->specTypes; if (jl_is_unionall(sig)) sig = jl_unwrap_unionall(sig); @@ -121,6 +121,8 @@ static uint_t speccache_hash(size_t idx, jl_svec_t *data) static int speccache_eq(size_t idx, const void *ty, jl_svec_t *data, uint_t hv) { + if (idx >= jl_svec_len(data)) + return 0; // We got a OOB access, probably due to a data race jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); jl_value_t *sig = ml->specTypes; if (ty == sig) diff --git a/src/interpreter.c b/src/interpreter.c index 570fda51a989b..0c33409c9701c 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -540,7 +540,7 @@ static jl_value_t *eval_body(jl_array_t *stmts, interpreter_state *s, size_t ip, } // store current top of exception stack for restore in pop_exception. s->locals[jl_source_nslots(s->src) + ip] = jl_box_ulong(jl_excstack_state()); - if (!jl_setjmp(__eh.eh_ctx, 1)) { + if (!jl_setjmp(__eh.eh_ctx, 0)) { return eval_body(stmts, s, next_ip, toplevel); } else if (s->continue_at) { // means we reached a :leave expression diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index ee255a0e1a876..aa8116117c430 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -539,6 +539,7 @@ YY(jl_get_LLVM_VERSION) \ YY(jl_dump_native) \ YY(jl_get_llvm_gvs) \ + YY(jl_get_llvm_gvs_globals) \ YY(jl_get_llvm_external_fns) \ YY(jl_dump_function_asm) \ YY(jl_LLVMCreateDisasm) \ @@ -558,6 +559,7 @@ YY(jl_dump_llvm_opt) \ YY(jl_dump_fptr_asm) \ YY(jl_get_function_id) \ + YY(jl_struct_to_llvm) \ YY(jl_type_to_llvm) \ YY(jl_getUnwindInfo) \ YY(jl_get_libllvm) \ diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index 756012b364b33..d98084c278b37 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -3905,7 +3905,10 @@ f(x) = yt(x) (val (if (equal? typ '(core Any)) val `(call (core typeassert) ,val - ,(cl-convert typ fname lam namemap defined toplevel interp opaq globals locals))))) + ,(let ((convt (cl-convert typ fname lam namemap defined toplevel interp opaq globals locals))) + (if (or (symbol-like? convt) (quoted? convt)) + convt + (renumber-assigned-ssavalues convt))))))) `(block ,@(if (eq? box access) '() `((= ,access ,box))) ,undefcheck diff --git a/src/julia_internal.h b/src/julia_internal.h index 45193782f009f..b2151785a5405 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -1687,6 +1687,7 @@ JL_DLLIMPORT void jl_dump_native(void *native_code, const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname, ios_t *z, ios_t *s); JL_DLLIMPORT void jl_get_llvm_gvs(void *native_code, arraylist_t *gvs); +JL_DLLIMPORT void jl_get_llvm_gvs_globals(void *native_code, arraylist_t *gvs); JL_DLLIMPORT void jl_get_llvm_external_fns(void *native_code, arraylist_t *gvs); JL_DLLIMPORT void jl_get_function_id(void *native_code, jl_code_instance_t *ncode, int32_t *func_idx, int32_t *specfunc_idx); diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp index f84cb6587cf9f..1a9d108fb15f5 100644 --- a/src/llvm-alloc-opt.cpp +++ b/src/llvm-alloc-opt.cpp @@ -659,6 +659,7 @@ void Optimizer::moveToStack(CallInst *orig_inst, size_t sz, bool has_ref) ptr = cast(prolog_builder.CreateBitCast(buff, Type::getInt8PtrTy(prolog_builder.getContext(), buff->getType()->getPointerAddressSpace()))); } insertLifetime(ptr, ConstantInt::get(Type::getInt64Ty(prolog_builder.getContext()), sz), orig_inst); + buff->copyMetadata(*orig_inst); Instruction *new_inst = cast(prolog_builder.CreateBitCast(ptr, JuliaType::get_pjlvalue_ty(prolog_builder.getContext(), buff->getType()->getPointerAddressSpace()))); new_inst->takeName(orig_inst); diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp index dc00f2332b477..157800e5b26a6 100644 --- a/src/llvm-multiversioning.cpp +++ b/src/llvm-multiversioning.cpp @@ -674,6 +674,7 @@ void CloneCtx::rewrite_alias(GlobalAlias *alias, Function *F) trampoline->removeFnAttr("julia.mv.reloc"); trampoline->removeFnAttr("julia.mv.clones"); trampoline->addFnAttr("julia.mv.alias"); + trampoline->setDLLStorageClass(alias->getDLLStorageClass()); alias->eraseFromParent(); uint32_t id; diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index 79975a5bde70a..55fc74c425b76 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1871,12 +1871,55 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); +auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + auto &features0 = image_targets[t.base].en.features; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + static constexpr uint32_t clone_fp16[] = {Feature::fp16fml,Feature::fullfp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; +#ifdef _CPU_ARM_ + static constexpr uint32_t clone_math[] = {Feature::vfp3, Feature::vfp4, Feature::neon}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + static constexpr uint32_t clone_simd[] = {Feature::neon}; + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } +#endif + } + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1896,6 +1939,8 @@ std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif + extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 603af8d56a3bb..6fe0e2f87b376 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -145,12 +145,26 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ extern "C" std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + t.en.flags |= JL_TARGET_CLONE_ALL; + } + if (image_targets.empty()) + jl_error("No image targets found"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { jl_target_spec_t ele; std::tie(ele.cpu_name, ele.cpu_features) = get_llvm_target_str(target); ele.data = serialize_target_data(target.name, target.en.features, @@ -161,6 +175,7 @@ extern "C" std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) { diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 57582121f29fe..03d7ae21145bb 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1095,13 +1095,74 @@ extern "C" JL_DLLEXPORT const std::pair &jl_get_llvm_di {feature_masks, 0}, {{}, 0}, 0}); return res; } - +#ifndef __clang_gcanalyzer__ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; + auto &features0 = image_targets[t.base].en.features; + // Special case for KNL/KNM since they're so different + if (!(t.dis.flags & JL_TARGET_CLONE_ALL)) { + if ((t.name == "knl" || t.name == "knm") && + image_targets[t.base].name != "knl" && image_targets[t.base].name != "knm") { + t.en.flags |= JL_TARGET_CLONE_ALL; + break; + } + } + static constexpr uint32_t clone_math[] = {Feature::fma, Feature::fma4}; + static constexpr uint32_t clone_simd[] = {Feature::sse3, Feature::ssse3, + Feature::sse41, Feature::sse42, + Feature::avx, Feature::avx2, + Feature::vaes, Feature::vpclmulqdq, + Feature::sse4a, Feature::avx512f, + Feature::avx512dq, Feature::avx512ifma, + Feature::avx512pf, Feature::avx512er, + Feature::avx512cd, Feature::avx512bw, + Feature::avx512vl, Feature::avx512vbmi, + Feature::avx512vpopcntdq, Feature::avxvnni, + Feature::avx512vbmi2, Feature::avx512vnni, + Feature::avx512bitalg, Feature::avx512bf16, + Feature::avx512vp2intersect, Feature::avx512fp16}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } + static constexpr uint32_t clone_fp16[] = {Feature::avx512fp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + } + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1121,6 +1182,7 @@ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets( } return res; } +#endif extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { diff --git a/src/task.c b/src/task.c index e14b4a3e74956..3faaf1a1b86be 100644 --- a/src/task.c +++ b/src/task.c @@ -234,10 +234,6 @@ static void NOINLINE save_stack(jl_ptls_t ptls, jl_task_t *lastt, jl_task_t **pt lastt->copy_stack = nb; lastt->sticky = 1; memcpy_stack_a16((uint64_t*)buf, (uint64_t*)frame_addr, nb); - // this task's stack could have been modified after - // it was marked by an incremental collection - // move the barrier back instead of walking it again here - jl_gc_wb_back(lastt); } JL_NO_ASAN static void NOINLINE JL_NORETURN restore_stack(jl_task_t *t, jl_ptls_t ptls, char *p) @@ -501,6 +497,12 @@ JL_NO_ASAN static void ctx_switch(jl_task_t *lastt) #endif *pt = NULL; // can't fail after here: clear the gc-root for the target task now } + // this task's stack or scope field could have been modified after + // it was marked by an incremental collection + // move the barrier back instead of walking the shadow stack again here to check if that is required + // even if killed (dropping the stack) and just the scope field matters, + // let the gc figure that out next time it does a quick mark + jl_gc_wb_back(lastt); // set up global state for new task and clear global state for old task t->ptls = ptls; @@ -1094,12 +1096,7 @@ JL_DLLEXPORT jl_task_t *jl_new_task(jl_function_t *start, jl_value_t *completion jl_timing_task_init(t); #ifdef COPY_STACKS - if (!t->copy_stack) { -#if defined(JL_DEBUG_BUILD) - memset(&t->ctx, 0, sizeof(t->ctx)); -#endif - } - else { + if (t->copy_stack) { if (always_copy_stacks) memcpy(&t->ctx.copy_ctx, &ct->ptls->copy_stack_ctx, sizeof(t->ctx.copy_ctx)); else diff --git a/stdlib/Dates/docs/src/index.md b/stdlib/Dates/docs/src/index.md index 17fad62864824..48ce896e9a67b 100644 --- a/stdlib/Dates/docs/src/index.md +++ b/stdlib/Dates/docs/src/index.md @@ -1,7 +1,3 @@ -```@meta -EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Dates/docs/src/index.md" -``` - # Dates ```@meta diff --git a/stdlib/Distributed/src/cluster.jl b/stdlib/Distributed/src/cluster.jl index 2444695f90afd..9467f8e798db1 100644 --- a/stdlib/Distributed/src/cluster.jl +++ b/stdlib/Distributed/src/cluster.jl @@ -1262,6 +1262,28 @@ function terminate_all_workers() end end +function choose_bind_addr() + # We prefer IPv4 over IPv6. + # + # We also prefer non-link-local over link-local. + # (This is because on HPC clusters, link-local addresses are usually not + # usable for communication between compute nodes. + # + # Therefore, our order of preference is: + # 1. Non-link-local IPv4 + # 2. Non-link-local IPv6 + # 3. Link-local IPv4 + # 4. Link-local IPv6 + addrs = getipaddrs() + i = something( + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv4, addrs), # first non-link-local IPv4 + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv6, addrs), # first non-link-local IPv6 + findfirst(ip -> ip isa IPv4, addrs), # first IPv4 + findfirst(ip -> ip isa IPv6, addrs), # first IPv6 + ) + return addrs[i] +end + # initialize the local proc network address / port function init_bind_addr() opts = JLOptions() @@ -1276,7 +1298,7 @@ function init_bind_addr() else bind_port = 0 try - bind_addr = string(getipaddr()) + bind_addr = string(choose_bind_addr()) catch # All networking is unavailable, initialize bind_addr to the loopback address # Will cause an exception to be raised only when used. diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 095227a827c5a..b69ffa3ebc952 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -97,7 +97,7 @@ See also: [`VERSION`](@ref). """ function versioninfo(io::IO=stdout; verbose::Bool=false) println(io, "Julia Version $VERSION") - if !isempty(Base.GIT_VERSION_INFO.commit_short) + if !isempty(Base.GIT_VERSION_INFO.commit_short_raw) println(io, "Commit $(Base.GIT_VERSION_INFO.commit_short) ($(Base.GIT_VERSION_INFO.date_string))") end official_release = Base.TAGGED_RELEASE_BANNER == "Official https://julialang.org/ release" @@ -115,7 +115,7 @@ function versioninfo(io::IO=stdout; verbose::Bool=false) Note: This is an unofficial build, please report bugs to the project responsible for this build and not to the Julia project unless you can - reproduce the issue using official builds available at https://julialang.org/downloads + reproduce the issue using official builds available at https://julialang.org """ ) end diff --git a/stdlib/LinearAlgebra/src/dense.jl b/stdlib/LinearAlgebra/src/dense.jl index 8d5a3e6ea8de2..287ac472866d8 100644 --- a/stdlib/LinearAlgebra/src/dense.jl +++ b/stdlib/LinearAlgebra/src/dense.jl @@ -1341,6 +1341,7 @@ This returns a `5×5 Bidiagonal{Float64}`, which can now be passed to other line (e.g. eigensolvers) which will use specialized methods for `Bidiagonal` types. """ function factorize(A::AbstractMatrix{T}) where T + require_one_based_indexing(A) m, n = size(A) if m == n if m == 1 return A[1] end @@ -1348,18 +1349,18 @@ function factorize(A::AbstractMatrix{T}) where T utri1 = true herm = true sym = true - for j = 1:n-1, i = j+1:m - if utri1 + for j = 1:n, i = j:m + if (j < n) && (i > j) && utri1 # indices are off-diagonal if A[i,j] != 0 utri1 = i == j + 1 utri = false end end if sym - sym &= A[i,j] == A[j,i] + sym &= A[i,j] == transpose(A[j,i]) end if herm - herm &= A[i,j] == conj(A[j,i]) + herm &= A[i,j] == adjoint(A[j,i]) end if !(utri1|herm|sym) break end end @@ -1372,7 +1373,7 @@ function factorize(A::AbstractMatrix{T}) where T if ltri1 for i = 1:n-1 if A[i,i+1] != 0 - ltri &= false + ltri = false break end end diff --git a/stdlib/LinearAlgebra/test/dense.jl b/stdlib/LinearAlgebra/test/dense.jl index ad887dd85a0d3..18fae1272cc19 100644 --- a/stdlib/LinearAlgebra/test/dense.jl +++ b/stdlib/LinearAlgebra/test/dense.jl @@ -1234,4 +1234,10 @@ Base.:+(x::TypeWithZero, ::TypeWithoutZero) = x @test diagm(0 => [TypeWithoutZero()]) isa Matrix{TypeWithZero} end +@testset "structure of dense matrices" begin + # A is neither triangular nor symmetric/Hermitian + A = [1 im 2; -im 0 3; 2 3 im] + @test factorize(A) isa LU{ComplexF64, Matrix{ComplexF64}, Vector{Int}} +end + end # module TestDense diff --git a/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index 65a8c4051f4e7..5956673623443 100644 --- a/stdlib/Logging/test/runtests.jl +++ b/stdlib/Logging/test/runtests.jl @@ -19,6 +19,13 @@ macro customlog(exs...) Base.CoreLogging.logmsg_code((Base.CoreLogging.@_sourcei @test :handle_message in names(Logging, all=true) # non-exported public function end +@testset "LogLevel compatibility with integers" begin + @test Logging.Debug + 1000 == Logging.Info + @test Logging.Warn - 1000 == Logging.Info + @test Logging.Info < 500 + @test 500 < Logging.Warn +end + @testset "ConsoleLogger" begin # First pass log limiting @test min_enabled_level(ConsoleLogger(devnull, Logging.Debug)) == Logging.Debug @@ -335,4 +342,47 @@ end end end +@testset "Logging when multithreaded" begin + n = 10000 + cmd = `$(Base.julia_cmd()) -t4 --color=no $(joinpath(@__DIR__, "threads_exec.jl")) $n` + fname = tempname() + @testset "Thread safety" begin + f = open(fname, "w") + @test success(run(pipeline(cmd, stderr=f))) + close(f) + end + + @testset "No tearing in log printing" begin + # Check for print tearing by verifying that each log entry starts and ends correctly + f = open(fname, "r") + entry_start = r"┌ (Info|Warning|Error): iteration" + entry_end = r"└ " + + open_entries = 0 + total_entries = 0 + for line in eachline(fname) + starts = count(entry_start, line) + starts > 1 && error("Interleaved logs: Multiple log entries started on one line") + if starts == 1 + startswith(line, entry_start) || error("Interleaved logs: Log entry started in the middle of a line") + open_entries += 1 + total_entries += 1 + end + + ends = count(entry_end, line) + starts == 1 && ends == 1 && error("Interleaved logs: Log entry started and and another ended on one line") + ends > 1 && error("Interleaved logs: Multiple log entries ended on one line") + if ends == 1 + startswith(line, entry_end) || error("Interleaved logs: Log entry ended in the middle of a line") + open_entries -= 1 + end + # Ensure no mismatched log entries + open_entries >= 0 || error("Interleaved logs") + end + + @test open_entries == 0 # Ensure all entries closed properly + @test total_entries == n * 3 # Ensure all logs were printed (3 because @debug is hidden) + end +end + end diff --git a/stdlib/Makefile b/stdlib/Makefile index e42061d593905..03e51b27e255b 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -15,6 +15,7 @@ include $(JULIAHOME)/deps/*.version VERSDIR := v$(shell cut -d. -f1-2 < $(JULIAHOME)/VERSION) DIRS := $(build_datarootdir)/julia/stdlib/$(VERSDIR) $(build_prefix)/manifest/$(VERSDIR) + $(foreach dir,$(DIRS),$(eval $(call dir_target,$(dir)))) JLLS = DSFMT GMP CURL LIBGIT2 LLVM LIBSSH2 LIBUV MBEDTLS MPFR NGHTTP2 \ @@ -60,8 +61,19 @@ $(foreach module, $(STDLIBS), $(eval $(call symlink_target,$$(JULIAHOME)/stdlib/ STDLIBS_LINK_TARGETS := $(addprefix $(build_datarootdir)/julia/stdlib/$(VERSDIR)/,$(STDLIBS)) +remove-gpl-libs: +ifeq ($(USE_GPL_LIBS),0) + @echo Removing GPL libs... + -rm -f $(build_private_libdir)/libcholmod* + -rm -f $(build_private_libdir)/libklu_cholmod* + -rm -f $(build_private_libdir)/librbio* + -rm -f $(build_private_libdir)/libspqr* + -rm -f $(build_private_libdir)/libumfpack* +endif + getall get: $(addprefix get-, $(STDLIBS_EXT) $(JLL_NAMES)) -install: version-check $(addprefix install-, $(STDLIBS_EXT) $(JLL_NAMES)) $(STDLIBS_LINK_TARGETS) + +install: version-check $(addprefix install-, $(STDLIBS_EXT) $(JLL_NAMES)) $(STDLIBS_LINK_TARGETS) remove-gpl-libs version-check: $(addprefix version-check-, $(STDLIBS_EXT)) uninstall: $(addprefix uninstall-, $(STDLIBS_EXT)) extstdlibclean: diff --git a/stdlib/MbedTLS_jll/Project.toml b/stdlib/MbedTLS_jll/Project.toml index 27d4884d099ad..1938c1315b154 100644 --- a/stdlib/MbedTLS_jll/Project.toml +++ b/stdlib/MbedTLS_jll/Project.toml @@ -1,6 +1,6 @@ name = "MbedTLS_jll" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" +version = "2.28.1010+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/MbedTLS_jll/test/runtests.jl b/stdlib/MbedTLS_jll/test/runtests.jl index 2d82fa564cd18..95b6f8e3fcc26 100644 --- a/stdlib/MbedTLS_jll/test/runtests.jl +++ b/stdlib/MbedTLS_jll/test/runtests.jl @@ -6,5 +6,7 @@ using Test, Libdl, MbedTLS_jll vstr = zeros(UInt8, 32) ccall((:mbedtls_version_get_string, libmbedcrypto), Cvoid, (Ref{UInt8},), vstr) vn = VersionNumber(unsafe_string(pointer(vstr))) - @test vn == v"2.28.2" + # The upstream version number is 2.28.10 + # Our JLL version number is 2.28.1010 + @test vn == v"2.28.10" end diff --git a/stdlib/MozillaCACerts_jll/Project.toml b/stdlib/MozillaCACerts_jll/Project.toml index cef860fda4acd..86bfebc18a411 100644 --- a/stdlib/MozillaCACerts_jll/Project.toml +++ b/stdlib/MozillaCACerts_jll/Project.toml @@ -1,6 +1,6 @@ name = "MozillaCACerts_jll" uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.01.10" +version = "2025.12.02" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index 92d68acd099f6..921d5931e1ce8 100644 --- a/stdlib/OpenBLAS_jll/Project.toml +++ b/stdlib/OpenBLAS_jll/Project.toml @@ -1,6 +1,6 @@ name = "OpenBLAS_jll" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.23+5" [deps] # See note in `src/OpenBLAS_jll.jl` about this dependency. diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 3493cfc5e2bd9..02cb9abf1282a 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -223,7 +223,8 @@ struct Error <: Result end if test_type === :test_error || test_type === :nontest_error bt_str = try # try the latest world for this, since we might have eval'd new code for show - Base.invokelatest(sprint, Base.show_exception_stack, bt; context=stdout) + # Apply REPL backtrace scrubbing to hide REPL internals, similar to how REPL.jl handles it + Base.invokelatest(sprint, Base.show_exception_stack, Base.scrub_repl_backtrace(bt); context=stdout) catch ex "#=ERROR showing exception stack=# " * try @@ -1488,6 +1489,10 @@ end trigger_test_failure_break(@nospecialize(err)) = ccall(:jl_test_failure_breakpoint, Cvoid, (Any,), err) +is_failfast_error(err::FailFastError) = true +is_failfast_error(err::LoadError) = is_failfast_error(err.error) # handle `include` barrier +is_failfast_error(err) = false + """ Generate the code for an `@testset` with a `let` argument. """ @@ -1581,7 +1586,7 @@ function testset_beginend_call(args, tests, source) # something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if err isa FailFastError + if is_failfast_error(err) get_testset_depth() > 1 ? rethrow() : failfast_print() else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) @@ -1672,7 +1677,9 @@ function testset_forloop(args, testloop, source) # Something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if !isa(err, FailFastError) + if is_failfast_error(err) + get_testset_depth() > 1 ? rethrow() : failfast_print() + else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) end end diff --git a/stdlib/Test/test/runtests.jl b/stdlib/Test/test/runtests.jl index 0388e2107e098..36020719bf62e 100644 --- a/stdlib/Test/test/runtests.jl +++ b/stdlib/Test/test/runtests.jl @@ -1296,7 +1296,7 @@ end @test occursin(expected, result) end end - @testset "failfast" begin + @testset "failfast begin-end" begin expected = r""" Test Summary: | Fail Total Time Foo | 1 1 \s*\d*.\ds @@ -1321,6 +1321,32 @@ end @test occursin(expected, result) end end + @testset "failfast for-loop" begin + expected = r""" + Test Summary: \| Fail Total +Time + Foo \| 1 1 \s*\d*\.\ds + 1 \| 1 1 \s*\d*\.\ds + """ + mktemp() do f, _ + write(f, + """ + using Test + + @testset "Foo" failfast=true begin + @testset "\$x" for x in 1:2 + @test false + end + @testset "Bar" begin + @test false + @test true + end + end + """) + cmd = `$(Base.julia_cmd()) --startup-file=no --color=no $f` + result = read(pipeline(ignorestatus(cmd), stderr=devnull), String) + @test occursin(expected, result) + end + end @testset "failfast passes to child testsets" begin expected = r""" Test Summary: | Fail Total Time diff --git a/test/abstractarray.jl b/test/abstractarray.jl index e7469a7a331ed..aa3e4a2e7c9cb 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -855,6 +855,26 @@ generic_map_tests(map, map!) # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) end +@testset "#30624" begin + ### unstructured + @test map!(+, ones(3), ones(3), ones(3), [1]) == [3, 1, 1] + @test map!(+, ones(3), [1], ones(3), ones(3)) == [3, 1, 1] + @test map!(+, [1], [1], [], []) == [1] + @test map!(+, [[1]], [1], [], []) == [[1]] + + # TODO: decide if input axes & lengths should be validated + # @test_throws BoundsError map!(+, ones(1), ones(2)) + # @test_throws BoundsError map!(+, ones(1), ones(2, 2)) + + @test map!(+, ones(3), view(ones(2, 3), 1:2, 2:3), ones(3)) == [2, 2, 2] + @test map!(+, ones(3), ones(2, 2), ones(3)) == [2, 2, 2] + + ### structured (all mapped arguments are <:AbstractArray equal ndims > 1) + @test map!(+, ones(4), ones(2, 2), ones(2, 2)) == [2, 2, 2, 2] + @test map!(+, ones(4), ones(2, 2), ones(1, 2)) == [2, 2, 1, 1] + # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) +end + test_UInt_indexing(TestAbstractArray) test_13315(TestAbstractArray) test_checksquare() diff --git a/test/download_exec.jl b/test/download_exec.jl index 777fb6773c463..93af540dd70a1 100644 --- a/test/download_exec.jl +++ b/test/download_exec.jl @@ -5,22 +5,31 @@ module TestDownload using Test mktempdir() do temp_dir + url = try + download("https://httpbingo.julialang.org") + "https://httpbingo.julialang.org" + catch ex + bt = catch_backtrace() + @info "Looks like there is a problem with a JuliaLang mirror of httpbingo" + @info "Trying httpbin" exception=(ex,bt) + "https://httpbin.julialang.org/" + end # Download a file file = joinpath(temp_dir, "ip") - @test download("https://httpbin.julialang.org/ip", file) == file + @test download("$url/ip", file) == file @test isfile(file) @test !isempty(read(file)) ip = read(file, String) # Download an empty file empty_file = joinpath(temp_dir, "empty") - @test download("https://httpbin.julialang.org/status/200", empty_file) == empty_file + @test download("$url/status/200", empty_file) == empty_file @test isfile(empty_file) @test isempty(read(empty_file)) # Make sure that failed downloads do not leave files around missing_file = joinpath(temp_dir, "missing") - @test_throws Exception download("https://httpbin.julialang.org/status/404", missing_file) + @test_throws Exception download("$url/status/404", missing_file) @test !isfile(missing_file) # Use a TEST-NET (192.0.2.0/24) address which shouldn't be bound diff --git a/test/intfuncs.jl b/test/intfuncs.jl index 1cc6705812927..6f69e830ae39b 100644 --- a/test/intfuncs.jl +++ b/test/intfuncs.jl @@ -275,6 +275,9 @@ end @test powermod(2, big(3), -5) == -2 @inferred powermod(2, -2, -5) @inferred powermod(big(2), -2, UInt(5)) + + @test powermod(-3, 0x80, 7) === 2 + @test powermod(0x03, 0x80, 0x07) === 0x02 end @testset "nextpow/prevpow" begin diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 3c49afe2c4d7e..9f88d40b8ac32 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -361,3 +361,16 @@ Base.show(io::IO, a::IntWrap) = print(io, "IntWrap(", a.x, ")") @test r2 isa IntWrap && r2.x === 103 === r[].x && r2 !== r[] end end)() + +@testset "issue #54548" begin + @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" + define i8 addrspace(1)* @entry(i8 addrspace(1)* %0) #0 { + entry: + ret i8 addrspace(1)* %0 + } + + attributes #0 = { alwaysinline }""", "entry"), + Core.LLVMPtr{T,A}, Tuple{Core.LLVMPtr{T,A}}, ptr) + f(gws) = passthrough(Core.bitcast(Core.LLVMPtr{UInt32,1}, gws)) + f(C_NULL) +end diff --git a/test/loading.jl b/test/loading.jl index 3e2e88566f6a8..f60f457ef686b 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1270,12 +1270,21 @@ end mktempdir() do depot # This manifest has a LibGit2 entry that is missing LibGit2_jll, which should be # handled by falling back to the stdlib Project.toml for dependency truth. - badmanifest_test_dir = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps.jl") + badmanifest_test_dir = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps") @test success(addenv( `$(Base.julia_cmd()) --project=$badmanifest_test_dir --startup-file=no -e 'using LibGit2'`, "JULIA_DEPOT_PATH" => depot * Base.Filesystem.pathsep(), )) end + mktempdir() do depot + # This manifest has a LibGit2 entry that has a LibGit2_jll with a git-tree-hash1 + # which simulates an old manifest where LibGit2_jll was not a stdlib + badmanifest_test_dir2 = joinpath(@__DIR__, "project", "deps", "BadStdlibDeps2") + @test success(addenv( + `$(Base.julia_cmd()) --project=$badmanifest_test_dir2 --startup-file=no -e 'using LibGit2'`, + "JULIA_DEPOT_PATH" => depot * Base.Filesystem.pathsep(), + )) + end end @testset "extension path computation name collision" begin diff --git a/test/math.jl b/test/math.jl index bd00f3417ecd3..146aab2cefd00 100644 --- a/test/math.jl +++ b/test/math.jl @@ -1463,6 +1463,14 @@ end end end +@testset "special function `::Real` fallback shouldn't recur without bound, issue #57789" begin + mutable struct Issue57789 <: Real end + Base.float(::Issue57789) = Issue57789() + for f ∈ (sin, sinpi, log, exp) + @test_throws MethodError f(Issue57789()) + end +end + # Test that sqrt behaves correctly and doesn't exhibit fp80 double rounding. # This happened on old glibc versions. # Test case from https://sourceware.org/bugzilla/show_bug.cgi?id=14032. diff --git a/test/precompile.jl b/test/precompile.jl index ac155bb5d7af2..178d8d0f6057f 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -590,7 +590,10 @@ precompile_test_harness(false) do dir error("the \"break me\" test failed") catch exc isa(exc, ErrorException) || rethrow() - occursin("ERROR: LoadError: break me", exc.msg) && rethrow() + # The LoadError shouldn't be surfaced but is printed to stderr, hence the `@test_warn` capture tests + occursin("LoadError: break me", exc.msg) && rethrow() + # The actual error that is thrown + occursin("Failed to precompile FooBar2", exc.msg) || rethrow() end # Test that trying to eval into closed modules during precompilation is an error diff --git a/test/project/deps/BadStdlibDeps2/Manifest.toml b/test/project/deps/BadStdlibDeps2/Manifest.toml new file mode 100644 index 0000000000000..988efc8da56f3 --- /dev/null +++ b/test/project/deps/BadStdlibDeps2/Manifest.toml @@ -0,0 +1,54 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.0-DEV" +manifest_format = "2.0" +project_hash = "dc9d33b0ee13d9466bdb75b8d375808a534a79ec" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.LibGit2]] +deps = ["NetworkOptions", "Printf", "SHA", "LibGit2_jll"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +# This is an stdlib but intentionally has a git-tree-sha1 because +# we are emulating that the manifest comes from a version where +# LibGit2_jll was not an stdlib +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +git-tree-sha1 = "1111111111111111111111111111111111111111" +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.8.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.6+1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" diff --git a/test/project/deps/BadStdlibDeps2/Project.toml b/test/project/deps/BadStdlibDeps2/Project.toml new file mode 100644 index 0000000000000..223889185ea15 --- /dev/null +++ b/test/project/deps/BadStdlibDeps2/Project.toml @@ -0,0 +1,2 @@ +[deps] +LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" diff --git a/test/strings/basic.jl b/test/strings/basic.jl index e7c65909fabc9..87e4e0b127119 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -1073,6 +1073,7 @@ let s = "∀x∃y", u = codeunits(s) @test_throws Base.CanonicalIndexError (u[1] = 0x00) @test collect(u) == b"∀x∃y" @test Base.elsize(u) == Base.elsize(typeof(u)) == 1 + @test similar(typeof(u), 3) isa Vector{UInt8} end # issue #24388 diff --git a/test/syntax.jl b/test/syntax.jl index e529e0f292df1..839e129b1bded 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -3564,3 +3564,13 @@ let x = 1 => 2 @test_throws ErrorException @eval a => b = 2 @test_throws "function Base.=> must be explicitly imported to be extended" @eval a => b = 2 end + +# issue #45494 +begin + local b::Tuple{<:Any} = (0,) + function f45494() + b = b + b + end +end +@test f45494() === (0,)