Introduce `AddressSpaceView` template parameter to `SizeClassAllocator32`, `FlatByteM...
authorDan Liew <dan@su-root.co.uk>
Fri, 14 Dec 2018 09:03:18 +0000 (09:03 +0000)
committerDan Liew <dan@su-root.co.uk>
Fri, 14 Dec 2018 09:03:18 +0000 (09:03 +0000)
commit41fec1bfc58783f136f09c90b0f1a88c16703e6c
tree60c46a1d12c7f199acc642d2e942a21fadbd7283
parent257ce3871e5b94e3fa0db2a3f4abd0b3c491830c
Introduce `AddressSpaceView` template parameter to `SizeClassAllocator32`, `FlatByteMap`, and `TwoLevelByteMap`.

Summary:
This is a follow up patch to r346956 for the `SizeClassAllocator32`
allocator.

This patch makes `AddressSpaceView` a template parameter both to the
`ByteMap` implementations (but makes `LocalAddressSpaceView` the
default), some `AP32` implementations and is used in `SizeClassAllocator32`.
The actual changes to `ByteMap` implementations and
`SizeClassAllocator32` are very simple. However the patch is large
because it requires changing all the `AP32` definitions, and users of
those definitions.

For ASan and LSan we make `AP32` and `ByteMap` templateds type that take
a single `AddressSpaceView` argument. This has been done because we will
instantiate the allocator with a type that isn't `LocalAddressSpaceView`
in the future patches. For the allocators used in the other sanitizers
(i.e. HWAsan, MSan, Scudo, and TSan) use of `LocalAddressSpaceView` is
hard coded because we do not intend to instantiate the allocators with
any other type.

In the cases where untemplated types have become templated on a single
`AddressSpaceView` parameter (e.g. `PrimaryAllocator`) their name has
been changed to have a `ASVT` suffix (Address Space View Type) to
indicate they are templated.  The only exception to this are the `AP32`
types due to the desire to keep the type name as short as possible.

In order to check that template is instantiated in the correct a way a
`static_assert(...)` has been added that checks that the
`AddressSpaceView` type used by `Params::ByteMap::AddressSpaceView` matches
the `Params::AddressSpaceView`. This uses the new `sanitizer_type_traits.h`
header.

rdar://problem/45284065

Reviewers: kcc, dvyukov, vitalybuka, cryptoad, eugenis, kubamracek, george.karpenkov

Subscribers: mgorny, llvm-commits, #sanitizers

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

llvm-svn: 349138
compiler-rt/lib/asan/asan_allocator.h
compiler-rt/lib/hwasan/hwasan_allocator.h
compiler-rt/lib/lsan/lsan_allocator.h
compiler-rt/lib/msan/msan_allocator.cc
compiler-rt/lib/sanitizer_common/sanitizer_allocator.h
compiler-rt/lib/sanitizer_common/sanitizer_allocator_bytemap.h
compiler-rt/lib/sanitizer_common/sanitizer_allocator_internal.h
compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h
compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator_test.cc
compiler-rt/lib/scudo/scudo_allocator.h
compiler-rt/lib/tsan/rtl/tsan_rtl.h