Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:44:39

0001 //===------- Definition of the SanitizerBinaryMetadata class ----*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file declares the SanitizerBinaryMetadata pass.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 #ifndef LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERBINARYMETADATA_H
0013 #define LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERBINARYMETADATA_H
0014 
0015 #include "llvm/ADT/ArrayRef.h"
0016 #include "llvm/IR/Function.h"
0017 #include "llvm/IR/Module.h"
0018 #include "llvm/IR/PassManager.h"
0019 #include "llvm/Transforms/Utils/Instrumentation.h"
0020 
0021 namespace llvm {
0022 
0023 struct SanitizerBinaryMetadataOptions {
0024   bool Covered = false;
0025   bool Atomics = false;
0026   bool UAR = false;
0027   SanitizerBinaryMetadataOptions() = default;
0028 };
0029 
0030 inline constexpr int kSanitizerBinaryMetadataAtomicsBit = 0;
0031 inline constexpr int kSanitizerBinaryMetadataUARBit = 1;
0032 inline constexpr int kSanitizerBinaryMetadataUARHasSizeBit = 2;
0033 
0034 inline constexpr uint64_t kSanitizerBinaryMetadataAtomics =
0035     1 << kSanitizerBinaryMetadataAtomicsBit;
0036 inline constexpr uint64_t kSanitizerBinaryMetadataUAR =
0037     1 << kSanitizerBinaryMetadataUARBit;
0038 inline constexpr uint64_t kSanitizerBinaryMetadataUARHasSize =
0039     1 << kSanitizerBinaryMetadataUARHasSizeBit;
0040 
0041 inline constexpr char kSanitizerBinaryMetadataCoveredSection[] =
0042     "sanmd_covered";
0043 inline constexpr char kSanitizerBinaryMetadataAtomicsSection[] =
0044     "sanmd_atomics";
0045 
0046 /// Public interface to the SanitizerBinaryMetadata module pass for emitting
0047 /// metadata for binary analysis sanitizers.
0048 //
0049 /// The pass should be inserted after optimizations.
0050 class SanitizerBinaryMetadataPass
0051     : public PassInfoMixin<SanitizerBinaryMetadataPass> {
0052 public:
0053   explicit SanitizerBinaryMetadataPass(
0054       SanitizerBinaryMetadataOptions Opts = {},
0055       ArrayRef<std::string> IgnorelistFiles = {});
0056   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
0057   static bool isRequired() { return true; }
0058 
0059 private:
0060   const SanitizerBinaryMetadataOptions Options;
0061   const ArrayRef<std::string> IgnorelistFiles;
0062 };
0063 
0064 } // namespace llvm
0065 
0066 #endif