Derek Bruening | af7aaae | 2016-04-21 21:32:25 +0000 | [diff] [blame] | 1 | //===-- 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 | |
| 18 | using namespace __esan; // NOLINT |
| 19 | |
Derek Bruening | 7004e06 | 2016-05-24 22:22:20 +0000 | [diff] [blame] | 20 | void __esan_init(ToolType Tool, void *Ptr) { |
| 21 | WhichTool = Tool; |
Derek Bruening | af7aaae | 2016-04-21 21:32:25 +0000 | [diff] [blame] | 22 | initializeLibrary(Tool); |
Derek Bruening | 7004e06 | 2016-05-24 22:22:20 +0000 | [diff] [blame] | 23 | processCompilationUnitInit(Ptr); |
| 24 | } |
| 25 | |
| 26 | void __esan_exit(void *Ptr) { |
| 27 | processCompilationUnitExit(Ptr); |
Derek Bruening | af7aaae | 2016-04-21 21:32:25 +0000 | [diff] [blame] | 28 | } |
| 29 | |
| 30 | void __esan_aligned_load1(void *Addr) { |
| 31 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 1, false); |
| 32 | } |
| 33 | |
| 34 | void __esan_aligned_load2(void *Addr) { |
| 35 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, false); |
| 36 | } |
| 37 | |
| 38 | void __esan_aligned_load4(void *Addr) { |
| 39 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, false); |
| 40 | } |
| 41 | |
| 42 | void __esan_aligned_load8(void *Addr) { |
| 43 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, false); |
| 44 | } |
| 45 | |
| 46 | void __esan_aligned_load16(void *Addr) { |
| 47 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, false); |
| 48 | } |
| 49 | |
| 50 | void __esan_aligned_store1(void *Addr) { |
| 51 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 1, true); |
| 52 | } |
| 53 | |
| 54 | void __esan_aligned_store2(void *Addr) { |
| 55 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, true); |
| 56 | } |
| 57 | |
| 58 | void __esan_aligned_store4(void *Addr) { |
| 59 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, true); |
| 60 | } |
| 61 | |
| 62 | void __esan_aligned_store8(void *Addr) { |
| 63 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, true); |
| 64 | } |
| 65 | |
| 66 | void __esan_aligned_store16(void *Addr) { |
| 67 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, true); |
| 68 | } |
| 69 | |
| 70 | void __esan_unaligned_load2(void *Addr) { |
| 71 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, false); |
| 72 | } |
| 73 | |
| 74 | void __esan_unaligned_load4(void *Addr) { |
| 75 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, false); |
| 76 | } |
| 77 | |
| 78 | void __esan_unaligned_load8(void *Addr) { |
| 79 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, false); |
| 80 | } |
| 81 | |
| 82 | void __esan_unaligned_load16(void *Addr) { |
| 83 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, false); |
| 84 | } |
| 85 | |
| 86 | void __esan_unaligned_store2(void *Addr) { |
| 87 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 2, true); |
| 88 | } |
| 89 | |
| 90 | void __esan_unaligned_store4(void *Addr) { |
| 91 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 4, true); |
| 92 | } |
| 93 | |
| 94 | void __esan_unaligned_store8(void *Addr) { |
| 95 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 8, true); |
| 96 | } |
| 97 | |
| 98 | void __esan_unaligned_store16(void *Addr) { |
| 99 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, 16, true); |
| 100 | } |
| 101 | |
| 102 | void __esan_unaligned_loadN(void *Addr, uptr Size) { |
| 103 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, Size, false); |
| 104 | } |
| 105 | |
| 106 | void __esan_unaligned_storeN(void *Addr, uptr Size) { |
| 107 | processRangeAccess(GET_CALLER_PC(), (uptr)Addr, Size, true); |
| 108 | } |