Make linux(4) handle MAP_32BIT.
This unbreaks Mono (mono-devel-4.6.2.7+dfsg-1ubuntu1 from Ubuntu Bionic); previously would crash on "amd64_is_imm32" assert. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23306
This commit is contained in:
parent
b3fb13eb55
commit
618b55c2e2
@ -113,6 +113,14 @@ linux_mmap_common(struct thread *td, uintptr_t addr, size_t len, int prot,
|
||||
if (flags & LINUX_MAP_GROWSDOWN)
|
||||
bsd_flags |= MAP_STACK;
|
||||
|
||||
#if defined(__amd64__)
|
||||
/*
|
||||
* According to the Linux mmap(2) man page, "MAP_32BIT flag
|
||||
* is ignored when MAP_FIXED is set."
|
||||
*/
|
||||
if ((flags & LINUX_MAP_32BIT) && (flags & LINUX_MAP_FIXED) == 0)
|
||||
bsd_flags |= MAP_32BIT;
|
||||
|
||||
/*
|
||||
* PROT_READ, PROT_WRITE, or PROT_EXEC implies PROT_READ and PROT_EXEC
|
||||
* on Linux/i386 if the binary requires executable stack.
|
||||
@ -121,7 +129,6 @@ linux_mmap_common(struct thread *td, uintptr_t addr, size_t len, int prot,
|
||||
*
|
||||
* XXX. Linux checks that the file system is not mounted with noexec.
|
||||
*/
|
||||
#if defined(__amd64__)
|
||||
linux_fixup_prot(td, &prot);
|
||||
#endif
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#define LINUX_MAP_PRIVATE 0x0002
|
||||
#define LINUX_MAP_FIXED 0x0010
|
||||
#define LINUX_MAP_ANON 0x0020
|
||||
#define LINUX_MAP_32BIT 0x0040
|
||||
#define LINUX_MAP_GROWSDOWN 0x0100
|
||||
|
||||
#define LINUX_PROT_GROWSDOWN 0x01000000
|
||||
|
Loading…
Reference in New Issue
Block a user