|
@@ -292,8 +292,10 @@ void DynamicLoader::load_program_headers()
|
|
int reservation_mmap_flags = MAP_ANON | MAP_PRIVATE | MAP_NORESERVE;
|
|
int reservation_mmap_flags = MAP_ANON | MAP_PRIVATE | MAP_NORESERVE;
|
|
if (m_elf_image.is_dynamic())
|
|
if (m_elf_image.is_dynamic())
|
|
reservation_mmap_flags |= MAP_RANDOMIZED;
|
|
reservation_mmap_flags |= MAP_RANDOMIZED;
|
|
|
|
+#ifdef MAP_FIXED_NOREPLACE
|
|
else
|
|
else
|
|
- reservation_mmap_flags |= MAP_FIXED;
|
|
|
|
|
|
+ reservation_mmap_flags |= MAP_FIXED_NOREPLACE;
|
|
|
|
+#endif
|
|
|
|
|
|
// First, we make a dummy reservation mapping, in order to allocate enough VM
|
|
// First, we make a dummy reservation mapping, in order to allocate enough VM
|
|
// to hold all regions contiguously in the address space.
|
|
// to hold all regions contiguously in the address space.
|
|
@@ -309,6 +311,8 @@ void DynamicLoader::load_program_headers()
|
|
VERIFY_NOT_REACHED();
|
|
VERIFY_NOT_REACHED();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ VERIFY(requested_load_address == nullptr || reservation == requested_load_address);
|
|
|
|
+
|
|
m_base_address = VirtualAddress { reservation };
|
|
m_base_address = VirtualAddress { reservation };
|
|
|
|
|
|
// Then we unmap the reservation.
|
|
// Then we unmap the reservation.
|