Enable dyld interposing on Apple platforms when overriding#145
Merged
octavonce merged 2 commits intopurpleprotocol:masterfrom Sep 17, 2025
Merged
Enable dyld interposing on Apple platforms when overriding#145octavonce merged 2 commits intopurpleprotocol:masterfrom
octavonce merged 2 commits intopurpleprotocol:masterfrom
Conversation
This currently fails on macOS.
Enables the MI_OSX_ZONE and MI_OSX_INTERPOSE flags. These allow using `malloc`/`free` on pointers returned from dynamic libraries (which will otherwise fail, as the dynamic libraries use the System allocator). These are enabled by default in mimalloc's CMakeLists.txt, but since we build without that, we need to specify these flags ourselves.
Contributor
Author
|
We might need something similar to tikv/jemallocator#109 to truly make the |
Contributor
Author
|
Actually, I went ahead and did that, see #146. |
Collaborator
|
Great stuff 💯 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Define the
MI_OSX_ZONE=1andMI_OSX_INTERPOSE=1when compiling. These allow using e.g.libc::freeon pointers returned from dynamic libraries (which will otherwise fail, as the dynamic library would use the system allocator, while the current library would use mimalloc).These are enabled by default in mimalloc's
CMakeLists.txt, but since we build without that, we need to specify these flags ourselves.Implementation-wise, I added a test in the first commit that fails like the following, and which is fixed in the second commit.
$ cargo run -ptest-override-with-dylib --features override Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s Running `target/debug/test-override-with-dylib` test-override-with-dylib(15544,0x1f9c220c0) malloc: *** error for object 0x53d34040030: pointer being freed was not allocated test-override-with-dylib(15544,0x1f9c220c0) malloc: *** set a breakpoint in malloc_error_break to debug zsh: abort cargo run -ptest-override-with-dylib --features overrideRelated: #41