diff options
author | Rainer Orth <ro@gcc.gnu.org> | 2022-02-09 09:15:41 +0100 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2022-02-09 09:15:41 +0100 |
commit | 0e4b214b8c404d7e2f67301858ea05c209a27433 (patch) | |
tree | 4ffe8ca72d3bc2c5dd40fd55089e44765e3c3163 /llvm/unittests/Support/ThreadLocalTest.cpp | |
parent | 0d4b6f1f4b7b5f20698aae42a616b1bb3e18ef85 (diff) | |
download | llvm-0e4b214b8c404d7e2f67301858ea05c209a27433.zip llvm-0e4b214b8c404d7e2f67301858ea05c209a27433.tar.gz llvm-0e4b214b8c404d7e2f67301858ea05c209a27433.tar.bz2 |
[sanitizer_common] Don't try to unmap unaligned memory
Enabling `sanitizer_common` tests on Solaris (D91606
<https://reviews.llvm.org/D91606>) and SPARC (D91608
<https://reviews.llvm.org/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 problem is 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 aligning the end of the mapping to the pagesize.
With D91827 <https://reviews.llvm.org/D91827> added, the test `PASS`es on
`sparcv9-sun-solaris2.11`.
Differential Revision: https://reviews.llvm.org/D91615
Diffstat (limited to 'llvm/unittests/Support/ThreadLocalTest.cpp')
0 files changed, 0 insertions, 0 deletions