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
This commit is contained in:
Edward Tomasz Napierala 2020-01-21 19:19:02 +00:00
parent 9ddf3d342b
commit c5f4e26e7d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=356948
2 changed files with 8 additions and 0 deletions

View File

@ -113,6 +113,13 @@ linux_mmap_common(struct thread *td, uintptr_t addr, size_t len, int prot,
if (flags & LINUX_MAP_GROWSDOWN)
bsd_flags |= MAP_STACK;
/*
* 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.

View File

@ -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