SanitizerBinaryMetadata.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #ifdef __GNUC__
  3. #pragma GCC diagnostic push
  4. #pragma GCC diagnostic ignored "-Wunused-parameter"
  5. #endif
  6. //===------- Definition of the SanitizerBinaryMetadata class ----*- C++ -*-===//
  7. //
  8. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  9. // See https://llvm.org/LICENSE.txt for license information.
  10. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  11. //
  12. //===----------------------------------------------------------------------===//
  13. //
  14. // This file declares the SanitizerBinaryMetadata pass.
  15. //
  16. //===----------------------------------------------------------------------===//
  17. #ifndef LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERBINARYMETADATA_H
  18. #define LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERBINARYMETADATA_H
  19. #include "llvm/IR/Function.h"
  20. #include "llvm/IR/Module.h"
  21. #include "llvm/IR/PassManager.h"
  22. #include "llvm/Transforms/Instrumentation.h"
  23. namespace llvm {
  24. struct SanitizerBinaryMetadataOptions {
  25. bool Covered = false;
  26. bool Atomics = false;
  27. bool UAR = false;
  28. SanitizerBinaryMetadataOptions() = default;
  29. };
  30. inline constexpr int kSanitizerBinaryMetadataAtomicsBit = 0;
  31. inline constexpr int kSanitizerBinaryMetadataUARBit = 1;
  32. inline constexpr uint32_t kSanitizerBinaryMetadataNone = 0;
  33. inline constexpr uint32_t kSanitizerBinaryMetadataAtomics =
  34. 1 << kSanitizerBinaryMetadataAtomicsBit;
  35. inline constexpr uint32_t kSanitizerBinaryMetadataUAR =
  36. 1 << kSanitizerBinaryMetadataUARBit;
  37. inline constexpr char kSanitizerBinaryMetadataCoveredSection[] =
  38. "sanmd_covered";
  39. inline constexpr char kSanitizerBinaryMetadataAtomicsSection[] =
  40. "sanmd_atomics";
  41. /// Public interface to the SanitizerBinaryMetadata module pass for emitting
  42. /// metadata for binary analysis sanitizers.
  43. //
  44. /// The pass should be inserted after optimizations.
  45. class SanitizerBinaryMetadataPass
  46. : public PassInfoMixin<SanitizerBinaryMetadataPass> {
  47. public:
  48. explicit SanitizerBinaryMetadataPass(
  49. SanitizerBinaryMetadataOptions Opts = {});
  50. PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
  51. static bool isRequired() { return true; }
  52. private:
  53. const SanitizerBinaryMetadataOptions Options;
  54. };
  55. } // namespace llvm
  56. #endif
  57. #ifdef __GNUC__
  58. #pragma GCC diagnostic pop
  59. #endif