1326943Sdim//===-- scudo_platform.h ----------------------------------------*- C++ -*-===// 2326943Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6326943Sdim// 7326943Sdim//===----------------------------------------------------------------------===// 8326943Sdim/// 9326943Sdim/// Scudo platform specific definitions. 10326943Sdim/// TODO(kostyak): add tests for the compile time defines. 11326943Sdim/// 12326943Sdim//===----------------------------------------------------------------------===// 13326943Sdim 14326943Sdim#ifndef SCUDO_PLATFORM_H_ 15326943Sdim#define SCUDO_PLATFORM_H_ 16326943Sdim 17326943Sdim#include "sanitizer_common/sanitizer_allocator.h" 18326943Sdim 19326943Sdim#if !SANITIZER_LINUX && !SANITIZER_FUCHSIA 20326943Sdim# error "The Scudo hardened allocator is not supported on this platform." 21326943Sdim#endif 22326943Sdim 23326943Sdim#define SCUDO_TSD_EXCLUSIVE_SUPPORTED (!SANITIZER_ANDROID && !SANITIZER_FUCHSIA) 24326943Sdim 25326943Sdim#ifndef SCUDO_TSD_EXCLUSIVE 26326943Sdim// SCUDO_TSD_EXCLUSIVE wasn't defined, use a default TSD model for the platform. 27326943Sdim# if SANITIZER_ANDROID || SANITIZER_FUCHSIA 28326943Sdim// Android and Fuchsia use a pool of TSDs shared between threads. 29326943Sdim# define SCUDO_TSD_EXCLUSIVE 0 30326943Sdim# elif SANITIZER_LINUX && !SANITIZER_ANDROID 31326943Sdim// Non-Android Linux use an exclusive TSD per thread. 32326943Sdim# define SCUDO_TSD_EXCLUSIVE 1 33326943Sdim# else 34326943Sdim# error "No default TSD model defined for this platform." 35326943Sdim# endif // SANITIZER_ANDROID || SANITIZER_FUCHSIA 36326943Sdim#endif // SCUDO_TSD_EXCLUSIVE 37326943Sdim 38326943Sdim// If the exclusive TSD model is chosen, make sure the platform supports it. 39326943Sdim#if SCUDO_TSD_EXCLUSIVE && !SCUDO_TSD_EXCLUSIVE_SUPPORTED 40326943Sdim# error "The exclusive TSD model is not supported on this platform." 41326943Sdim#endif 42326943Sdim 43326943Sdim// Maximum number of TSDs that can be created for the Shared model. 44326943Sdim#ifndef SCUDO_SHARED_TSD_POOL_SIZE 45341825Sdim# if SANITIZER_ANDROID 46341825Sdim# define SCUDO_SHARED_TSD_POOL_SIZE 2U 47341825Sdim# else 48341825Sdim# define SCUDO_SHARED_TSD_POOL_SIZE 32U 49341825Sdim# endif // SANITIZER_ANDROID 50326943Sdim#endif // SCUDO_SHARED_TSD_POOL_SIZE 51326943Sdim 52326943Sdim// The following allows the public interface functions to be disabled. 53326943Sdim#ifndef SCUDO_CAN_USE_PUBLIC_INTERFACE 54326943Sdim# define SCUDO_CAN_USE_PUBLIC_INTERFACE 1 55326943Sdim#endif 56326943Sdim 57341825Sdim// Hooks in the allocation & deallocation paths can become a security concern if 58341825Sdim// implemented improperly, or if overwritten by an attacker. Use with caution. 59341825Sdim#ifndef SCUDO_CAN_USE_HOOKS 60341825Sdim# if SANITIZER_FUCHSIA 61341825Sdim# define SCUDO_CAN_USE_HOOKS 1 62341825Sdim# else 63341825Sdim# define SCUDO_CAN_USE_HOOKS 0 64341825Sdim# endif // SANITIZER_FUCHSIA 65341825Sdim#endif // SCUDO_CAN_USE_HOOKS 66341825Sdim 67326943Sdimnamespace __scudo { 68326943Sdim 69326943Sdim#if SANITIZER_CAN_USE_ALLOCATOR64 70326943Sdim# if defined(__aarch64__) && SANITIZER_ANDROID 71326943Sdimconst uptr AllocatorSize = 0x4000000000ULL; // 256G. 72326943Sdim# elif defined(__aarch64__) 73326943Sdimconst uptr AllocatorSize = 0x10000000000ULL; // 1T. 74326943Sdim# else 75326943Sdimconst uptr AllocatorSize = 0x40000000000ULL; // 4T. 76326943Sdim# endif 77326943Sdim#else 78326943Sdimconst uptr RegionSizeLog = SANITIZER_ANDROID ? 19 : 20; 79326943Sdim#endif // SANITIZER_CAN_USE_ALLOCATOR64 80326943Sdim 81326943Sdim#if !defined(SCUDO_SIZE_CLASS_MAP) 82353358Sdim# define SCUDO_SIZE_CLASS_MAP Dense 83326943Sdim#endif 84326943Sdim 85326943Sdim#define SIZE_CLASS_MAP_TYPE SIZE_CLASS_MAP_TYPE_(SCUDO_SIZE_CLASS_MAP) 86326943Sdim#define SIZE_CLASS_MAP_TYPE_(T) SIZE_CLASS_MAP_TYPE__(T) 87326943Sdim#define SIZE_CLASS_MAP_TYPE__(T) T##SizeClassMap 88326943Sdim 89326943Sdimtypedef SIZE_CLASS_MAP_TYPE SizeClassMap; 90326943Sdim 91326943Sdim} // namespace __scudo 92326943Sdim 93326943Sdim#endif // SCUDO_PLATFORM_H_ 94