blob: 5b10f7f2e8206df044f504a03d66e140486e8d44 [file] [log] [blame]
Derek Brueningaf7aaae2016-04-21 21:32:25 +00001//===-- esan_interface.cpp ------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of EfficiencySanitizer, a family of performance tuners.
11//
12//===----------------------------------------------------------------------===//
13
14#include "esan_interface_internal.h"
15#include "esan.h"
16#include "sanitizer_common/sanitizer_internal_defs.h"
17
18using namespace __esan; // NOLINT
19
Derek Bruening7004e062016-05-24 22:22:20 +000020void __esan_init(ToolType Tool, void *Ptr) {
21 WhichTool = Tool;
Derek Brueningaf7aaae2016-04-21 21:32:25 +000022 initializeLibrary(Tool);
Derek Bruening7004e062016-05-24 22:22:20 +000023 processCompilationUnitInit(Ptr);
24}
25
26void __esan_exit(void *Ptr) {
27 processCompilationUnitExit(Ptr);
Derek Brueningaf7aaae2016-04-21 21:32:25 +000028}
29
30void __esan_aligned_load1(void *Addr) {
31 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 1, false);
32}
33
34void __esan_aligned_load2(void *Addr) {
35 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, false);
36}
37
38void __esan_aligned_load4(void *Addr) {
39 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, false);
40}
41
42void __esan_aligned_load8(void *Addr) {
43 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, false);
44}
45
46void __esan_aligned_load16(void *Addr) {
47 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, false);
48}
49
50void __esan_aligned_store1(void *Addr) {
51 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 1, true);
52}
53
54void __esan_aligned_store2(void *Addr) {
55 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, true);
56}
57
58void __esan_aligned_store4(void *Addr) {
59 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, true);
60}
61
62void __esan_aligned_store8(void *Addr) {
63 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, true);
64}
65
66void __esan_aligned_store16(void *Addr) {
67 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, true);
68}
69
70void __esan_unaligned_load2(void *Addr) {
71 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, false);
72}
73
74void __esan_unaligned_load4(void *Addr) {
75 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, false);
76}
77
78void __esan_unaligned_load8(void *Addr) {
79 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, false);
80}
81
82void __esan_unaligned_load16(void *Addr) {
83 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, false);
84}
85
86void __esan_unaligned_store2(void *Addr) {
87 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, true);
88}
89
90void __esan_unaligned_store4(void *Addr) {
91 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, true);
92}
93
94void __esan_unaligned_store8(void *Addr) {
95 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, true);
96}
97
98void __esan_unaligned_store16(void *Addr) {
99 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, true);
100}
101
102void __esan_unaligned_loadN(void *Addr, uptr Size) {
103 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, Size, false);
104}
105
106void __esan_unaligned_storeN(void *Addr, uptr Size) {
107 processRangeAccess(GET_CALLER_PC(), (uptr)Addr, Size, true);
108}