-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
android: use jemalloc
on Android
#32273
Conversation
I think android used to have jemalloc as system allocator, but that changed in recent years. I wonder what would happen if we use ASAN on android? |
It's explained in this PR 🤦. The issue is that |
I don't think this would fix it as the issue is basically with this line that forces us to link with |
Good question! Looks like ASan is not recommended any more and Hardware Address Santizier (HWSAan] is recommended. It also looks like HWASan uses the tagged pointers support in aarch64. |
This is a fix for the crash issue in 64-bit ARM [servo#32175][1]. When targeting Android 11 and above, 64-bit ARM platforms have the 'Tagged Pointer' feature enabled by default which causes memory allocated using the system allocator to have a non-zero 'tag' set in the highest byte of heap addresses. This is incompatible with SpiderMonkey which assumes that only the bottom 48 bits are set and asserts this at various points. Both Servo and Gecko have a similar architecture where the pointer to a heap allocated DOM struct is encoded as a JS::Value and stored in the DOM_OBJECT_SLOT (reserved slot) of the JSObject which reflects the native DOM struct. As observed in servo#32175, even Gecko crashes with `jemalloc` disabled which suggests that support for using the native system allocator with tagged pointers enabled by default is not present at the moment. [1]: servo#32175 Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2a9183a
to
23016cb
Compare
This is a fix for the crash issue in 64-bit ARM #32175 and is essentially a revert of 5395c3e from the first Android PR.
When targeting Android 11 and above, 64-bit ARM platforms have the 'Tagged Pointer' feature enabled by default which causes memory allocated using the system allocator to have a non-zero 'tag' set in the highest byte of heap addresses.
This is incompatible with SpiderMonkey which assumes that only the bottom 48 bits are set and asserts this at various points.
Both Servo and Gecko have a similar architecture where the pointer to a heap allocated DOM struct is encoded as a JS::Value and stored in the DOM_OBJECT_SLOT (reserved slot) of the JSObject which reflects the native DOM struct.
As observed in #32175, even Gecko crashes with
jemalloc
disabled which suggests that support for using the native system allocator with tagged pointers enabled by default is not present at the moment../mach build -d
does not report any errors./mach test-tidy
does not report any errors./mach test-android-startup
is currently broken.