Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-07-01 Thread Matthew Dempsky
On Mon, Jun 30, 2014 at 2:47 PM, Ingo Schwarze  wrote:
> so in a nutshell, mmap(2) was originally a BSD idea and first implemented
> in SunOS?  And there is no doubt that *BSD always had MAP_ANON and never
> MAP_ANONYMOUS and that SunOS primarily defines MAP_ANON and MAP_ANONYMOUS
> only for "/* (source compatibility) */", right?  And that the earliest
> occurence of MAP_ANONYMOUS we found so far is Linux (1994)?  And that
> 4.4BSD was released with MAP_ANON before that (1993)...

I've reaffirmed that OpenBSD's stance is that we'd prefer that
MAP_ANON be standardized, explained the commit history of MAP_ANON and
MAP_ANONYMOUS (thanks Ingo!), and also pointed out that "Advanced
Programming in the UNIX Environment" recommends MAP_ANON:
http://austingroupbugs.net/view.php?id=850#c2299

I'll update the thread if anything new develops.  Next Austin Group
teleconference is July 10.



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Theo de Raadt
>I don't think MAP_ANONYMOUS is being proposed for standardization
>because it's perceived to be of older origin than MAP_ANON or
>anything.  I'm pretty sure the focus is instead because it's perceived
>to have greater 'market share' among present day systems and
>applications.

Oh come on, the pussy footing is ridiculous.

