[sanitizer] MmapAlignedOrDie changes to reduce fragmentation

Authored by cryptoad on Jun 14 2017, 8:32 AM.


[sanitizer] MmapAlignedOrDie changes to reduce fragmentation

The reasoning behind this change is explained in D33454, which unfortunately
broke the Windows version (due to the platform not supporting partial unmapping
of a memory region).

This new approach changes MmapAlignedOrDie to allow for the specification of
a padding_chunk. If non-null, and the initial allocation is aligned, this
padding chunk will hold the address of the extra memory (of alignment bytes).
This allows AllocateRegion to get 2 regions if the memory is aligned
properly, and thus help reduce fragmentation (and saves on unmapping
operations). As with the initial D33454, we use a stash in the 32-bit Primary
to hold those extra regions and return them on the fast-path.

The Windows version of MmapAlignedOrDie will always return a 0
padding_chunk if one was requested.

Reviewers: alekseyshl, dvyukov, kcc

Reviewed By: alekseyshl

Subscribers: llvm-commits, kubamracek

Differential Revision: https://reviews.llvm.org/D34152

llvm-svn: 305391