1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--------- Definition of the HWAddressSanitizer class -------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file declares the Hardware AddressSanitizer class which is a port of the
- // legacy HWAddressSanitizer pass to use the new PassManager infrastructure.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_TRANSFORMS_INSTRUMENTATION_HWADDRESSSANITIZER_H
- #define LLVM_TRANSFORMS_INSTRUMENTATION_HWADDRESSSANITIZER_H
- #include "llvm/ADT/STLFunctionalExtras.h"
- #include "llvm/IR/PassManager.h"
- namespace llvm {
- class Module;
- class StringRef;
- class raw_ostream;
- struct HWAddressSanitizerOptions {
- HWAddressSanitizerOptions()
- : HWAddressSanitizerOptions(false, false, false){};
- HWAddressSanitizerOptions(bool CompileKernel, bool Recover,
- bool DisableOptimization)
- : CompileKernel(CompileKernel), Recover(Recover),
- DisableOptimization(DisableOptimization){};
- bool CompileKernel;
- bool Recover;
- bool DisableOptimization;
- };
- /// This is a public interface to the hardware address sanitizer pass for
- /// instrumenting code to check for various memory errors at runtime, similar to
- /// AddressSanitizer but based on partial hardware assistance.
- class HWAddressSanitizerPass : public PassInfoMixin<HWAddressSanitizerPass> {
- public:
- explicit HWAddressSanitizerPass(HWAddressSanitizerOptions Options)
- : Options(Options){};
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
- static bool isRequired() { return true; }
- void printPipeline(raw_ostream &OS,
- function_ref<StringRef(StringRef)> MapClassName2PassName);
- private:
- HWAddressSanitizerOptions Options;
- };
- namespace HWASanAccessInfo {
- // Bit field positions for the accessinfo parameter to
- // llvm.hwasan.check.memaccess. Shared between the pass and the backend. Bits
- // 0-15 are also used by the runtime.
- enum {
- AccessSizeShift = 0, // 4 bits
- IsWriteShift = 4,
- RecoverShift = 5,
- MatchAllShift = 16, // 8 bits
- HasMatchAllShift = 24,
- CompileKernelShift = 25,
- };
- enum { RuntimeMask = 0xffff };
- } // namespace HWASanAccessInfo
- } // namespace llvm
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|