1 //===-- esan_interface_internal.h -------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of EfficiencySanitizer, a family of performance tuners.
12 // Calls to the functions declared in this header will be inserted by
13 // the instrumentation module.
14 //===----------------------------------------------------------------------===//
16 #ifndef ESAN_INTERFACE_INTERNAL_H
17 #define ESAN_INTERFACE_INTERNAL_H
19 #include <sanitizer_common/sanitizer_internal_defs.h>
21 // This header should NOT include any other headers.
22 // All functions in this header are extern "C" and start with __esan_.
24 using __sanitizer::uptr
;
25 using __sanitizer::u32
;
29 // This should be kept consistent with LLVM's EfficiencySanitizerOptions.
30 // The value is passed as a 32-bit integer by the compiler.
31 typedef enum Type
: u32
{
38 // To handle interceptors that invoke instrumented code prior to
39 // __esan_init() being called, the instrumentation module creates this
40 // global variable specifying the tool.
41 extern ToolType __esan_which_tool
;
43 // This function should be called at the very beginning of the process,
44 // before any instrumented code is executed and before any call to malloc.
45 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_init(ToolType Tool
, void *Ptr
);
46 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_exit(void *Ptr
);
48 // The instrumentation module will insert a call to one of these routines prior
49 // to each load and store instruction for which we do not have "fastpath"
50 // inlined instrumentation. These calls constitute the "slowpath" for our
51 // tools. We have separate routines for each type of memory access to enable
52 // targeted optimization.
53 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_load1(void *Addr
);
54 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_load2(void *Addr
);
55 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_load4(void *Addr
);
56 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_load8(void *Addr
);
57 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_load16(void *Addr
);
59 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_store1(void *Addr
);
60 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_store2(void *Addr
);
61 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_store4(void *Addr
);
62 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_store8(void *Addr
);
63 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_aligned_store16(void *Addr
);
65 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_load2(void *Addr
);
66 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_load4(void *Addr
);
67 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_load8(void *Addr
);
68 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_load16(void *Addr
);
70 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_store2(void *Addr
);
71 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_store4(void *Addr
);
72 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_store8(void *Addr
);
73 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_unaligned_store16(void *Addr
);
75 // These cover unusually-sized accesses.
76 SANITIZER_INTERFACE_ATTRIBUTE
77 void __esan_unaligned_loadN(void *Addr
, uptr Size
);
78 SANITIZER_INTERFACE_ATTRIBUTE
79 void __esan_unaligned_storeN(void *Addr
, uptr Size
);
83 #endif // ESAN_INTERFACE_INTERNAL_H