-
Notifications
You must be signed in to change notification settings - Fork 956
improve MacOS interposes to make mimalloc compile for older MacOS #1028
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Conversation
I've got a failure while trying to compile with "-mmacosx-version-min=10.7" since MAC_OS_X_VERSION_MAX_ALLOWED is greater than MAC_OS_X_VERSION_10_15 but still we can't use `aligned_alloc` since of the lower bound (10.7). I'm not sure about internal details of how `__OSX_AVAILABLE` works, but my hope is the it would only make this interpose available starting from the OS version specified. Also, it helps me to compile mimalloc with "-mmacosx-version-min=10.7".
Hey @daanx - could you check this change once again, please? |
@@ -77,18 +77,12 @@ typedef void* mi_nothrow_t; | |||
MI_INTERPOSE_MI(calloc), | |||
MI_INTERPOSE_MI(realloc), | |||
MI_INTERPOSE_MI(strdup), | |||
#if defined(MAC_OS_X_VERSION_10_7) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think it's worth deleting it.
Instead replace all MAC_OS_X_VERSION_MAX_ALLOWED
with MAC_OS_X_VERSION_MIN_REQUIRED
in this file (or better yet, everywhere else in this repository).
FYI read thread in this pull request: hacl-star/hacl-star#1042
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've god runtime error when I've done this. See #1028 (comment)
@@ -99,6 +93,15 @@ typedef void* mi_nothrow_t; | |||
MI_INTERPOSE_FUN(vfree,mi_cfree), | |||
#endif | |||
}; | |||
__attribute__((used)) static struct mi_interpose_s _mi_interposes_10_7[] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It also seems redundant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Applying availability attribute to a declaration is a different thing. It should make this declaration conditionally accessible (weakly linked).
I've got this info from here: https://epir.at/2019/10/30/api-availability-and-target-conditionals/
A declaration can typically be used even when deploying back to a platform version prior to when the declaration was introduced. When this happens, the declaration is weakly linked, as if the weak_import attribute were added to the declaration. A weakly-linked declaration may or may not be present a run-time, and a program can determine whether the declaration is present by checking whether the address of that declaration is non-NULL
In reality, I was observing a crash on modern MacOSes with the current compile time exclusion of such interposes, but it works fine when is a separate decl.
Because |
I took this PR and manually integrated it. Let me know if this works for you @Noxybot. Thanks! |
I've got a failure while trying to compile with "-mmacosx-version-min=10.7" since MAC_OS_X_VERSION_MAX_ALLOWED is greater than MAC_OS_X_VERSION_10_15 but still we can't use
aligned_alloc
since of the lower bound (10.7). I'm not sure about internal details of how__OSX_AVAILABLE
works, but my hope is the it would only make this interpose available starting from the OS version specified. Also, it helps me to compile mimalloc with "-mmacosx-version-min=10.7".