Skip to content

Conversation

@xal-0
Copy link
Member

@xal-0 xal-0 commented Nov 24, 2025

Apple ARM CPUs treat the ic ivau as a memory read, which causes a confusing crash in DualMapAllocator if we try using it on a wr_addr that has been mprotected to Prot::NO, since we are still holding the allocator lock.

For Apple aarch64 systems with SIP disabled, this will result in some memory savings, since DualMapAllocator will now work there. Like before, other JITLink platforms, namely Linux aarch64 and RISC-V, will benefit too.

This re-lands #60105, after it was reverted in #60196. Thanks @giordano!

…ng#60105)

Ports our RTDyLD memory manager to JITLink in order to avoid memory use
regressions after switching to JITLink everywhere (JuliaLang#60031). This is a
direct port: finalization must happen all at once, because it
invalidates all allocation `wr_ptr`s. I decided it wasn't worth it to
associate `OnFinalizedFunction` callbacks with each block, since they
are large enough to make it extremely likely that all in-flight
allocations land in the same block; everything must be relocated before
finalization can happen.
Apple ARM CPUs treat the `ic ivau` as a memory read, which causes a confusing
crash in DualMapAllocator if we try using it on a wr_addr that has been
mprotected to `Prot::NO`, since we are still holding the allocator lock.

For Apple aarch64 systems with SIP disabled, this will result in some memory
savings, since DualMapAllocator will now work there.  Like before, other JITLink
platforms, namely Linux aarch64 and RISC-V, will benefit too.

This re-lands JuliaLang#60105, after it was reverted in JuliaLang#60196.  Thanks @giordano!
@giordano giordano added the re-land This relands a PR that was previously merged but was later reverted. label Nov 24, 2025
@giordano
Copy link
Member

giordano commented Nov 24, 2025

$ csrutil status
System Integrity Protection status: disabled.
$ curl -Lfs -O https://buildkite.com/organizations/julialang/pipelines/julia-master/builds/52295/jobs/019ab7f4-9f21-4206-8395-2f9b0719abf0/artifacts/019ab800-02a3-45c3-bb4e-cee08e3a7917
$ tar xzf 019ab800-02a3-45c3-bb4e-cee08e3a7917
$ julia-068186c191/bin/julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.14.0-DEV.1292 (2025-11-24)
 _/ |\__'_|_|_|\__'_|  |  xal-0:jitlink-cgmemmgr/068186c191f (fork: 2 commits, 0 days)
|__/                   |

julia>

🥳

Edit: local build is also successful and can be started without issues:

$ ./julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.14.0-DEV.1292 (2025-11-24)
 _/ |\__'_|_|_|\__'_|  |  jitlink-cgmemmgr/068186c191 (fork: 2 commits, 0 days)
|__/                   |

julia>

@Keno
Copy link
Member

Keno commented Nov 25, 2025

Apple ARM CPUs treat the ic ivau as a memory read

Is this in spec?

@xal-0
Copy link
Member Author

xal-0 commented Nov 25, 2025

It's allowed but not required:

D7.5.9.3 EL0 accessibility of cache maintenance instructions
...
For the IC IVAU instruction, if the instruction is executed at EL0 and the address specified in the argument
cannot be read at EL0, it is IMPLEMENTATION DEFINED whether a Permission fault is generated.

@Keno Keno merged commit 88ee64f into JuliaLang:master Nov 25, 2025
10 checks passed
@Keno
Copy link
Member

Keno commented Nov 25, 2025

@xal-0
Copy link
Member Author

xal-0 commented Nov 25, 2025

The CI error is the code model problem from before (DualMapAllocator puts an RX mapping more than 2 GiB from an RW or RO mapping that a relocation points to), but I made the error message worse with jl_unreachable().

Partial revert in #60245.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

re-land This relands a PR that was previously merged but was later reverted.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants