Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jan 2020 19:19:03 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r356948 - head/sys/compat/linux
Message-ID:  <202001211919.00LJJ3gW028307@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Tue Jan 21 19:19:02 2020
New Revision: 356948
URL: https://svnweb.freebsd.org/changeset/base/356948

Log:
  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

Modified:
  head/sys/compat/linux/linux_mmap.c
  head/sys/compat/linux/linux_mmap.h

Modified: head/sys/compat/linux/linux_mmap.c
==============================================================================
--- head/sys/compat/linux/linux_mmap.c	Tue Jan 21 17:45:49 2020	(r356947)
+++ head/sys/compat/linux/linux_mmap.c	Tue Jan 21 19:19:02 2020	(r356948)
@@ -114,6 +114,13 @@ linux_mmap_common(struct thread *td, uintptr_t addr, s
 		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.
 	 * We do this only for IA32 emulation as on native i386 this is does not

Modified: head/sys/compat/linux/linux_mmap.h
==============================================================================
--- head/sys/compat/linux/linux_mmap.h	Tue Jan 21 17:45:49 2020	(r356947)
+++ head/sys/compat/linux/linux_mmap.h	Tue Jan 21 19:19:02 2020	(r356948)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001211919.00LJJ3gW028307>