LLVM 17.0.0git
AddressSanitizer.h
Go to the documentation of this file.
1//===--------- Definition of the AddressSanitizer class ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the AddressSanitizer class which is a port of the legacy
10// AddressSanitizer pass to use the new PassManager infrastructure.
11//
12//===----------------------------------------------------------------------===//
13#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_ADDRESSSANITIZER_H
14#define LLVM_TRANSFORMS_INSTRUMENTATION_ADDRESSSANITIZER_H
15
16#include "llvm/IR/PassManager.h"
18
19namespace llvm {
20class Module;
21class raw_ostream;
22
24 bool CompileKernel = false;
25 bool Recover = false;
26 bool UseAfterScope = false;
29};
30
31/// Public interface to the address sanitizer module pass for instrumenting code
32/// to check for various memory errors.
33///
34/// This adds 'asan.module_ctor' to 'llvm.global_ctors'. This pass may also
35/// run intependently of the function address sanitizer.
36class AddressSanitizerPass : public PassInfoMixin<AddressSanitizerPass> {
37public:
39 bool UseGlobalGC = true, bool UseOdrIndicator = true,
40 AsanDtorKind DestructorKind = AsanDtorKind::Global,
41 AsanCtorKind ConstructorKind = AsanCtorKind::Global);
44 function_ref<StringRef(StringRef)> MapClassName2PassName);
45 static bool isRequired() { return true; }
46
47private:
49 bool UseGlobalGC;
50 bool UseOdrIndicator;
51 AsanDtorKind DestructorKind;
52 AsanCtorKind ConstructorKind;
53};
54
56 const int32_t Packed;
57 const uint8_t AccessSizeIndex;
58 const bool IsWrite;
59 const bool CompileKernel;
60
61 explicit ASanAccessInfo(int32_t Packed);
63};
64
65} // namespace llvm
66
67#endif
Machine Check Debug Module
const char LLVMTargetMachineRef LLVMPassBuilderOptionsRef Options
This header defines various interfaces for pass management in LLVM.
Public interface to the address sanitizer module pass for instrumenting code to check for various mem...
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
void printPipeline(raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:620
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:152
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
An efficient, type-erasing, non-owning reference to a callable.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
AsanDetectStackUseAfterReturnMode
Mode of ASan detect stack use after return.
@ Runtime
Detect stack use after return if not disabled runtime with (ASAN_OPTIONS=detect_stack_use_after_retur...
AsanDtorKind
Types of ASan module destructors supported.
@ Global
Append to llvm.global_dtors.
AsanCtorKind
Types of ASan module constructors supported.
const uint8_t AccessSizeIndex
AsanDetectStackUseAfterReturnMode UseAfterReturn
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:371