Enabling sanitizer_common tests on Solaris (D91606) and SPARC (D91608) uncovered a sparcv9 failure
SanitizerCommon-Unit :: ./Sanitizer-sparcv9-Test/CompactRingBuffer.int64
like this:
[ RUN ] CompactRingBuffer.int64 ==24576==ERROR: SanitizerTool failed to deallocate 0x2000 (8192) bytes at address 0xffffffff7f59b000 ==24576==Sanitizer CHECK failed: /vol/llvm/src/llvm-project/local/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp:61 (("unable to unmap" && 0)) != (0) (0, 0)
The problemis that the original allocation via MmapAlignedOrDieOnFatalError is for 4 kB, but the Solaris/sparcv9 pagesize is 8 kB. So the initial allocation is for 12 kB, rounded to a multiple of the pagesize. Afterwards, the unneeded rest is unmapped again, but this fails since the address is not pagesize-aligned.
This patch avoids this by only unmapping correctly aligned memory.
The patch still FAILs, but for a different reason, and this part of the issue is generic.
map_res is just from MMap, it must be aligned?