Let's call it what it is.  The group is run a handful of Linux
proxies.  They do not care if incompatibilities are introduced,
as long as they are not introduced for Linux.



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Matthew Dempsky
On Mon, Jun 30, 2014 at 2:47 PM, Ingo Schwarze  wrote:
>> mmap() "first appeared" in 4.1cBSD [mmap.2] and was scheduled for
>> inclusion in 4.2BSD (1983) [UVM thesis, p36], but didn't "actually
>> appear" until the 1993 4.4BSD release [UVM thesis, p36].
>
> At least MAP_ANON is definitely a lot older than 1993.
>
> The original CSRG commit introducing it looks like this:
>
>   sys/sys/SCCS/s.mman.h:
>   As 00038/00013/00010
>   Ad D 7.2 90/12/05 15:28:56 mckusick 6 5
>   Ac update for new VM
>
> And that commit did make it into the 4.3BSD Net/2 release,
> published on August 20, 1991 (as seen on Kirk's CSRG archive CD).

Thanks.  I think that's generally consistent with the years I quoted
above, though I suppose the UVM thesis's "actually appear" wording is
arguable.

Maybe CDC was referring to how 4.3BSD was a development release,
whereas 4.4BSD was a production release?  ("This release represents an
intermediate point in the development of 4.4BSD; [...] This
distribution is NOT intended to be used on production systems"
http://ftp.netbsd.org/pub/NetBSD/misc/release/BSD/BSD-Net1)

> So i'd challenge anybody arguing for MAP_ANONYMOUS to show
> a published  header file containing that spelling
> where it was introduced before December 5, 1990.

I don't think MAP_ANONYMOUS is being proposed for standardization
because it's perceived to be of older origin than MAP_ANON or
anything.  I'm pretty sure the focus is instead because it's perceived
to have greater 'market share' among present day systems and
applications.



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Ingo Schwarze
Hi Matthew,

so in a nutshell, mmap(2) was originally a BSD idea and first implemented
in SunOS?  And there is no doubt that *BSD always had MAP_ANON and never
MAP_ANONYMOUS and that SunOS primarily defines MAP_ANON and MAP_ANONYMOUS
only for "/* (source compatibility) */", right?  And that the earliest
occurence of MAP_ANONYMOUS we found so far is Linux (1994)?  And that
4.4BSD was released with MAP_ANON before that (1993)...

That does look like a bunch of arguments for the POSIX crowd to swallow,
i think.

Besides, i dug up some more.

Matthew Dempsky wrote on Mon, Jun 30, 2014 at 01:57:20PM -0700:

> mmap() "first appeared" in 4.1cBSD [mmap.2] and was scheduled for
> inclusion in 4.2BSD (1983) [UVM thesis, p36], but didn't "actually
> appear" until the 1993 4.4BSD release [UVM thesis, p36].

At least MAP_ANON is definitely a lot older than 1993.

The original CSRG commit introducing it looks like this:

  sys/sys/SCCS/s.mman.h:
  As 00038/00013/00010
  Ad D 7.2 90/12/05 15:28:56 mckusick 6 5
  Ac update for new VM

And that commit did make it into the 4.3BSD Net/2 release,
published on August 20, 1991 (as seen on Kirk's CSRG archive CD).

So i'd challenge anybody arguing for MAP_ANONYMOUS to show
a published  header file containing that spelling
where it was introduced before December 5, 1990.

Yours,
  Ingo


Here is version 6 of BSD  as of December 5, 1990:

/*
 * Copyright (c) 1982, 1986 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 * %sccs.include.redist.c%
 *
 *  %W% (Berkeley) %G%
 */

/*
 * Protections are chosen from these bits, or-ed together
 */
#define PROT_READ   0x04/* pages can be read */
#define PROT_WRITE  0x02/* pages can be written */
#define PROT_EXEC   0x01/* pages can be executed */

/*
 * Flags contain mapping type, sharing type and options.
 * Mapping type; choose one
 */
#define MAP_FILE0x0001  /* mapped from a file or device */
#define MAP_ANON0x0002  /* allocated from memory, swap space */
#define MAP_TYPE0x000f  /* mask for type field */

/*
 * Sharing types; choose one
 */
#define MAP_COPY0x0020  /* "copy" region at mmap time */
#define MAP_SHARED  0x0010  /* share changes */
#define MAP_PRIVATE 0x  /* changes are private */

/*
 * Other flags
 */
#define MAP_FIXED   0x0100  /* map addr must be exactly as requested */
#define MAP_NOEXTEND0x0200  /* for MAP_FILE, don't change file size */
#define MAP_HASSEMPHORE 0x0400  /* region may contain semaphores */
#define MAP_INHERIT 0x0800  /* region is retained after exec */

/*
 * Advice to madvise
 */
#define MADV_NORMAL 0   /* no further special treatment */
#define MADV_RANDOM 1   /* expect random page references */
#define MADV_SEQUENTIAL 2   /* expect sequential page references */
#define MADV_WILLNEED   3   /* will need these pages */
#define MADV_DONTNEED   4   /* dont need these pages */



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Matthew Dempsky
On Mon, Jun 30, 2014 at 11:31 AM, Mark Kettenis  wrote:
> Yes, I'm saying that this should affect POSIX's standardization.
> Solaris is where mmap(2) came from.

The full history is a bit more complicated though.  From what I've
managed to uncover over the past few days so far:

mmap() "first appeared" in 4.1cBSD [mmap.2] and was scheduled for
inclusion in 4.2BSD (1983) [UVM thesis, p36], but didn't "actually
appear" until the 1993 4.4BSD release [UVM thesis, p36].

In the mean time, it was independently reimplemented for SunOS 4 [UVM
thesis, p36], and released in 1988 [Wikipedia].  However, SunOS didn't
implement MAP_ANON, and instead required users to pass a file
descriptor for /dev/zero.

In 1994 (prior to Linux's 1.0 release), Linus added support for
MAP_ANONYMOUS 
[https://kernel.googlesource.com/pub/scm/linux/kernel/git/nico/archive/+/0b5e8609bf7e6899c1fea30aa467812d488b6c11%5E%21/#F3].

SunOS 5.8 (Feb 2000) added support for MAP_ANON
[http://www.freebsd.org/cgi/man.cgi?query=mmap&apropos=0&sektion=0&manpath=SunOS+5.8&arch=default&format=html].
I'm not sure when it added MAP_ANONYMOUS support.

Also according to Wikipedia, HP-UX is an SVR2 derivative and AIX is an
SVR3 derivative.  SVR2 and SVR3 were released in 1984 and 1986,
respectively, so neither should have inherited MAP_ANON/MAP_ANONYMOUS
from SVR/SunOS.  I'm not sure when they picked them up.

> Also, look at:
>
>   

Yeah, I've seen that, though despite the comment pointing out MAP_ANON
is more common, it instead adds a "#define MAP_ANONYMOUS MAP_ANON" if
it notices MAP_ANONYMOUS isn't provided.  So ironically, that macro
package's widespread use is indicative of code that uses MAP_ANONYMOUS
instead of MAP_ANON.  :-/



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Mark Kettenis
> Date: Mon, 30 Jun 2014 10:53:00 -0700
> From: Matthew Dempsky 
> 
> On Mon, Jun 30, 2014 at 10:42 AM, Mark Kettenis  
> wrote:
> > Solaris documents MAP_ANON in its man page, and defines MAP_ANONYMOUS
> > as MAP_ANON for source compatibility.
> 
> Yep, but what about it?  Are you suggesting that should affect POSIX's
> standardization, or that we should do the same thing?  I suspect if
> POSIX standardizes MAP_ANONYMOUS, that Solaris would switch to
> documenting MAP_ANONYMOUS and providing MAP_ANON for source compat,
> no?

Yes, I'm saying that this should affect POSIX's standardization.
Solaris is where mmap(2) came from.

Also, look at:

  

which contains the following comment:

# Detect how mmap can be used to create anonymous (not file-backed) memory
# mappings.
# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
# and MAP_ANON exist and have the same value.
# - On HP-UX, only MAP_ANONYMOUS exists.
# - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
# used.

This suggests that there is actually a clear majority of systems where
only MAP_ANON exists.  OK, UnixWare isn't listed here, and perhaps it
doesn't provide MAP_ANON for compatibility.  But frankly, UnixWare is
long dead.  Perhaps a few more systems in the "only MAP_ANON exists"
category have moved up to the the "both MAP_ANONYMOUS and MAP_ANON"
exist category.  But MacOS X 10.6 is still firmly in the "only
MAP_ANON exists" category.  And I'd say MacOS X has a much larger
installed base than HP-UX.

Regardless of what POSIX decides, I think we should add MAP_ANONYMOUS,
but stay true to our heritage and keep MAP_ANON as the primary #define
and in the man page.



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Matthew Dempsky
On Mon, Jun 30, 2014 at 10:42 AM, Mark Kettenis  wrote:
> Solaris documents MAP_ANON in its man page, and defines MAP_ANONYMOUS
> as MAP_ANON for source compatibility.

Yep, but what about it?  Are you suggesting that should affect POSIX's
standardization, or that we should do the same thing?  I suspect if
POSIX standardizes MAP_ANONYMOUS, that Solaris would switch to
documenting MAP_ANONYMOUS and providing MAP_ANON for source compat,
no?



Re: Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Mark Kettenis
> Date: Mon, 30 Jun 2014 10:22:08 -0700
> From: Matthew Dempsky 
> 
> I filed an enhancement request with the Austin Group to standardize an
> mmap() flag for mapping anonymous memory.  I proposed standardizing
> MAP_ANON, but the current proposal is to standardize MAP_ANONYMOUS
> instead, as that seems to be the more common definition and usage:
> 
> http://austingroupbugs.net/view.php?id=850
> 
> All else equal, I prefer MAP_ANON as it's shorter and it's also the
> original BSD name; but I prefer having a standardized name even more.
> If anyone objects and has convincing arguments for why POSIX should
> standardize MAP_ANON instead, feel free to either comment on the above
> bug, or just express them here and I'll proxy them appropriately.

Solaris documents MAP_ANON in its man page, and defines MAP_ANONYMOUS
as MAP_ANON for source compatibility.



Rename MAP_ANON to MAP_ANONYMOUS

2014-06-30 Thread Matthew Dempsky
I filed an enhancement request with the Austin Group to standardize an
mmap() flag for mapping anonymous memory.  I proposed standardizing
MAP_ANON, but the current proposal is to standardize MAP_ANONYMOUS
instead, as that seems to be the more common definition and usage:

http://austingroupbugs.net/view.php?id=850

All else equal, I prefer MAP_ANON as it's shorter and it's also the
original BSD name; but I prefer having a standardized name even more.
If anyone objects and has convincing arguments for why POSIX should
standardize MAP_ANON instead, feel free to either comment on the above
bug, or just express them here and I'll proxy them appropriately.

Otherwise, diff below renames MAP_ANON to MAP_ANONYMOUS, and redefines
MAP_ANON as an alias for MAP_ANONYMOUS.


Index: sys/sys/mman.h
===
RCS file: /home/matthew/cvs-mirror/cvs/src/sys/sys/mman.h,v
retrieving revision 1.25
diff -u -p -r1.25 mman.h
--- sys/sys/mman.h  27 Jun 2014 20:50:43 -  1.25
+++ sys/sys/mman.h  27 Jun 2014 21:35:47 -
@@ -56,7 +56,8 @@
  */
 #defineMAP_FIXED   0x0010  /* map addr must be exactly as 
requested */
 #define__MAP_NOREPLACE 0x0800  /* fail if address not available */
-#defineMAP_ANON0x1000  /* allocated from memory, swap space */
+#defineMAP_ANONYMOUS   0x1000  /* allocated from memory, swap space */
+#defineMAP_ANONMAP_ANONYMOUS   /* original BSD spelling */
 
 #defineMAP_FLAGMASK0x1ff7
 
Index: lib/libc/sys/mmap.2
===
RCS file: /home/matthew/cvs-mirror/cvs/src/lib/libc/sys/mmap.2,v
retrieving revision 1.48
diff -u -p -r1.48 mmap.2
--- lib/libc/sys/mmap.2 27 Jun 2014 22:51:20 -  1.48
+++ lib/libc/sys/mmap.2 28 Jun 2014 00:01:25 -
@@ -120,7 +120,7 @@ Sharing, mapping type, and options are s
 .Fa flags
 argument by OR'ing the following values.
 Exactly one of the first two values must be specified:
-.Bl -tag -width MAP_PRIVATE -offset indent
+.Bl -tag -width MAP_ANONYMOUS -offset indent
 .It Dv MAP_PRIVATE
 Modifications are private.
 .It Dv MAP_SHARED
@@ -128,11 +128,11 @@ Modifications are shared.
 .El
 .Pp
 Any combination of the following flags may additionally be used:
-.Bl -tag -width MAP_PRIVATE -offset indent
-.It Dv MAP_ANON
+.Bl -tag -width MAP_ANONYMOUS -offset indent
+.It Dv MAP_ANONYMOUS
 Map anonymous memory not associated with any specific file.
 The file descriptor used for creating
-.Dv MAP_ANON
+.Dv MAP_ANONYMOUS
 must currently be \-1 indicating no name is associated with the
 region.
 .It Dv MAP_FIXED
@@ -156,7 +156,16 @@ source compatibility with code written f
 but are not recommended for use in new
 .Ox
 code:
-.Bl -tag -width MAP_PRIVATE -offset indent
+.Bl -tag -width MAP_ANONYMOUS -offset indent
+.It Dv MAP_ANON
+Original name for
+.Dv MAP_ANONYMOUS ,
+as introduced by
+.Bx .
+On
+.Ox
+this is an alias for
+.Dv MAP_ANONYMOUS .
 .It Dv MAP_COPY
 Modifications are private and, unlike
 .Dv MAP_PRIVATE ,