| //===-- scudo_platform.h ----------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// Scudo platform specific definitions. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SCUDO_PLATFORM_H_ |
| #define SCUDO_PLATFORM_H_ |
| |
| #include "sanitizer_common/sanitizer_allocator.h" |
| |
| #if !SANITIZER_LINUX && !SANITIZER_FUCHSIA |
| # error "The Scudo hardened allocator is not supported on this platform." |
| #endif |
| |
| #define SCUDO_TSD_EXCLUSIVE_SUPPORTED (!SANITIZER_ANDROID && !SANITIZER_FUCHSIA) |
| |
| #ifndef SCUDO_TSD_EXCLUSIVE |
| // SCUDO_TSD_EXCLUSIVE wasn't defined, use a default TSD model for the platform. |
| # if SANITIZER_ANDROID || SANITIZER_FUCHSIA |
| // Android and Fuchsia use a pool of TSDs shared between threads. |
| # define SCUDO_TSD_EXCLUSIVE 0 |
| # elif SANITIZER_LINUX && !SANITIZER_ANDROID |
| // Non-Android Linux use an exclusive TSD per thread. |
| # define SCUDO_TSD_EXCLUSIVE 1 |
| # else |
| # error "No default TSD model defined for this platform." |
| # endif // SANITIZER_ANDROID || SANITIZER_FUCHSIA |
| #endif // SCUDO_TSD_EXCLUSIVE |
| |
| // If the exclusive TSD model is chosen, make sure the platform supports it. |
| #if SCUDO_TSD_EXCLUSIVE && !SCUDO_TSD_EXCLUSIVE_SUPPORTED |
| # error "The exclusive TSD model is not supported on this platform." |
| #endif |
| |
| // Maximum number of TSDs that can be created for the Shared model. |
| #ifndef SCUDO_SHARED_TSD_POOL_SIZE |
| # define SCUDO_SHARED_TSD_POOL_SIZE 32U |
| #endif // SCUDO_SHARED_TSD_POOL_SIZE |
| |
| namespace __scudo { |
| |
| #if SANITIZER_CAN_USE_ALLOCATOR64 |
| # if defined(__aarch64__) && SANITIZER_ANDROID |
| const uptr AllocatorSize = 0x2000000000ULL; // 128G. |
| typedef VeryCompactSizeClassMap SizeClassMap; |
| # elif defined(__aarch64__) |
| const uptr AllocatorSize = 0x10000000000ULL; // 1T. |
| typedef CompactSizeClassMap SizeClassMap; |
| # else |
| const uptr AllocatorSize = 0x40000000000ULL; // 4T. |
| typedef CompactSizeClassMap SizeClassMap; |
| # endif |
| #else |
| # if SANITIZER_ANDROID |
| static const uptr RegionSizeLog = 19; |
| typedef VeryCompactSizeClassMap SizeClassMap; |
| # else |
| static const uptr RegionSizeLog = 20; |
| typedef CompactSizeClassMap SizeClassMap; |
| # endif |
| #endif // SANITIZER_CAN_USE_ALLOCATOR64 |
| |
| } // namespace __scudo |
| |
| #endif // SCUDO_PLATFORM_H_ |