mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
android: use jemalloc
on Android (#32273)
This is a fix for the crash issue in 64-bit ARM [#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 #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]: https://github.com/servo/servo/issues/32175 Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This commit is contained in:
parent
1d66ea2b27
commit
385f6f93bf
5 changed files with 24 additions and 22 deletions
|
@ -12,7 +12,7 @@ path = "lib.rs"
|
|||
[features]
|
||||
use-system-allocator = ["libc"]
|
||||
|
||||
[target.'cfg(not(any(windows, target_os = "android", target_env = "ohos")))'.dependencies]
|
||||
[target.'cfg(not(any(windows, target_env = "ohos")))'.dependencies]
|
||||
jemallocator = { workspace = true }
|
||||
jemalloc-sys = { workspace = true }
|
||||
libc = { workspace = true, optional = true }
|
||||
|
@ -20,5 +20,5 @@ libc = { workspace = true, optional = true }
|
|||
[target.'cfg(windows)'.dependencies]
|
||||
winapi = { workspace = true, features = ["heapapi"] }
|
||||
|
||||
[target.'cfg(any(target_os = "android", target_env = "ohos"))'.dependencies]
|
||||
[target.'cfg(target_env = "ohos")'.dependencies]
|
||||
libc = { workspace = true }
|
||||
|
|
|
@ -9,12 +9,7 @@ static ALLOC: Allocator = Allocator;
|
|||
|
||||
pub use crate::platform::*;
|
||||
|
||||
#[cfg(not(any(
|
||||
windows,
|
||||
target_os = "android",
|
||||
feature = "use-system-allocator",
|
||||
target_env = "ohos"
|
||||
)))]
|
||||
#[cfg(not(any(windows, feature = "use-system-allocator", target_env = "ohos")))]
|
||||
mod platform {
|
||||
use std::os::raw::c_void;
|
||||
|
||||
|
@ -37,11 +32,7 @@ mod platform {
|
|||
|
||||
#[cfg(all(
|
||||
not(windows),
|
||||
any(
|
||||
target_os = "android",
|
||||
feature = "use-system-allocator",
|
||||
target_env = "ohos"
|
||||
)
|
||||
any(feature = "use-system-allocator", target_env = "ohos")
|
||||
))]
|
||||
mod platform {
|
||||
pub use std::alloc::System as Allocator;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue