From 7a28ad5aeb681e7631b360e2998aa998192d1601 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Thu, 3 Jul 2025 12:11:43 -0300 Subject: [PATCH 01/57] Actually setup jit targets when compiling packageimages instead of targeting only one (#54471) (cherry picked from commit 859353d2906affbc848d18a63157c9f602a5e4e4) --- src/codegen.cpp | 5 ++- src/llvm-multiversioning.cpp | 1 + src/processor_arm.cpp | 51 ++++++++++++++++++++++-- src/processor_fallback.cpp | 21 ++++++++-- src/processor_x86.cpp | 77 ++++++++++++++++++++++++++++++++++-- 5 files changed, 144 insertions(+), 11 deletions(-) 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/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..307e92e0ef51c 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1095,13 +1095,81 @@ 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; + } + } + static constexpr uint32_t clone_bf16[] = {Feature::avx512bf16}; + for (auto fe: clone_bf16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_BFLOAT16; + 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 +1189,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) { From c96d507050d07fb0c51fc5813dd3afdbad56611f Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Tue, 8 Jul 2025 18:50:35 -0400 Subject: [PATCH 02/57] `[backports-release-1.10]`: Distributed: Worker: Bind to the first non-link-local IPv4 address (#58895) This is a manual backport of https://github.com/JuliaLang/Distributed.jl/pull/137 to Julia 1.10.x. Targets `backports-release-1.10` (#58889). This is a bugfix, and thus it is eligible to be backported. --- stdlib/Distributed/src/cluster.jl | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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. From 2a53722afdddf0d48a3b02c0fc9ecd9e717220f3 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 22 May 2024 20:50:33 +0200 Subject: [PATCH 03/57] Fixes for bitcast bugs with LLVM 17 / opaque pointers (#54548) Skip setName on folded inputs, and ensure the correct pointer address space is used. (cherry picked from commit baca8baea0e62f06530a9640153d793a69eba7f7) --- test/intrinsics.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 3c49afe2c4d7e..81b99a3af5ccd 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 ptr addrspace(1) @entry(ptr addrspace(1) %0) #0 { + entry: + ret ptr 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 From 54e11198d5505ecc723725985d5c8c32b6def21d Mon Sep 17 00:00:00 2001 From: Kiran Pamnany Date: Mon, 17 Jun 2024 21:48:49 -0400 Subject: [PATCH 04/57] Add boundscheck in speccache_eq to avoid OOB access due to data race (#54840) Like https://github.com/JuliaLang/julia/pull/54671, but for `speccache_eq`. Saw another segfault with this in the stack trace, hence this fix. I also looked for other uses of `jl_smallintset_lookup` and there's one in `idset.c`. That doesn't appear to be racy but I'm not familiar with the code, so maybe you can take a look at it in case we need to push a fix for that one too @gbaraldi or @vtjnash? (cherry picked from commit dd1ed17ae3c2e4e257f2444bbafd705326b4bbbd) --- src/gf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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) From 19983643382534a4699217321a56f8f9c2d3997b Mon Sep 17 00:00:00 2001 From: Neven Sajko <4944410+nsajko@users.noreply.github.com> Date: Mon, 17 Mar 2025 06:05:16 +0100 Subject: [PATCH 05/57] fix special function `::Real` fallback stack overflow (#57790) Fixes #57789 (cherry picked from commit 6817691ecbba3e2a687348c085af1c3d76f020fe) --- test/math.jl | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 9c892c69415abf6cb7736484361ef2cddffba444 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 4 Apr 2025 09:30:32 -0400 Subject: [PATCH 06/57] Logging: Improve threadsafety (#57591) Closes https://github.com/JuliaLang/julia/issues/57376 Closes https://github.com/JuliaLang/julia/issues/34037 - Adds a lock in `SimpleLogger` and `ConsoleLogger` for use on maxlog tracking and stream writes to improve threadsafety. Closely similar to https://github.com/JuliaLang/julia/pull/54497 - Turns the internal `_min_enabled_level` into a `Threads.Atomic`. There are [some direct interactions](https://juliahub.com/ui/Search?type=code&q=_min_enabled_level&w=true) to this internal in the ecosystem, but they should still work ``` julia> Base.CoreLogging._min_enabled_level[] = Logging.Info+1 LogLevel(1) ``` - Brings tests over from https://github.com/JuliaLang/julia/pull/57448 Performance seems highly similar: ### Master ``` julia> @time for i in 1:10000 @info "foo" maxlog=10000000 end [ Info: foo ... 0.481446 seconds (1.33 M allocations: 89.226 MiB, 0.49% gc time) ``` ### This PR ``` 0.477235 seconds (1.31 M allocations: 79.002 MiB, 1.77% gc time) ``` (cherry picked from commit 9af96508e9715e22154fc7b5a7283ad41d23765a) --- stdlib/Logging/test/runtests.jl | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index 65a8c4051f4e7..fc239ee9068d1 100644 --- a/stdlib/Logging/test/runtests.jl +++ b/stdlib/Logging/test/runtests.jl @@ -335,4 +335,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 From 7ac9a80c1b58c13d42fc65d63bf2351e1d68d91c Mon Sep 17 00:00:00 2001 From: adienes <51664769+adienes@users.noreply.github.com> Date: Sat, 19 Apr 2025 09:05:09 -0400 Subject: [PATCH 07/57] Switch from segfault to `zip` behavior for mismatched indices in `map!` (#56673) (cherry picked from commit 0947114d9d443e14c751ac40c9b2d8c2245d045e) --- test/abstractarray.jl | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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() From 029abadd5c6141e97efd0e118b3f4cf285ca324a Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 6 May 2025 06:08:40 -0300 Subject: [PATCH 08/57] Fix removal of globals with addrspaces in removeAddrspaces (#58322) (cherry picked from commit 088bb9002e95631738c8ec5ba58b7b8a7b33019d) --- test/llvmpasses/remove-addrspaces.ll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/llvmpasses/remove-addrspaces.ll b/test/llvmpasses/remove-addrspaces.ll index d0e77e4a5d7ae..4bdc8409a244e 100644 --- a/test/llvmpasses/remove-addrspaces.ll +++ b/test/llvmpasses/remove-addrspaces.ll @@ -3,6 +3,9 @@ ; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -RemoveJuliaAddrspaces -S %s | FileCheck %s --check-prefixes=CHECK,TYPED ; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='RemoveJuliaAddrspaces' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED +; COM: check that the addrspace of the global itself is removed +; OPAQUE: @ejl_enz_runtime_exc = external global {} +@ejl_enz_runtime_exc = external addrspace(10) global {} ; COM: check that the addrspace of the global itself is removed ; OPAQUE: @ejl_enz_runtime_exc = external global {} @@ -131,6 +134,13 @@ L6: unreachable } +define private fastcc void @diffejulia__mapreduce_97() { +L6: +; OPAQUE: store atomic ptr @ejl_enz_runtime_exc, ptr null unordered + store atomic {} addrspace(10)* @ejl_enz_runtime_exc, {} addrspace(10)* addrspace(10)* null unordered, align 8 + unreachable +} + ; COM: check that function attributes are preserved on declarations too declare void @convergent_function() #0 attributes #0 = { convergent } From f507ecbf90ec326e0e29675adc66704fb78a2813 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 5 Jun 2025 08:49:12 -0400 Subject: [PATCH 09/57] Update install link in warning (#58638) (cherry picked from commit f5e983eafe6c879027217808a29a9c12bb27f5af) --- stdlib/InteractiveUtils/src/InteractiveUtils.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 095227a827c5a..17f32fa0df2a9 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -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 From 623884c0409ba5e6d8cef1a3cddb2490da9e3e41 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Tue, 10 Jun 2025 00:27:37 -0400 Subject: [PATCH 10/57] Unicode: Force-inline isgraphemebreak! (#58674) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When this API was added, this function inlined, which is important, because the API relies on the allocation of the `Ref` being elided. At some point (I went back to 1.8) this regressed. For example, it is currently responsible for substantially all non-Expr allocations in JuliaParser. Before (parsing all of Base with JuliaParser): ``` │ Memory estimate: 76.93 MiB, allocs estimate: 719922. ``` After: ``` │ Memory estimate: 53.31 MiB, allocs estimate: 156. ``` Also add a test to make sure this doesn't regress again. (cherry picked from commit d6294ba973db1dea9dc932779008fd66d27c4bd2) --- base/strings/unicode.jl | 2 +- stdlib/Unicode/test/runtests.jl | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) 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/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 5248bd1e1fd27..50468e868243c 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -284,6 +284,8 @@ end @test_throws BoundsError graphemes("äöüx", 2:5) @test_throws BoundsError graphemes("äöüx", 5:5) @test_throws ArgumentError graphemes("äöüx", 0:1) + + @test @allocated(length(graphemes("äöüx"))) == 0 end @testset "#3721, #6939 up-to-date character widths" begin From 6f3d23ee28c6c5088fad1ece9843423cb6916b6f Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 11 Jun 2025 01:14:38 -0400 Subject: [PATCH 11/57] Test: Fix failfast for for loops (#58695) (cherry picked from commit 8567a3a10f4b746b91bf406bfe3171c3399aed8d) --- stdlib/Test/src/Test.jl | 10 ++++++++-- stdlib/Test/test/runtests.jl | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 3493cfc5e2bd9..9767a536edd20 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -1488,6 +1488,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 +1585,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 +1676,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 From 8cf61582e76491bc88a39c880624e62f64a2239d Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 20 Jun 2025 12:39:54 -0400 Subject: [PATCH 12/57] Test: Hide REPL internals in backtraces (#58732) (cherry picked from commit 7b6065e9f25bca60f5ed21532a0163d760a7dbf8) --- stdlib/Test/src/Test.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 9767a536edd20..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 From 3104bec025c12d0993578090e9bd6df8cffb617c Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Wed, 2 Jul 2025 10:46:19 -0700 Subject: [PATCH 13/57] Add a `similar` method for `Type{<:CodeUnits}` (#57826) Currently, `similar(::CodeUnits)` works as expected by going through the generic `AbstractArray` method. However, the fallback method hit by `similar(::Type{<:CodeUnits}, dims)` does not work, as it assumes the existence of a constructor that accepts an `UndefInitializer`. This can be made to work by defining a corresponding `similar` method that returns an `Array`. One could make a case that this is a bugfix since it was arguably a bug that this method didn't work given that `CodeUnits` is an `AbstractArray` subtype and the other `similar` methods work. If anybody buys that argument, it could be nice to backport this; it came up in some internal code that uses Arrow.jl and JSON3.jl together. (cherry picked from commit 8e524c73804a9615dd68011b2c5741947d19bbb6) --- base/strings/basic.jl | 2 ++ test/strings/basic.jl | 1 + 2 files changed, 3 insertions(+) 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/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 From ed63f5a549f7d7cfc4a7ae1909254e2ddc157e6c Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 9 Jul 2025 16:48:45 -0400 Subject: [PATCH 14/57] Fix nthreadpools size in JLOptions (#58937) (cherry picked from commit 2349f431b1d0f97f3f06f8adc5d335b89d5f061c) --- base/options.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 03b53d3e1adf95bac446be8fb284e934d671b129 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 31 Jul 2025 19:58:09 -0400 Subject: [PATCH 15/57] Clarify and enhance confusing precompile test (#59170) (cherry picked from commit 1f6eff183db0b947632f780b4acc440d9c41a6e2) --- test/precompile.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 From 951d5655a93006ea367834348953b1f65da7ae2a Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Tue, 19 Aug 2025 17:12:06 -0400 Subject: [PATCH 16/57] Update the developer docs to reflect the use of JuliaSyntax.jl (#59300) [The "parsing" section of the "eval" dev docs page](https://docs.julialang.org/en/v1/devdocs/eval/#dev-parsing) was not updated when JuliaSyntax.jl was adopted in 1.10. This updates the text to reflect that it is the default parser and briefly mentions how to switch back. (cherry picked from commit ec272746d5e31d8c49ce079b6dc7177f1104eb14) --- doc/src/devdocs/eval.md | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) 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) From 3fffb598b5d6bebb8af6f2776c0f3c634c184dfc Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Fri, 22 Aug 2025 13:16:50 +0100 Subject: [PATCH 17/57] [backports-release-1.10] Remove bfloat16 condition accidentally backported (#59351) This BFloat16 part was backported to 1.10 as part of https://github.com/JuliaLang/julia/pull/54471, but 1.10 doesn't actually have the BFloat16 support that this goes along with, and it has broken the build. So remove the condition. cc @gbaraldi --- src/processor_x86.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 307e92e0ef51c..03d7ae21145bb 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1158,13 +1158,6 @@ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets( break; } } - static constexpr uint32_t clone_bf16[] = {Feature::avx512bf16}; - for (auto fe: clone_bf16) { - if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { - t.en.flags |= JL_TARGET_CLONE_BFLOAT16; - break; - } - } } if (image_targets.empty()) jl_error("No targets specified"); From 1a3c229c53a74c7c70935519581a4e1092927178 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Fri, 12 Sep 2025 22:31:44 +0100 Subject: [PATCH 18/57] [OpenBLAS_jll] Include patches to fix CASUM in 1.10 (#59346) This updates 1.10 to contain two new OpenBLAS patches that come from upstream (they are included in newer OpenBLAS versions already). Specifically the patches do: * Use AVX512 kernels on modern processors * Fix incorrect CASUM computation in fallback kernel This fixes the reported linear algebra issue: https://github.com/JuliaLang/LinearAlgebra.jl/issues/1406. I believe I updated all the checksums/files to make this work, specifically I did * Updated version number in `stdlib/OpenBLAS_jll/Project.toml` * Updated version number and sha in `deps/openblas.version` * Refresh checksums by running` make -f contrib/refresh_checksums.mk -j openblas` cc @giordano, @ViralBShah --- deps/checksums/openblas | 186 +++++++++--------- deps/openblas.mk | 12 +- deps/patches/openblas-asum-avx512.patch | 68 +++++++ .../patches/openblas-casum-fallback-fix.patch | 79 ++++++++ stdlib/OpenBLAS_jll/Project.toml | 2 +- 5 files changed, 252 insertions(+), 95 deletions(-) create mode 100644 deps/patches/openblas-asum-avx512.patch create mode 100644 deps/patches/openblas-casum-fallback-fix.patch 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/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/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/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. From 37d1127e4adffb6845786053ae3e768c1ed17232 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 29 May 2025 14:35:34 -0400 Subject: [PATCH 19/57] remove workaround for controlling terminal behavior in repl_cmd (#58554) This was originally added as a workaround for the behavior of sh to try to become the terminal process group leader, but no longer relevant since #25006 removed that flag again: ``` julia> run(detach(`bash -i -c "sleep 0"`)) bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell Process(`bash -i -c 'sleep 0'`, ProcessExited(0)) ``` Long explanation: Julia recieves SIGTTOU when a process like "sh -i -c" exits (at least for bash and zsh, but not dash, ksh, or csh), since "sh -i" sometimes takes over the controlling terminal, causing julia to stop once the bash process exits. This can be quite annoying, but julia goes through some pains (in libuv) to ensure it doesn't steal the controlling terminal from the parent, and apparently bash is not so careful about it. However, since PR #25006, julia hasn't needed this workaround for this issue, so we can now follow the intended behavior when the child is in the same session group and steals the controlling terminal from the parent. Even if such behavior seems odd, this seems to be the intended behavior per posix design implementation that it gets SIGTTOU when julia later tries to change mode (from cooked -> raw after printing the prompt): http://curiousthing.org/sigttin-sigttou-deep-dive-linux. For some background on why this is a useful signal and behavior and should not be just blocked, see nodejs/node#35536. According to glibc, there's a half page of code for how to correctly implement a REPL mode change call: https://www.gnu.org/software/libc/manual/html_node/Initializing-the-Shell.html ``` $ ./julia -q shell> bash -i -c "sleep 1" [1]+ Stopped ./julia julia> run(`zsh -i -c "sleep 0"`) Process(`zsh -i -c 'sleep 0'`, ProcessExited(0)) julia> [1]+ Stopped ./julia ``` (cherry picked from commit 0cbe4669079249e3d8ff48688b45ed3b39db20d5) --- base/client.jl | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) 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) From 0269d45f97355e34c2b767f6be5220c7e2e6dbec Mon Sep 17 00:00:00 2001 From: Neven Sajko <4944410+nsajko@users.noreply.github.com> Date: Thu, 21 Aug 2025 09:25:38 +0200 Subject: [PATCH 20/57] `@nospecialize` for `string_index_err` (#57604) The fields of `StringIndexError` are abstractly typed, so there's no reason to specialize on a concrete type. The change seems like it could prevent some invalidation on loading user code. --------- Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit bc33a3e354ac2de1ae1138b55947665278e7e2e8) --- base/strings/string.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From ed38aed5d1a0865b90d29efe66180ef98fa2c305 Mon Sep 17 00:00:00 2001 From: William Moses Date: Fri, 5 Sep 2025 12:37:22 -0400 Subject: [PATCH 21/57] Enable getting non-boxed LLVM type from Julia Type (#56890) The current method :jl_type_to_llvm takes a pointer-to-bool parameter isboxed, which if non-null, is set to true if the Julia Type requires boxing. However, one may want to know the julia type without boxing and there is no mechanism for doing so. Now there is `julia_struct_to_llvm`. (cherry picked from commit 85f1b8c9d5defbe7f0368cc5f5a3049bdec1a7ce) --- src/cgutils.cpp | 15 +++++++++++---- src/codegen-stubs.c | 2 ++ src/jl_exported_funcs.inc | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index d560ad47ff7aa..26b87b4d4631d 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); } diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index b48ad7b98791f..26cf9229b6416 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -97,6 +97,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/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index ee255a0e1a876..c63f3de48a1fd 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -558,6 +558,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) \ From d269b23f37ed9e1d2f524be47a5f49de046f09e7 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 9 Sep 2025 17:08:28 -0300 Subject: [PATCH 22/57] [backports-release-1.11] Don't forget to decay value on struct initialization (#59511) Fixes https://github.com/JuliaLang/julia/issues/59510 (cherry picked from commit 8230e8bbf5c229084a6738729f5629b5fc950f0f) --- src/cgutils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 26b87b4d4631d..5a509428f3847 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -3093,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*)); } From 0741bfe3bd625a51b362356093c5ac59afc5b486 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 14 Sep 2025 14:43:12 -0400 Subject: [PATCH 23/57] Fix intrinsics test on 1.10 backports branch The test on master uses opaque pointers which older LLVM versions don't support. Co-authored-by: Simeon David Schaub --- test/intrinsics.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 81b99a3af5ccd..7db7c36e61487 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -364,9 +364,9 @@ end)() @testset "issue #54548" begin @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" - define ptr addrspace(1) @entry(ptr addrspace(1) %0) #0 { + define i32 addrspace(1)* @entry(i32 addrspace(1)* %0) #0 { entry: - ret ptr addrspace(1) %0 + ret i32 addrspace(1)* %0 } attributes #0 = { alwaysinline }""", "entry"), From 05ee0aa979c631da03d4279bae010caf60c66722 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 15 Sep 2025 09:28:26 -0300 Subject: [PATCH 24/57] Remove bad test --- test/llvmpasses/remove-addrspaces.ll | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/llvmpasses/remove-addrspaces.ll b/test/llvmpasses/remove-addrspaces.ll index 4bdc8409a244e..d0e77e4a5d7ae 100644 --- a/test/llvmpasses/remove-addrspaces.ll +++ b/test/llvmpasses/remove-addrspaces.ll @@ -3,9 +3,6 @@ ; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -RemoveJuliaAddrspaces -S %s | FileCheck %s --check-prefixes=CHECK,TYPED ; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='RemoveJuliaAddrspaces' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED -; COM: check that the addrspace of the global itself is removed -; OPAQUE: @ejl_enz_runtime_exc = external global {} -@ejl_enz_runtime_exc = external addrspace(10) global {} ; COM: check that the addrspace of the global itself is removed ; OPAQUE: @ejl_enz_runtime_exc = external global {} @@ -134,13 +131,6 @@ L6: unreachable } -define private fastcc void @diffejulia__mapreduce_97() { -L6: -; OPAQUE: store atomic ptr @ejl_enz_runtime_exc, ptr null unordered - store atomic {} addrspace(10)* @ejl_enz_runtime_exc, {} addrspace(10)* addrspace(10)* null unordered, align 8 - unreachable -} - ; COM: check that function attributes are preserved on declarations too declare void @convergent_function() #0 attributes #0 = { convergent } From 6901dde9e901204e90f0913c039db9830cfaad65 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Mon, 6 Oct 2025 17:24:21 -0400 Subject: [PATCH 25/57] CI 1.10: Use the 1.10-specific Buildkite branch (#59761) --- .buildkite-external-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 7bf0208a98105830f8197faa02727d5c62286af3 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 22 Oct 2025 19:10:05 -0400 Subject: [PATCH 26/57] Remove bitrotten debug-only code in 1.10 (#59917) This debug-only code-path would block using tasks with custom stacks on julia-debug. fixes #59876 --- src/task.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/task.c b/src/task.c index e14b4a3e74956..fab25cf95dac9 100644 --- a/src/task.c +++ b/src/task.c @@ -1094,12 +1094,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 From 8988c1b0657029751974968cf7cb6e0fb6a5f98f Mon Sep 17 00:00:00 2001 From: Kiran Pamnany Date: Tue, 4 Nov 2025 12:36:29 -0500 Subject: [PATCH 27/57] =?UTF-8?q?[backports-release-1.10]=20fix=20accident?= =?UTF-8?q?al=20save=20(and=20restore)=20of=20sigmask=E2=80=A6=20(#59996)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interpreter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 704fae4c1df94755965bbd07eaa13b2f90f7174a Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 13 Nov 2025 22:46:18 +0100 Subject: [PATCH 28/57] Backport to 1.10: bump Documenter to 1.15.0 --- doc/Makefile | 5 ++ doc/Manifest.toml | 205 +++++++++++++++++++++++++++++++++++++++------- doc/Project.toml | 1 - doc/make.jl | 1 - 4 files changed, 179 insertions(+), 33 deletions(-) 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..f6dd55864621b 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 = "352b9a04e74edd16429aec79f033620cf8e780d4" 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.15.0" + +[[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 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.2" +version = "0.2.5" [[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 = "eb04df293213df64ddd720c86de3c431f5f8ccf1" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.3" +version = "1.2.1" + + [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..6bbc94b925b60 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -8,7 +8,6 @@ using Pkg Pkg.instantiate() using Documenter -using DocumenterInventoryWritingBackport baremodule GenStdLib end From 62173111686bc86bfbaf7dccc699a88be42d879a Mon Sep 17 00:00:00 2001 From: Morten Piibeleht Date: Sat, 16 Sep 2023 02:00:49 +1200 Subject: [PATCH 29/57] doc: correct unicode-input table generation (#51328) A couple small fixes and cosmetic improvements to the Unicode table in the docs: * Most importantly, makes sure that the resulting object from the at-eval block is `Markdown.MD`, which which will be necessary for Documenter 1.0 (#47105). It also fixes the `Markdown.Table` structure -- each of the cells should be an array, not just a string, so it adds one more layer of nesting. * Cosmetically, center-aligns the characters, and wraps the latex commands in `` --- doc/src/manual/unicode-input.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) 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( From c390c127054e7cb0f4518d3e92ed2c58fc68007e Mon Sep 17 00:00:00 2001 From: Morten Piibeleht Date: Wed, 6 Dec 2023 03:55:24 +1300 Subject: [PATCH 30/57] Update Documenter 0.27.23 => 1.2.1 (#47105) Currently mainly to test a few things on CI here, but will update this to an actual PR once 0.28.0 is out. --------- Co-authored-by: Lilith Orion Hafner --- doc/make.jl | 67 +++++++++++++++++++++++++++++++++- stdlib/Dates/docs/src/index.md | 4 -- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/doc/make.jl b/doc/make.jl index 6bbc94b925b60..3fb1b5c38f33f 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -8,6 +8,7 @@ using Pkg Pkg.instantiate() using Documenter +import LibGit2 baremodule GenStdLib end @@ -42,6 +43,68 @@ 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(remotes_list) +end + # Check if we are building a PDF const render_pdf = "pdf" in ARGS @@ -287,6 +350,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 @@ -298,12 +363,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/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 From 413d4348117d3c0128a3d996e0f296628b77616a Mon Sep 17 00:00:00 2001 From: Morten Piibeleht Date: Mon, 13 May 2024 23:03:50 +1200 Subject: [PATCH 31/57] Fix docs builds when not in Git tree (#54445) The documentation builds can fail if the Julia source code is not properly in a Git repo (tarballs, Buildkite). This should ensure that Documenter knows which remote repository corresponds to the Julia source tree. Hopefully will fix https://github.com/JuliaCI/julia-buildkite/issues/336 --- doc/make.jl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/make.jl b/doc/make.jl index 3fb1b5c38f33f..3d57a286263d1 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -102,7 +102,14 @@ documenter_stdlib_remotes = let stdlib_dir = realpath(joinpath(@__DIR__, "..", " isdir(package_root_dir) || mkpath(package_root_dir) package_root_dir => (remote, package_sha) end - Dict(remotes_list) + 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 From bd15dbec560c216b80cd3ba190ece527195ec102 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sun, 28 Dec 2025 01:14:16 +0100 Subject: [PATCH 32/57] Backport to 1.10: bump Documenter to 1.16.1 (#60218) Backport of PR #60215. --- doc/Manifest.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/Manifest.toml b/doc/Manifest.toml index f6dd55864621b..83ca30f6c5198 100644 --- a/doc/Manifest.toml +++ b/doc/Manifest.toml @@ -41,9 +41,9 @@ version = "0.9.5" [[deps.Documenter]] 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 = "352b9a04e74edd16429aec79f033620cf8e780d4" +git-tree-sha1 = "b37458ae37d8bdb643d763451585cd8d0e5b4a9e" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "1.15.0" +version = "1.16.1" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] @@ -79,9 +79,9 @@ version = "2.51.3+0" [[deps.IOCapture]] deps = ["Logging", "Random"] -git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770" +git-tree-sha1 = "0ee181ec08df7d7c911901ea38baf16f755114dc" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.5" +version = "1.0.0" [[deps.InteractiveUtils]] deps = ["Markdown"] @@ -95,9 +95,9 @@ version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "eb04df293213df64ddd720c86de3c431f5f8ccf1" +git-tree-sha1 = "5b6bb73f555bc753a6153deec3717b8904f5551c" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.2.1" +version = "1.3.0" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] From c927f6b57ee49c9b12aaf4cbd94e3e59edd4749c Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Wed, 14 Jan 2026 18:05:01 -0500 Subject: [PATCH 33/57] Unicode: Remove the allocations test added in #58674 Cross-ref: https://github.com/JuliaLang/julia/pull/58674 We remove the test, but we keep the rest of the code from that PR. --- stdlib/Unicode/test/runtests.jl | 2 -- 1 file changed, 2 deletions(-) diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 50468e868243c..5248bd1e1fd27 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -284,8 +284,6 @@ end @test_throws BoundsError graphemes("äöüx", 2:5) @test_throws BoundsError graphemes("äöüx", 5:5) @test_throws ArgumentError graphemes("äöüx", 0:1) - - @test @allocated(length(graphemes("äöüx"))) == 0 end @testset "#3721, #6939 up-to-date character widths" begin From 0c2ae5578d7bf5d34204e92f5beb78484fb967fc Mon Sep 17 00:00:00 2001 From: William Moses Date: Thu, 15 Jan 2026 07:18:34 -0600 Subject: [PATCH 34/57] 1.10: add getter for global variable pointer matching jlvalue (#60683) --- src/aotcompile.cpp | 9 +++++++++ src/codegen-stubs.c | 1 + src/jl_exported_funcs.inc | 1 + src/julia_internal.h | 1 + 4 files changed, 12 insertions(+) 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/codegen-stubs.c b/src/codegen-stubs.c index 26cf9229b6416..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 diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index c63f3de48a1fd..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) \ 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); From ddab6aae6d0b2433c656b83836859dc35ffa1033 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Fri, 16 Jan 2026 16:54:49 +0100 Subject: [PATCH 35/57] Backport "Fix structure test for strided matrices" (#57218) x-ref https://github.com/JuliaLang/LinearAlgebra.jl/pull/1184 --- stdlib/LinearAlgebra/src/dense.jl | 11 ++++++----- stdlib/LinearAlgebra/test/dense.jl | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) 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 From c84bf042fd1d795de30f9015ad27502dcb99653b Mon Sep 17 00:00:00 2001 From: Michael Persico Date: Thu, 9 Jan 2025 21:24:04 -0500 Subject: [PATCH 36/57] Fix devcontainer definition (#57006) (cherry picked from commit b80dd58346a9644d18c52d1cf0e949c62d9e281b) --- .devcontainer/Dockerfile | 3 --- .devcontainer/devcontainer.json | 16 ++++++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) delete mode 100644 .devcontainer/Dockerfile 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" } From e211c0c45ecf1b6f8bd8389ce9a09c361f6638dc Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Mon, 22 Sep 2025 14:33:31 -0400 Subject: [PATCH 37/57] Remove GPL libraries from the Julia build for binary-dist target (#59627) Currently we support removing GPL dependencies in the full source build. This will also remove the GPL dependencies from the binary-dist target when built with JLLs. I almost feel like it would be simpler to have a new SuiteSparse_NOGPL_jll package. Then in the default build, things stay as they are. In the no gpl build use the new JLL. In the no GPL build, if someone then tries to use a GPL SuiteSparse library, a warning can be printed asking them to get a different build of Julia. @DilumAluthge @andreasnoack @giordano Thoughts? Co-authored-by: Viral B. Shah (cherry picked from commit 441ebf958477aad68158b7d600c30278b2644d8c) --- stdlib/Makefile | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/stdlib/Makefile b/stdlib/Makefile index e42061d593905..a3a260052accf 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -15,6 +15,8 @@ include $(JULIAHOME)/deps/*.version VERSDIR := v$(shell cut -d. -f1-2 < $(JULIAHOME)/VERSION) DIRS := $(build_datarootdir)/julia/stdlib/$(VERSDIR) $(build_prefix)/manifest/$(VERSDIR) +LIBDIR := $(build_datarootdir)/lib/julia + $(foreach dir,$(DIRS),$(eval $(call dir_target,$(dir)))) JLLS = DSFMT GMP CURL LIBGIT2 LLVM LIBSSH2 LIBUV MBEDTLS MPFR NGHTTP2 \ @@ -60,8 +62,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 $(LIBDIR)/libcholmod* + -rm -f $(LIBDIR)/libklu_cholmod* + -rm -f $(LIBDIR)/librbio* + -rm -f $(LIBDIR)/libspqr* + -rm -f $(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: From 36a1469ee6d85220e5adbbd1c93f5405423c9cf9 Mon Sep 17 00:00:00 2001 From: Andy Dienes <51664769+adienes@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:43:08 -0400 Subject: [PATCH 38/57] fix `powermod` correctness on unsigned power of half typemax (#59680) the comment claims: > When the concrete type of p is signed and has the lowest value, > `p != 0 && p == -p` is equivalent to `p == typemin(typeof(p))` this is true, but fails to consider that `p == -p` is also true when `p = div(typemax(UInt), 2) + 1`, and that `p` is not necessarily signed leading to incorrect results on inputs like ``` julia> powermod(0x03, 0x80, 0x07) 0x01 ``` which should be `0x02` (cherry picked from commit bb3be0dc56f7c0f2cb645318d728280285d81933) --- base/intfuncs.jl | 22 ++++++++++++---------- test/intfuncs.jl | 3 +++ 2 files changed, 15 insertions(+), 10 deletions(-) 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/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 From a52d5e0e04806e0cbb9e15f26ca59001a4274e6c Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sat, 4 Oct 2025 17:29:53 -0400 Subject: [PATCH 39/57] also redirect JL_STDERR etc. when redirecting to devnull (#55958) (cherry picked from commit bcbe9fe969eaddc3231e06b7169f6b5946a28a18) --- base/stream.jl | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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 From 3688cecebc0d468727208248d980097abafe064b Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sat, 11 Oct 2025 13:02:25 +0200 Subject: [PATCH 40/57] Add note about `@threads` threadpool (#59802) (cherry picked from commit a817940468d4d69aab67c70337c06b9e6892919f) --- base/threadingconstructs.jl | 6 ++++++ 1 file changed, 6 insertions(+) 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 From 3354280a2c96f493ef913790179e919335383011 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 5 Nov 2025 16:49:41 -0500 Subject: [PATCH 41/57] Don't trigger full rebuild if git is dirty (#60023) (cherry picked from commit 6f2f7f5dbdcb26f6ca6ae1e487b7927894323196) --- base/.gitignore | 1 + base/Makefile | 1 + base/version_git.sh | 29 +++++++++++++++++-- .../InteractiveUtils/src/InteractiveUtils.jl | 2 +- 4 files changed, 29 insertions(+), 4 deletions(-) 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/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/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 17f32fa0df2a9..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" From 8d0578b35ea2e68a8b2903cf2cb95a4ef3aafaac Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 10 Nov 2025 22:32:35 +0100 Subject: [PATCH 42/57] allow finding stdlibs that are normal packages in the manifest but are now stdlibs (#60061) This helps handling manifest from earlier julia versions. This is kind of the `locate` version of the `identify` fallback in https://github.com/JuliaLang/julia/pull/56148. Need to write a test when this happens (and verify that this fix works). Noted in a slack #gripes comment. --------- Co-authored-by: KristofferC Co-authored-by: Max Horn (cherry picked from commit 6fddac850a00441cc5d3833cc3c441132cd49a5f) --- base/loading.jl | 3 ++ test/loading.jl | 11 +++- .../project/deps/BadStdlibDeps2/Manifest.toml | 54 +++++++++++++++++++ test/project/deps/BadStdlibDeps2/Project.toml | 2 + 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/project/deps/BadStdlibDeps2/Manifest.toml create mode 100644 test/project/deps/BadStdlibDeps2/Project.toml 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/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/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" From 583b57087f1ddbea0a0010cb65fb32782a0892a5 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Thu, 13 Nov 2025 15:39:29 +0100 Subject: [PATCH 43/57] Fix removal of GPL libs (#60100) `$(build_datarootdir)/lib/julia` doesn't exist, libraries are in `$(build_private_libdir)`. See https://github.com/JuliaLang/julia/pull/59627/files#r2510807584. (cherry picked from commit bf7e52b42efc64ebad5c1b89e5d6b26814cdcf74) --- stdlib/Makefile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/stdlib/Makefile b/stdlib/Makefile index a3a260052accf..03e51b27e255b 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -15,7 +15,6 @@ include $(JULIAHOME)/deps/*.version VERSDIR := v$(shell cut -d. -f1-2 < $(JULIAHOME)/VERSION) DIRS := $(build_datarootdir)/julia/stdlib/$(VERSDIR) $(build_prefix)/manifest/$(VERSDIR) -LIBDIR := $(build_datarootdir)/lib/julia $(foreach dir,$(DIRS),$(eval $(call dir_target,$(dir)))) @@ -65,11 +64,11 @@ STDLIBS_LINK_TARGETS := $(addprefix $(build_datarootdir)/julia/stdlib/$(VERSDIR) remove-gpl-libs: ifeq ($(USE_GPL_LIBS),0) @echo Removing GPL libs... - -rm -f $(LIBDIR)/libcholmod* - -rm -f $(LIBDIR)/libklu_cholmod* - -rm -f $(LIBDIR)/librbio* - -rm -f $(LIBDIR)/libspqr* - -rm -f $(LIBDIR)/libumfpack* + -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)) From b176b26e8454d4cd36e7963dd4a248b0ee3227d0 Mon Sep 17 00:00:00 2001 From: Eddie Groshev Date: Tue, 9 Dec 2025 23:33:24 -0800 Subject: [PATCH 44/57] Logging: define isless between Integer and LogLevel (#60330) (cherry picked from commit 5ee081631674166af22f3677d50c2fd56a2ccf48) --- base/logging.jl | 2 ++ stdlib/Logging/test/runtests.jl | 7 +++++++ 2 files changed, 9 insertions(+) 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/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index fc239ee9068d1..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 From c9452de8ceff926dd30fcb76f3c8f5ba9a2fb480 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 15 Jan 2026 00:23:55 -0500 Subject: [PATCH 45/57] add wb_back on all task switch paths (#60617) Since this task's stack or scope field could have been modified after it was marked by an incremental collection (and not just for copy stacks), move the barrier back unconditionally here. --------- Co-authored-by: Valentin Churavy Co-authored-by: Jeff Bezanson (cherry picked from commit 14ca1abc7237fc586d71d8b1b2c5a2d08bc2276e) --- src/task.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/task.c b/src/task.c index fab25cf95dac9..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; From 5501fd738bf2bb8aed686b8532c7f98c48b17ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= <765740+giordano@users.noreply.github.com> Date: Sat, 29 Nov 2025 08:00:21 +0000 Subject: [PATCH 46/57] Correct version in which at-lock was exported (#60279) It was exported in v1.7, not v1.10: #39588 (cherry picked from commit 1067db80b96cafb9da6864afbfdd9d6e27665c33) --- base/lock.jl | 3 +++ 1 file changed, 3 insertions(+) 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 From 4a02acf0e2dae7a8fe9588dfa35029b9f0a55597 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Fri, 13 Sep 2024 15:57:19 -0400 Subject: [PATCH 47/57] fix #45494, error in ssa conversion with complex type decl (#55744) We were missing a call to `renumber-assigned-ssavalues` in the case where the declared type is used to assert the type of a value taken from a closure box. (cherry picked from commit 2616634a17fdd286e64d16d454bb8077c54d51c9) --- src/julia-syntax.scm | 5 ++++- test/syntax.jl | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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/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,) From fd43584bb724e9eede02fb9d293eb72e0b6bf3d8 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Mon, 19 Jan 2026 15:29:27 -0500 Subject: [PATCH 48/57] CI: Pin external actions to full-length commit hashes --- .github/workflows/LabelCheck.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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']" From a6d3bd2e6d7c7f1eb5b99f48e10876f7f9473dca Mon Sep 17 00:00:00 2001 From: Em Chu <61633163+mlechu@users.noreply.github.com> Date: Fri, 11 Jul 2025 04:23:40 -0700 Subject: [PATCH 49/57] Fix `hygienic-scope`s in inner macro expansions (#58965) Changes from https://github.com/JuliaLang/julia/pull/43151, github just didn't want me to re-open it. As discussed on slack, any `hygienic-scope` within an outer `hygienic-scope` can read and write variables in the outer one, so it's not particularly hygienic. The result is that we can't safely nest macro calls unless they know the contents of all inner macro calls. Should fix #48910. Co-authored-by: Michiel Dral (cherry picked from commit ff33305061cf5ea910631c4ab83a455f47eed774) --- src/macroexpand.scm | 2 +- test/core.jl | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/macroexpand.scm b/src/macroexpand.scm index 6e390a6c24cf2..a4f6b78955ab9 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -461,7 +461,7 @@ (body (cadr e)) (m (caddr e)) (lno (cdddr e))) - (resolve-expansion-vars-with-new-env body env m parent-scope inarg #t))) + (resolve-expansion-vars-with-new-env body '() m parent-scope inarg #t))) ((tuple) (cons (car e) (map (lambda (x) diff --git a/test/core.jl b/test/core.jl index 26e16f20f0073..dcfa826272529 100644 --- a/test/core.jl +++ b/test/core.jl @@ -2250,6 +2250,31 @@ end x6074 = 6074 @test @X6074() == 6074 +# issues #48910, 54417 +macro X43151_nested() + quote my_value = "from_nested_macro" end +end +macro X43151_parent() + quote + my_value = "from_parent_macro" + @X43151_nested() + my_value + end +end +@test @X43151_parent() == "from_parent_macro" + +macro X43151_nested_escaping() + quote $(esc(:my_value)) = "from_nested_macro" end +end +macro X43151_parent_escaping() + quote + my_value = "from_parent_macro" + @X43151_nested_escaping() + my_value + end +end +@test @X43151_parent_escaping() == "from_nested_macro" + # issue #5536 test5536(a::Union{Real, AbstractArray}...) = "Splatting" test5536(a::Union{Real, AbstractArray}) = "Non-splatting" From 75f1a80242b6d907a3fdb6f08e959751521bb57b Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Mon, 19 Jan 2026 18:24:20 -0500 Subject: [PATCH 50/57] 1.10: Update cacert to 2025-12-02 (#60745) --- deps/checksums/cacert-2023-01-10.pem/md5 | 1 - deps/checksums/cacert-2023-01-10.pem/sha512 | 1 - deps/checksums/cacert-2025-12-02.pem/md5 | 1 + deps/checksums/cacert-2025-12-02.pem/sha512 | 1 + deps/libgit2.version | 2 +- stdlib/MozillaCACerts_jll/Project.toml | 2 +- 6 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 deps/checksums/cacert-2023-01-10.pem/md5 delete mode 100644 deps/checksums/cacert-2023-01-10.pem/sha512 create mode 100644 deps/checksums/cacert-2025-12-02.pem/md5 create mode 100644 deps/checksums/cacert-2025-12-02.pem/sha512 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/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/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" From f1d9e851766c4800dafdbf023437f3c65539f25f Mon Sep 17 00:00:00 2001 From: William Moses Date: Thu, 22 Jan 2026 23:58:53 -0500 Subject: [PATCH 51/57] [1.10] [LLVMAllocOpt] Preserve metadata lowering an alloca (#60776) (#60798) Backport of https://github.com/JuliaLang/julia/pull/60695 particularly (cherry picked from d875df43e03957157f7ba5e9ea758471055f72a5) --- src/llvm-alloc-opt.cpp | 1 + 1 file changed, 1 insertion(+) 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); From c5f8d0d5a3fd199bc77f5daa299932f75c23b8f2 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 27 Jan 2026 22:43:12 +0100 Subject: [PATCH 52/57] Make `jl_reinit_foreign_type` idempotent even with asserts (#60827) That is, if it is called twice (e.g. because precompilation is disabled) with identical arguments, then this should not trigger an assertion. This should resolve https://github.com/oscar-system/GAP.jl/issues/1314 (cherry picked from commit 1708d99d98e1d0e5b3b277f74b6a10f2f675387d) --- src/datatype.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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; } From ec3ef8bcb53d3ba769b09eff95c5b63455e354c5 Mon Sep 17 00:00:00 2001 From: rokke <66498307+rokke-git@users.noreply.github.com> Date: Wed, 28 Jan 2026 00:16:20 -0500 Subject: [PATCH 53/57] Merge pull request #60834 from rokke-git/patch-5 Test suite: switch to `httpbingo.julialang`, fall back to `httpbin.julialang` on failure (cherry picked from commit 5ab8db39c014dfcf1b53314932dddfea35ecb2c7) --- test/download_exec.jl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 From 0fcf16144190bbe24ff1195aa226f606ae58456e Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Thu, 29 Jan 2026 06:10:28 -0500 Subject: [PATCH 54/57] Fix typo in partially_inline! (#60854) Found by claude-code debugging a random zygote issue: https://github.com/SciML/NeuralPDE.jl/pull/1020#issuecomment-3799139274. `spvals` just doesn't exist within this function. This issue has apparently existed since Julia 1.6 (cherry picked from commit 94e72bb716a222af6c03aad7371cd6bde5120757) --- base/meta.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, From c8be17dcfd8ccea639d493b78b838bc9e8b56eff Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 1 Feb 2026 19:49:58 -0500 Subject: [PATCH 55/57] 1.10: Bump MbedTLS from 2.28.2 to 2.28.1010 (2.28.10 plus patches) (#60744) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR bumps MbedTLS on Julia 1.10 to [2.28.1010](https://github.com/JuliaPackaging/Yggdrasil/pull/12380), which is upstream 2.28.10 plus Debian's (2.16.9) security patches. [devdocs](https://docs.julialang.org/en/v1.12/devdocs/build/build/#Update-the-version-number-of-a-dependency)) Version numbers: - [x] `deps/$(libname).version`: `LIBNAME_VER`, `LIBNAME_BRANCH`, `LIBNAME_SHA1` and `LIBNAME_JLL_VER` - [x] `stdlib/$(LIBNAME_JLL_NAME)_jll/Project.toml`: `version` Checksum: - [x] `deps/checksums/$(libname)` - [ ] `deps/checksums/$(LIBNAME_JLL_NAME)-*/`: `md5` and `sha512` - I don't think this file exists anymore. It looks like the checksums have been combined into `deps/checksums/mbedtls`. Patches: - [x] `deps/$(libname).mk` - [x] `deps/patches/$(libname)-*.patch` --------- Co-authored-by: Andy Dienes <51664769+adienes@users.noreply.github.com> Co-authored-by: Ian Butterworth Co-authored-by: Kristoffer Carlsson Co-authored-by: KristofferC Co-authored-by: Max Horn Co-authored-by: Milan Bouchet-Valat Co-authored-by: Eddie Groshev Co-authored-by: Jameson Nash Co-authored-by: Valentin Churavy Co-authored-by: Jeff Bezanson Co-authored-by: Mosè Giordano <765740+giordano@users.noreply.github.com> Co-authored-by: Em Chu <61633163+mlechu@users.noreply.github.com> Co-authored-by: Michiel Dral Co-authored-by: Erik Schnetter --- deps/checksums/mbedtls | 68 ++++----- deps/mbedtls.mk | 73 +++++++++- deps/mbedtls.version | 5 +- deps/patches/mbedtls/01-CVE-2025-52496.patch | 76 ++++++++++ deps/patches/mbedtls/02-CVE-2025-47917.patch | 71 ++++++++++ .../mbedtls/03-CVE-2025-47917-test.patch | 54 ++++++++ .../patches/mbedtls/04-CVE-2025-47917-2.patch | 58 ++++++++ .../mbedtls/05-CVE-2025-47917-2-test.patch | 35 +++++ .../patches/mbedtls/08-CVE-2025-48965-1.patch | 63 +++++++++ .../mbedtls/09-CVE-2025-48965-1-test.patch | 34 +++++ .../mbedtls/10-CVE-2025-52497-0-1.patch | 80 +++++++++++ .../mbedtls/11-CVE-2025-52497-0-2.patch | 130 ++++++++++++++++++ deps/patches/mbedtls/12-CVE-2025-52497.patch | 29 ++++ .../mbedtls/13-CVE-2025-52497-test.patch | 28 ++++ deps/patches/mbedtls/14-CMakeLists.patch | 11 ++ stdlib/MbedTLS_jll/Project.toml | 2 +- stdlib/MbedTLS_jll/test/runtests.jl | 4 +- 17 files changed, 783 insertions(+), 38 deletions(-) create mode 100644 deps/patches/mbedtls/01-CVE-2025-52496.patch create mode 100644 deps/patches/mbedtls/02-CVE-2025-47917.patch create mode 100644 deps/patches/mbedtls/03-CVE-2025-47917-test.patch create mode 100644 deps/patches/mbedtls/04-CVE-2025-47917-2.patch create mode 100644 deps/patches/mbedtls/05-CVE-2025-47917-2-test.patch create mode 100644 deps/patches/mbedtls/08-CVE-2025-48965-1.patch create mode 100644 deps/patches/mbedtls/09-CVE-2025-48965-1-test.patch create mode 100644 deps/patches/mbedtls/10-CVE-2025-52497-0-1.patch create mode 100644 deps/patches/mbedtls/11-CVE-2025-52497-0-2.patch create mode 100644 deps/patches/mbedtls/12-CVE-2025-52497.patch create mode 100644 deps/patches/mbedtls/13-CVE-2025-52497-test.patch create mode 100644 deps/patches/mbedtls/14-CMakeLists.patch 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/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/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/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 From df86fe4d4940dbf90ea8a2cc7ca2ae85a79ea40f Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 3 Feb 2026 14:26:06 +0100 Subject: [PATCH 56/57] Revert "Fix `hygienic-scope`s in inner macro expansions (#58965)" This reverts commit a6d3bd2e6d7c7f1eb5b99f48e10876f7f9473dca. --- src/macroexpand.scm | 2 +- test/core.jl | 25 ------------------------- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/macroexpand.scm b/src/macroexpand.scm index a4f6b78955ab9..6e390a6c24cf2 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -461,7 +461,7 @@ (body (cadr e)) (m (caddr e)) (lno (cdddr e))) - (resolve-expansion-vars-with-new-env body '() m parent-scope inarg #t))) + (resolve-expansion-vars-with-new-env body env m parent-scope inarg #t))) ((tuple) (cons (car e) (map (lambda (x) diff --git a/test/core.jl b/test/core.jl index dcfa826272529..26e16f20f0073 100644 --- a/test/core.jl +++ b/test/core.jl @@ -2250,31 +2250,6 @@ end x6074 = 6074 @test @X6074() == 6074 -# issues #48910, 54417 -macro X43151_nested() - quote my_value = "from_nested_macro" end -end -macro X43151_parent() - quote - my_value = "from_parent_macro" - @X43151_nested() - my_value - end -end -@test @X43151_parent() == "from_parent_macro" - -macro X43151_nested_escaping() - quote $(esc(:my_value)) = "from_nested_macro" end -end -macro X43151_parent_escaping() - quote - my_value = "from_parent_macro" - @X43151_nested_escaping() - my_value - end -end -@test @X43151_parent_escaping() == "from_nested_macro" - # issue #5536 test5536(a::Union{Real, AbstractArray}...) = "Splatting" test5536(a::Union{Real, AbstractArray}) = "Non-splatting" From 925f31f993501244b0c84660d7fa49835576d207 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Mon, 9 Feb 2026 10:44:16 -0300 Subject: [PATCH 57/57] Fix test causing assertion --- test/intrinsics.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 7db7c36e61487..9f88d40b8ac32 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -364,9 +364,9 @@ end)() @testset "issue #54548" begin @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" - define i32 addrspace(1)* @entry(i32 addrspace(1)* %0) #0 { + define i8 addrspace(1)* @entry(i8 addrspace(1)* %0) #0 { entry: - ret i32 addrspace(1)* %0 + ret i8 addrspace(1)* %0 } attributes #0 = { alwaysinline }""", "entry"),