Protect explicit_bzero() from link-time optimization

Modern compiler toolchains are capable of optimizing even across
translation unit boundaries, so simply moving the memory clearing into
a separate function is not guaranteed to clear memory.

To avoid this, we take advantage of ELF weak symbol semantics, and
insert a call to an empty, weakly named function.  The semantics of
calling this function aren't determinable until load time, so the
compiler and linker need to keep the memset() call.

There are still ways a toolchain might defeat this trick (e.g.,
optimistically expecting the weak symbol to not be overloaded, and
only calling memset() if it is; promoting weak symbols to strong
symbols at link-time when emitting a static binary because they won't
be interposed; implementing load-time optimizations).  But at least
for the foreseeable future, these seem unlikely.

ok deraadt
loosen the spec for timingsafe functions slightly, so as to not
artificially constrain alternative implementations. ok deraadt
document why we explicit_bzero
Document that mmap() confirms to POSIX 2008, except that we generate
SIGSEGV instead of SIGBUS for page references beyond the end of a
mapped object.
Add back an #ifndef MAP_INHERIT_ZERO chunk to support the old getpid()
mechanism, to aid in portability to other systems as requested.
ok matthew
Move to a smaller rbytes buffer and skip a random part. Not to
improve the random stream itself (it doesn't), but to introduce
noise in the arc4random calling pattern. Thanks to matthew@ who
pointed out bias in a previous diff, ok deraadt@ matthew@
extra evil spaces snuck in over the last while
Revise wording to reflect that callers should always specify (exactly)
one of MAP_PRIVATE or MAP_SHARED, as required by POSIX.  However, also
caveat that currently OpenBSD doesn't strictly enforce this behavior.
Split out mmap's compatibility flags into a separate section, so users
aren't misled into thinking they're useful on OpenBSD.
OpenBSD supports mmap() on block special files too.
Cleanup ioctl.2 slightly:

- Markup ioctl argument types with Fa
- Be clearer that ioctl arguments are pointers to ints.

Similar changes to follow for manual pages that describe
device-specific ioctl commands.

Discussed with jmc and schwarze.
re-init and init code paths are now more shared, so the getpid()-based
portable code path must handle that; with brent cook
zap unneccessary punctuation;
Sync description of PROT_* flags between mmap.2 and mprotect.2

ok guenther
Various small typographic fixes for mman.h manual pages:

Use .Fn instead of .Nm as appropriate
Use .In for include lines
Use .Rv -std where possible
Use .Xr to refer to functions from other manual pages
Remove extraneous sys/types.h include

More substantive changes to follow.

Discussed with schwarze
rework some fflush text, as requested
From: Edward
tweaks
From: Tim van der Molen
Document that shm_open() et al have been available since OpenBSD 5.4
decouple struct uvmexp into a new file, so that uvm_extern.h and sysctl.h
don't need to be married.
ok guenther miod beck jsing kettenis
changes to improve portability

ok beck@ deraadt@ jsing@ guenther@
Clean up after arc4random u_int32_t uint32_t change
ok jsing@