Page MenuHomeFreeBSD

D9373.id24537.diff
No OneTemporary

D9373.id24537.diff

Index: sys/compat/linux/linux_mmap.c
===================================================================
--- sys/compat/linux/linux_mmap.c
+++ sys/compat/linux/linux_mmap.c
@@ -219,8 +219,25 @@
}
bsd_args.pos = pos;
+ /*
+ * FreeBSD is free to ignore the address hint if MAP_FIXED wasn't
+ * passed. However, some Linux applications, like the ART runtime,
+ * depend on the hint. If the MAP_FIXED wasn't passed, but the
+ * address is not zero, try with MAP_FIXED and MAP_EXCL first,
+ * and fall back to the normal behaviour if that fails.
+ */
+ if (bsd_args.addr != 0 && (bsd_args.flags & MAP_FIXED) == 0 &&
+ (bsd_args.flags & MAP_EXCL) == 0) {
+ bsd_args.flags |= MAP_FIXED | MAP_EXCL;
+ error = sys_mmap(td, &bsd_args);
+ if (error == 0)
+ goto out;
+ bsd_args.flags &= ~(MAP_FIXED | MAP_EXCL);
+ }
+
error = sys_mmap(td, &bsd_args);
+out:
LINUX_CTR2(mmap2, "return: %d (%p)", error, td->td_retval[0]);
return (error);

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 24, 1:11 AM (20 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30217829
Default Alt Text
D9373.id24537.diff (959 B)

Event Timeline