Revert "Enable JIT dual data mapping."
This reverts commit b3b803b69d5db392ea7cf7a1fea443d4ba133134.
Reason for revert: Another random idea for diagnosing timeouts.
This CL was submitted around the right time and touches mmaps.
Bug: 142039427
Test: device boots
Test: test.py --host -b -r --jit --64
Change-Id: If8e3fb5e9bd5b4389f807f8ce07e4b9d8f263009
diff --git a/runtime/jit/jit_memory_region.cc b/runtime/jit/jit_memory_region.cc
index 09980c8..7c7496b 100644
--- a/runtime/jit/jit_memory_region.cc
+++ b/runtime/jit/jit_memory_region.cc
@@ -114,14 +114,12 @@
// +---------------+
// | non exec code |\
// +---------------+ \
- // | writable data |\ \
- // +---------------+ \ \
- // : :\ \ \
- // +---------------+.\.\.+---------------+
- // | exec code | \ \| code |
- // +---------------+...\.+---------------+
- // | readonly data | \| data |
- // +---------------+.....+---------------+
+ // : :\ \
+ // +---------------+.\.+---------------+
+ // | exec code | \| code |
+ // +---------------+...+---------------+
+ // | data | | data |
+ // +---------------+...+---------------+
//
// In this configuration code updates are written to the non-executable view of the code
// cache, and the executable view of the code cache has fixed RX memory protections.
@@ -134,7 +132,7 @@
base_flags = MAP_SHARED;
data_pages = MemMap::MapFile(
data_capacity + exec_capacity,
- kProtR,
+ is_zygote ? kProtR : kProtRW,
base_flags,
mem_fd,
/* start= */ 0,
@@ -216,34 +214,36 @@
return false;
}
}
- // Create a dual view of the data cache.
- name = data_cache_name + "-rw";
- writable_data_pages = MemMap::MapFile(data_capacity,
- kProtRW,
- base_flags,
- mem_fd,
- /* start= */ 0,
- /* low_4GB= */ false,
- name.c_str(),
- &error_str);
- if (!writable_data_pages.IsValid()) {
- std::ostringstream oss;
- oss << "Failed to create dual data view: " << error_str;
- *error_msg = oss.str();
- return false;
- }
- if (writable_data_pages.MadviseDontFork() != 0) {
- *error_msg = "Failed to madvise dont fork the writable data view";
- return false;
- }
- if (non_exec_pages.MadviseDontFork() != 0) {
- *error_msg = "Failed to madvise dont fork the writable code view";
- return false;
- }
- // Now that we have created the writable and executable mappings, prevent creating any new
- // ones.
- if (is_zygote && !ProtectZygoteMemory(mem_fd.get(), error_msg)) {
- return false;
+ // For the zygote, create a dual view of the data cache.
+ if (is_zygote) {
+ name = data_cache_name + "-rw";
+ writable_data_pages = MemMap::MapFile(data_capacity,
+ kProtRW,
+ base_flags,
+ mem_fd,
+ /* start= */ 0,
+ /* low_4GB= */ false,
+ name.c_str(),
+ &error_str);
+ if (!writable_data_pages.IsValid()) {
+ std::ostringstream oss;
+ oss << "Failed to create dual data view for zygote: " << error_str;
+ *error_msg = oss.str();
+ return false;
+ }
+ if (writable_data_pages.MadviseDontFork() != 0) {
+ *error_msg = "Failed to madvise dont fork the writable data view";
+ return false;
+ }
+ if (non_exec_pages.MadviseDontFork() != 0) {
+ *error_msg = "Failed to madvise dont fork the writable code view";
+ return false;
+ }
+ // Now that we have created the writable and executable mappings, prevent creating any new
+ // ones.
+ if (!ProtectZygoteMemory(mem_fd.get(), error_msg)) {
+ return false;
+ }
}
}
} else {