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 <sys/mman.h> header file containing that spelling
where it was introduced before December 5, 1990.

Yours,
  Ingo


Here is version 6 of BSD <sys/mman.h> 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_FILE        0x0001  /* mapped from a file or device */
#define MAP_ANON        0x0002  /* allocated from memory, swap space */
#define MAP_TYPE        0x000f  /* mask for type field */

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

/*
 * Other flags
 */
#define MAP_FIXED       0x0100  /* map addr must be exactly as requested */
#define MAP_NOEXTEND    0x0200  /* 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 */

Reply via email to