File indexing completed on 2026-05-10 08:44:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
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
0047
0048
0049
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 }
0065
0066 #endif