1 //===-- esan_interface.cpp ------------------------------------------------===//
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 //===----------------------------------------------------------------------===//
14 #include "esan_interface_internal.h"
16 #include "sanitizer_common/sanitizer_internal_defs.h"
18 using namespace __esan
; // NOLINT
20 void __esan_init(ToolType Tool
, void *Ptr
) {
21 if (Tool
!= __esan_which_tool
) {
22 Printf("ERROR: tool mismatch: %d vs %d\n", Tool
, __esan_which_tool
);
25 initializeLibrary(Tool
);
26 processCompilationUnitInit(Ptr
);
29 void __esan_exit(void *Ptr
) {
30 processCompilationUnitExit(Ptr
);
33 void __esan_aligned_load1(void *Addr
) {
34 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 1, false);
37 void __esan_aligned_load2(void *Addr
) {
38 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 2, false);
41 void __esan_aligned_load4(void *Addr
) {
42 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 4, false);
45 void __esan_aligned_load8(void *Addr
) {
46 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 8, false);
49 void __esan_aligned_load16(void *Addr
) {
50 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 16, false);
53 void __esan_aligned_store1(void *Addr
) {
54 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 1, true);
57 void __esan_aligned_store2(void *Addr
) {
58 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 2, true);
61 void __esan_aligned_store4(void *Addr
) {
62 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 4, true);
65 void __esan_aligned_store8(void *Addr
) {
66 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 8, true);
69 void __esan_aligned_store16(void *Addr
) {
70 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 16, true);
73 void __esan_unaligned_load2(void *Addr
) {
74 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 2, false);
77 void __esan_unaligned_load4(void *Addr
) {
78 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 4, false);
81 void __esan_unaligned_load8(void *Addr
) {
82 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 8, false);
85 void __esan_unaligned_load16(void *Addr
) {
86 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 16, false);
89 void __esan_unaligned_store2(void *Addr
) {
90 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 2, true);
93 void __esan_unaligned_store4(void *Addr
) {
94 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 4, true);
97 void __esan_unaligned_store8(void *Addr
) {
98 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 8, true);
101 void __esan_unaligned_store16(void *Addr
) {
102 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, 16, true);
105 void __esan_unaligned_loadN(void *Addr
, uptr Size
) {
106 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, Size
, false);
109 void __esan_unaligned_storeN(void *Addr
, uptr Size
) {
110 processRangeAccess(GET_CALLER_PC(), (uptr
)Addr
, Size
, true);
115 SANITIZER_INTERFACE_ATTRIBUTE
void __esan_report() {
119 SANITIZER_INTERFACE_ATTRIBUTE
unsigned int __esan_get_sample_count() {
120 return getSampleCount();