? *
Index: lib/libc/sys/mmap.2
===================================================================
RCS file: /cvs/src/lib/libc/sys/mmap.2,v
retrieving revision 1.59
diff -u -p -r1.59 mmap.2
--- lib/libc/sys/mmap.2	11 Feb 2018 07:30:59 -0000	1.59
+++ lib/libc/sys/mmap.2	16 Aug 2018 12:53:39 -0000
@@ -153,6 +153,9 @@ mappings)
 must be multiples of the page size.
 Existing mappings in the address range will be replaced.
 Use of this option is discouraged.
+.It Dv MAP_EXCL
+In combination with MAP_FIXED, the
+possible existing mapping won't be replaced.
 .It Dv MAP_STACK
 Indicate that the mapping is used as a stack.
 This flag must be used in combination with
Index: libexec/ld.so/library_mquery.c
===================================================================
RCS file: /cvs/src/libexec/ld.so/library_mquery.c,v
retrieving revision 1.58
diff -u -p -r1.58 library_mquery.c
--- libexec/ld.so/library_mquery.c	8 Dec 2017 05:25:20 -0000	1.58
+++ libexec/ld.so/library_mquery.c	16 Aug 2018 12:53:40 -0000
@@ -236,7 +236,7 @@ retry:
 
 		flags = MAP_PRIVATE;
 		if (LOFF + ld->moff != 0)
-			flags |= MAP_FIXED | __MAP_NOREPLACE;
+			flags |= MAP_FIXED | MAP_EXCL;
 
 		if (ld->foff < 0) {
 			fd = -1;
@@ -261,7 +261,7 @@ retry:
 			 */
 			res = _dl_mquery((void *)(LOFF + ld->moff),
 			    ROUND_PG(ld->size), ld->prot,
-			    flags & ~(MAP_FIXED | __MAP_NOREPLACE), fd, foff);
+			    flags & ~(MAP_FIXED | MAP_EXCL), fd, foff);
 
 			/*
 			 * If ld == lowld, then ld->start is just a hint and
Index: regress/sys/uvm/mmap_noreplace/mmap_noreplace.c
===================================================================
RCS file: /cvs/src/regress/sys/uvm/mmap_noreplace/mmap_noreplace.c,v
retrieving revision 1.1
diff -u -p -r1.1 mmap_noreplace.c
--- regress/sys/uvm/mmap_noreplace/mmap_noreplace.c	19 Jun 2014 19:34:22 -0000	1.1
+++ regress/sys/uvm/mmap_noreplace/mmap_noreplace.c	16 Aug 2018 12:53:41 -0000
@@ -66,9 +66,9 @@ main()
 	memset(p, 1, 3 * pagesize);
 	CHECK(ismemset(p, 1, 3 * pagesize));
 
-	/* Try to map over second page with __MAP_NOREPLACE; should fail. */
+	/* Try to map over second page with MAP_EXCL; should fail. */
 	CHECK_EQ(MAP_FAILED, mmap(p, pagesize, PROT_READ|PROT_WRITE,
-	    MAP_PRIVATE|MAP_ANON|MAP_FIXED|__MAP_NOREPLACE, -1, 0));
+	    MAP_PRIVATE|MAP_ANON|MAP_FIXED|MAP_EXCL, -1, 0));
 
 	/* Verify the pages are still set. */
 	CHECK(ismemset(p, 1, 3 * pagesize));
Index: sys/sys/mman.h
===================================================================
RCS file: /cvs/src/sys/sys/mman.h,v
retrieving revision 1.32
diff -u -p -r1.32 mman.h
--- sys/sys/mman.h	11 Feb 2018 05:11:50 -0000	1.32
+++ sys/sys/mman.h	16 Aug 2018 12:53:45 -0000
@@ -55,7 +55,7 @@
  * Other flags
  */
 #define	MAP_FIXED	0x0010	/* map addr must be exactly as requested */
-#define	__MAP_NOREPLACE	0x0800	/* fail if address not available */
+#define	MAP_EXCL	0x0800	/* fail if address not available */
 #define	MAP_ANON	0x1000	/* allocated from memory, swap space */
 #define	MAP_ANONYMOUS	MAP_ANON	/* alternate POSIX spelling */
 #define	__MAP_NOFAULT	0x2000
Index: sys/uvm/uvm_mmap.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_mmap.c,v
retrieving revision 1.151
diff -u -p -r1.151 uvm_mmap.c
--- sys/uvm/uvm_mmap.c	15 Aug 2018 20:22:13 -0000	1.151
+++ sys/uvm/uvm_mmap.c	16 Aug 2018 12:53:45 -0000
@@ -387,8 +387,8 @@ sys_mmap(struct proc *p, void *v, regist
 		return (EINVAL);
 	if ((flags & (MAP_SHARED|MAP_PRIVATE)) == (MAP_SHARED|MAP_PRIVATE))
 		return (EINVAL);
-	if ((flags & (MAP_FIXED|__MAP_NOREPLACE)) == __MAP_NOREPLACE)
-		return (EINVAL);
+	if ((flags & (MAP_FIXED|MAP_EXCL)) == MAP_EXCL)
+		return (EEXIST);
 	if (flags & MAP_STACK) {
 		if ((flags & (MAP_ANON|MAP_PRIVATE)) != (MAP_ANON|MAP_PRIVATE))
 			return (EINVAL);
@@ -1036,7 +1036,7 @@ uvm_mmapanon(vm_map_t map, vaddr_t *addr
 			return(EINVAL);
 
 		uvmflag |= UVM_FLAG_FIXED;
-		if ((flags & __MAP_NOREPLACE) == 0)
+		if ((flags & MAP_EXCL) == 0)
 			uvmflag |= UVM_FLAG_UNMAP;
 	}
 
@@ -1091,7 +1091,7 @@ uvm_mmapfile(vm_map_t map, vaddr_t *addr
 			return(EINVAL);
 
 		uvmflag |= UVM_FLAG_FIXED;
-		if ((flags & __MAP_NOREPLACE) == 0)
+		if ((flags & MAP_EXCL) == 0)
 			uvmflag |= UVM_FLAG_UNMAP;
 	}
 
