//===-- scudo_platform.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// Scudo platform specific definitions.
/// TODO(kostyak): add tests for the compile time defines.
///
//===----------------------------------------------------------------------===//

#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
# if SANITIZER_ANDROID
#  define SCUDO_SHARED_TSD_POOL_SIZE 2U
# else
#  define SCUDO_SHARED_TSD_POOL_SIZE 32U
# endif  // SANITIZER_ANDROID
#endif  // SCUDO_SHARED_TSD_POOL_SIZE

// The following allows the public interface functions to be disabled.
#ifndef SCUDO_CAN_USE_PUBLIC_INTERFACE
# define SCUDO_CAN_USE_PUBLIC_INTERFACE 1
#endif

// Hooks in the allocation & deallocation paths can become a security concern if
// implemented improperly, or if overwritten by an attacker. Use with caution.
#ifndef SCUDO_CAN_USE_HOOKS
# if SANITIZER_FUCHSIA
#  define SCUDO_CAN_USE_HOOKS 1
# else
#  define SCUDO_CAN_USE_HOOKS 0
# endif  // SANITIZER_FUCHSIA
#endif  // SCUDO_CAN_USE_HOOKS

namespace __scudo {

#if SANITIZER_CAN_USE_ALLOCATOR64
# if defined(__aarch64__) && SANITIZER_ANDROID
const uptr AllocatorSize = 0x4000000000ULL;  // 256G.
# elif defined(__aarch64__)
const uptr AllocatorSize = 0x10000000000ULL;  // 1T.
# else
const uptr AllocatorSize = 0x40000000000ULL;  // 4T.
# endif
#else
const uptr RegionSizeLog = SANITIZER_ANDROID ? 19 : 20;
#endif  // SANITIZER_CAN_USE_ALLOCATOR64

#if !defined(SCUDO_SIZE_CLASS_MAP)
# define SCUDO_SIZE_CLASS_MAP Dense
#endif

#define SIZE_CLASS_MAP_TYPE SIZE_CLASS_MAP_TYPE_(SCUDO_SIZE_CLASS_MAP)
#define SIZE_CLASS_MAP_TYPE_(T) SIZE_CLASS_MAP_TYPE__(T)
#define SIZE_CLASS_MAP_TYPE__(T) T##SizeClassMap

typedef SIZE_CLASS_MAP_TYPE SizeClassMap;

}  // namespace __scudo

#endif // SCUDO_PLATFORM_H_
