Path: blob/main/contrib/llvm-project/compiler-rt/lib/scudo/standalone/options.h
35291 views
//===-- options.h -----------------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef SCUDO_OPTIONS_H_9#define SCUDO_OPTIONS_H_1011#include "atomic_helpers.h"12#include "common.h"13#include "memtag.h"1415namespace scudo {1617enum class OptionBit {18MayReturnNull,19FillContents0of2,20FillContents1of2,21DeallocTypeMismatch,22DeleteSizeMismatch,23TrackAllocationStacks,24UseOddEvenTags,25UseMemoryTagging,26AddLargeAllocationSlack,27};2829struct Options {30u32 Val;3132bool get(OptionBit Opt) const { return Val & (1U << static_cast<u32>(Opt)); }3334FillContentsMode getFillContentsMode() const {35return static_cast<FillContentsMode>(36(Val >> static_cast<u32>(OptionBit::FillContents0of2)) & 3);37}38};3940template <typename Config> bool useMemoryTagging(const Options &Options) {41return allocatorSupportsMemoryTagging<Config>() &&42Options.get(OptionBit::UseMemoryTagging);43}4445struct AtomicOptions {46atomic_u32 Val = {};4748Options load() const { return Options{atomic_load_relaxed(&Val)}; }4950void clear(OptionBit Opt) {51atomic_fetch_and(&Val, ~(1U << static_cast<u32>(Opt)),52memory_order_relaxed);53}5455void set(OptionBit Opt) {56atomic_fetch_or(&Val, 1U << static_cast<u32>(Opt), memory_order_relaxed);57}5859void setFillContentsMode(FillContentsMode FillContents) {60u32 Opts = atomic_load_relaxed(&Val), NewOpts;61do {62NewOpts = Opts;63NewOpts &= ~(3U << static_cast<u32>(OptionBit::FillContents0of2));64NewOpts |= static_cast<u32>(FillContents)65<< static_cast<u32>(OptionBit::FillContents0of2);66} while (!atomic_compare_exchange_strong(&Val, &Opts, NewOpts,67memory_order_relaxed));68}69};7071} // namespace scudo7273#endif // SCUDO_OPTIONS_H_747576