brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 4c4ceb8 Raw
120 lines · cpp
1//===-- allocator_config_test.cpp -------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "tests/scudo_unit_test.h"10 11#include "allocator_config.h"12#include "allocator_config_wrapper.h"13#include "common.h"14#include "secondary.h"15 16#include <type_traits>17 18struct TestBaseConfig {19  template <typename> using TSDRegistryT = void;20  template <typename> using PrimaryT = void;21  template <typename> using SecondaryT = void;22};23 24struct TestBaseConfigEnableOptionalFlag : public TestBaseConfig {25  static const bool MaySupportMemoryTagging = true;26  // Use the getter to avoid the test to `use` the address of static const27  // variable (which requires additional explicit definition).28  static bool getMaySupportMemoryTagging() { return MaySupportMemoryTagging; }29};30 31struct TestBasePrimaryConfig {32  using SizeClassMap = void;33  static const scudo::uptr RegionSizeLog = 18U;34  static const scudo::uptr GroupSizeLog = 18U;35  static const scudo::s32 MinReleaseToOsIntervalMs = INT32_MIN;36  static const scudo::s32 MaxReleaseToOsIntervalMs = INT32_MAX;37  typedef scudo::uptr CompactPtrT;38  static const scudo::uptr CompactPtrScale = 0;39  static const scudo::uptr MapSizeIncrement = 1UL << 18;40};41 42struct TestPrimaryConfig : public TestBaseConfig {43  struct Primary : TestBasePrimaryConfig {};44};45 46struct TestPrimaryConfigEnableOptionalFlag : public TestBaseConfig {47  struct Primary : TestBasePrimaryConfig {48    static const bool EnableRandomOffset = true;49    static bool getEnableRandomOffset() { return EnableRandomOffset; }50  };51};52 53struct TestPrimaryConfigEnableOptionalType : public TestBaseConfig {54  struct DummyConditionVariable {};55 56  struct Primary : TestBasePrimaryConfig {57    using ConditionVariableT = DummyConditionVariable;58  };59};60 61struct TestSecondaryConfig : public TestPrimaryConfig {62  struct Secondary {63    template <typename Config>64    using CacheT = scudo::MapAllocatorNoCache<Config>;65  };66};67 68struct TestSecondaryCacheConfigEnableOptionalFlag : public TestPrimaryConfig {69  struct Secondary {70    struct Cache {71      static const scudo::u32 EntriesArraySize = 256U;72      static scudo::u32 getEntriesArraySize() { return EntriesArraySize; }73    };74    template <typename T> using CacheT = scudo::MapAllocatorCache<T>;75  };76};77 78TEST(ScudoAllocatorConfigTest, VerifyOptionalFlags) {79  // Test the top level allocator optional config.80  //81  // `MaySupportMemoryTagging` is default off.82  EXPECT_FALSE(scudo::BaseConfig<TestBaseConfig>::getMaySupportMemoryTagging());83  EXPECT_EQ(scudo::BaseConfig<84                TestBaseConfigEnableOptionalFlag>::getMaySupportMemoryTagging(),85            TestBaseConfigEnableOptionalFlag::getMaySupportMemoryTagging());86 87  // Test primary optional config.88  //89  // `EnableRandomeOffset` is default off.90  EXPECT_FALSE(91      scudo::PrimaryConfig<TestPrimaryConfig>::getEnableRandomOffset());92  EXPECT_EQ(93      scudo::PrimaryConfig<94          TestPrimaryConfigEnableOptionalFlag>::getEnableRandomOffset(),95      TestPrimaryConfigEnableOptionalFlag::Primary::getEnableRandomOffset());96 97  // `ConditionVariableT` is default off.98  EXPECT_FALSE(99      scudo::PrimaryConfig<TestPrimaryConfig>::hasConditionVariableT());100  EXPECT_TRUE(scudo::PrimaryConfig<101              TestPrimaryConfigEnableOptionalType>::hasConditionVariableT());102  EXPECT_TRUE((std::is_same_v<103               typename scudo::PrimaryConfig<104                   TestPrimaryConfigEnableOptionalType>::ConditionVariableT,105               typename TestPrimaryConfigEnableOptionalType::Primary::106                   ConditionVariableT>));107 108  // Test secondary cache optional config.109  using NoCacheConfig =110      scudo::SecondaryConfig<TestSecondaryConfig>::CacheConfig;111  // `EntriesArraySize` is default 0.112  EXPECT_EQ(NoCacheConfig::getEntriesArraySize(), 0U);113 114  using CacheConfig = scudo::SecondaryConfig<115      TestSecondaryCacheConfigEnableOptionalFlag>::CacheConfig;116  EXPECT_EQ(CacheConfig::getEntriesArraySize(),117            TestSecondaryCacheConfigEnableOptionalFlag::Secondary::Cache::118                getEntriesArraySize());119}120