1 //===-- sanitizer_interface_internal.h --------------------------*- C++ -*-===// 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 shared between run-time libraries of sanitizers. 11 // 12 // This header declares the sanitizer runtime interface functions. 13 // The runtime library has to define these functions so the instrumented program 14 // could call them. 15 // 16 // See also include/sanitizer/common_interface_defs.h 17 //===----------------------------------------------------------------------===// 18 #ifndef SANITIZER_INTERFACE_INTERNAL_H 19 #define SANITIZER_INTERFACE_INTERNAL_H 20 21 #include "sanitizer_internal_defs.h" 22 23 extern "C" { 24 // Tell the tools to write their reports to "path.<pid>" instead of stderr. 25 // The special values are "stdout" and "stderr". 26 SANITIZER_INTERFACE_ATTRIBUTE 27 void __sanitizer_set_report_path(const char *path); 28 // Tell the tools to write their reports to the provided file descriptor 29 // (casted to void *). 30 SANITIZER_INTERFACE_ATTRIBUTE 31 void __sanitizer_set_report_fd(void *fd); 32 33 typedef struct { 34 int coverage_sandboxed; 35 __sanitizer::sptr coverage_fd; 36 unsigned int coverage_max_block_size; 37 } __sanitizer_sandbox_arguments; 38 39 // Notify the tools that the sandbox is going to be turned on. 40 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 41 __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args); 42 43 // This function is called by the tool when it has just finished reporting 44 // an error. 'error_summary' is a one-line string that summarizes 45 // the error message. This function can be overridden by the client. 46 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 47 void __sanitizer_report_error_summary(const char *error_summary); 48 49 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump(); 50 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage( 51 const __sanitizer::uptr *pcs, const __sanitizer::uptr len); 52 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage(); 53 54 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(__sanitizer::u32 *guard); 55 56 // Returns 1 on the first call, then returns 0 thereafter. Called by the tool 57 // to ensure only one report is printed when multiple errors occur 58 // simultaneously. 59 SANITIZER_INTERFACE_ATTRIBUTE int __sanitizer_acquire_crash_state(); 60 61 SANITIZER_INTERFACE_ATTRIBUTE 62 void __sanitizer_annotate_contiguous_container(const void *beg, 63 const void *end, 64 const void *old_mid, 65 const void *new_mid); 66 SANITIZER_INTERFACE_ATTRIBUTE 67 int __sanitizer_verify_contiguous_container(const void *beg, const void *mid, 68 const void *end); 69 SANITIZER_INTERFACE_ATTRIBUTE 70 const void *__sanitizer_contiguous_container_find_bad_address( 71 const void *beg, const void *mid, const void *end); 72 73 SANITIZER_INTERFACE_ATTRIBUTE 74 int __sanitizer_get_module_and_offset_for_pc( 75 __sanitizer::uptr pc, char *module_path, 76 __sanitizer::uptr module_path_len, __sanitizer::uptr *pc_offset); 77 78 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 79 void __sanitizer_cov_trace_cmp(); 80 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 81 void __sanitizer_cov_trace_cmp1(); 82 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 83 void __sanitizer_cov_trace_cmp2(); 84 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 85 void __sanitizer_cov_trace_cmp4(); 86 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 87 void __sanitizer_cov_trace_cmp8(); 88 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 89 void __sanitizer_cov_trace_const_cmp1(); 90 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 91 void __sanitizer_cov_trace_const_cmp2(); 92 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 93 void __sanitizer_cov_trace_const_cmp4(); 94 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 95 void __sanitizer_cov_trace_const_cmp8(); 96 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 97 void __sanitizer_cov_trace_switch(); 98 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 99 void __sanitizer_cov_trace_div4(); 100 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 101 void __sanitizer_cov_trace_div8(); 102 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 103 void __sanitizer_cov_trace_gep(); 104 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 105 void __sanitizer_cov_trace_pc_indir(); 106 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 107 void __sanitizer_cov_trace_pc_guard(__sanitizer::u32*); 108 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 109 void __sanitizer_cov_trace_pc_guard_init(__sanitizer::u32*, 110 __sanitizer::u32*); 111 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 112 void __sanitizer_cov_8bit_counters_init(); 113 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE 114 void __sanitizer_cov_pcs_init(); 115 } // extern "C" 116 117 #endif // SANITIZER_INTERFACE_INTERNAL_H 118