| 1 | //===-- sanitizer_interface_internal.h --------------------------*- C++ -*-===// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | // |
| 9 | // This file is shared between run-time libraries of sanitizers. |
| 10 | // |
| 11 | // This header declares the sanitizer runtime interface functions. |
| 12 | // The runtime library has to define these functions so the instrumented program |
| 13 | // could call them. |
| 14 | // |
| 15 | // See also include/sanitizer/common_interface_defs.h |
| 16 | //===----------------------------------------------------------------------===// |
| 17 | #ifndef SANITIZER_INTERFACE_INTERNAL_H |
| 18 | #define SANITIZER_INTERFACE_INTERNAL_H |
| 19 | |
| 20 | #include "sanitizer_internal_defs.h" |
| 21 | |
| 22 | extern "C" { |
| 23 | // Tell the tools to write their reports to "path.<pid>" instead of stderr. |
| 24 | // The special values are "stdout" and "stderr". |
| 25 | SANITIZER_INTERFACE_ATTRIBUTE |
| 26 | void __sanitizer_set_report_path(const char *path); |
| 27 | // Tell the tools to write their reports to the provided file descriptor |
| 28 | // (casted to void *). |
| 29 | SANITIZER_INTERFACE_ATTRIBUTE |
| 30 | void __sanitizer_set_report_fd(void *fd); |
| 31 | // Get the current full report file path, if a path was specified by |
| 32 | // an earlier call to __sanitizer_set_report_path. Returns null otherwise. |
| 33 | SANITIZER_INTERFACE_ATTRIBUTE |
| 34 | const char *__sanitizer_get_report_path(); |
| 35 | |
| 36 | typedef struct { |
| 37 | int coverage_sandboxed; |
| 38 | __sanitizer::sptr coverage_fd; |
| 39 | unsigned int coverage_max_block_size; |
| 40 | } __sanitizer_sandbox_arguments; |
| 41 | |
| 42 | // Notify the tools that the sandbox is going to be turned on. |
| 43 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 44 | __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args); |
| 45 | |
| 46 | // This function is called by the tool when it has just finished reporting |
| 47 | // an error. 'error_summary' is a one-line string that summarizes |
| 48 | // the error message. This function can be overridden by the client. |
| 49 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 50 | __sanitizer_report_error_summary(const char *error_summary); |
| 51 | |
| 52 | // Returns size of dynamically allocated block. This function can be overridden |
| 53 | // by the client. |
| 54 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE __sanitizer::uptr |
| 55 | __sanitizer_get_dtls_size(const void *tls_begin); |
| 56 | |
| 57 | SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump(); |
| 58 | SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage( |
| 59 | const __sanitizer::uptr *pcs, const __sanitizer::uptr len); |
| 60 | SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage(); |
| 61 | |
| 62 | SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(__sanitizer::u32 *guard); |
| 63 | |
| 64 | // Returns 1 on the first call, then returns 0 thereafter. Called by the tool |
| 65 | // to ensure only one report is printed when multiple errors occur |
| 66 | // simultaneously. |
| 67 | SANITIZER_INTERFACE_ATTRIBUTE int __sanitizer_acquire_crash_state(); |
| 68 | |
| 69 | SANITIZER_INTERFACE_ATTRIBUTE |
| 70 | void __sanitizer_annotate_contiguous_container(const void *beg, const void *end, |
| 71 | const void *old_mid, |
| 72 | const void *new_mid); |
| 73 | SANITIZER_INTERFACE_ATTRIBUTE |
| 74 | void __sanitizer_annotate_double_ended_contiguous_container( |
| 75 | const void *storage_beg, const void *storage_end, |
| 76 | const void *old_container_beg, const void *old_container_end, |
| 77 | const void *new_container_beg, const void *new_container_end); |
| 78 | SANITIZER_INTERFACE_ATTRIBUTE |
| 79 | void __sanitizer_copy_contiguous_container_annotations(const void *src_begin, |
| 80 | const void *src_end, |
| 81 | const void *dst_begin, |
| 82 | const void *dst_end); |
| 83 | SANITIZER_INTERFACE_ATTRIBUTE |
| 84 | int __sanitizer_verify_contiguous_container(const void *beg, const void *mid, |
| 85 | const void *end); |
| 86 | SANITIZER_INTERFACE_ATTRIBUTE |
| 87 | int __sanitizer_verify_double_ended_contiguous_container( |
| 88 | const void *storage_beg, const void *container_beg, |
| 89 | const void *container_end, const void *storage_end); |
| 90 | SANITIZER_INTERFACE_ATTRIBUTE |
| 91 | const void *__sanitizer_contiguous_container_find_bad_address(const void *beg, |
| 92 | const void *mid, |
| 93 | const void *end); |
| 94 | SANITIZER_INTERFACE_ATTRIBUTE |
| 95 | const void *__sanitizer_double_ended_contiguous_container_find_bad_address( |
| 96 | const void *storage_beg, const void *container_beg, |
| 97 | const void *container_end, const void *storage_end); |
| 98 | |
| 99 | SANITIZER_INTERFACE_ATTRIBUTE |
| 100 | int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path, |
| 101 | __sanitizer::uptr module_path_len, |
| 102 | void **pc_offset); |
| 103 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 104 | __sanitizer_cov_trace_cmp(); |
| 105 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 106 | __sanitizer_cov_trace_cmp1(); |
| 107 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 108 | __sanitizer_cov_trace_cmp2(); |
| 109 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 110 | __sanitizer_cov_trace_cmp4(); |
| 111 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 112 | __sanitizer_cov_trace_cmp8(); |
| 113 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 114 | __sanitizer_cov_trace_const_cmp1(); |
| 115 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 116 | __sanitizer_cov_trace_const_cmp2(); |
| 117 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 118 | __sanitizer_cov_trace_const_cmp4(); |
| 119 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 120 | __sanitizer_cov_trace_const_cmp8(); |
| 121 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 122 | __sanitizer_cov_trace_switch(); |
| 123 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 124 | __sanitizer_cov_trace_div4(); |
| 125 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 126 | __sanitizer_cov_trace_div8(); |
| 127 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 128 | __sanitizer_cov_trace_gep(); |
| 129 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 130 | __sanitizer_cov_trace_pc_indir(); |
| 131 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 132 | __sanitizer_cov_load1(); |
| 133 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 134 | __sanitizer_cov_load2(); |
| 135 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 136 | __sanitizer_cov_load4(); |
| 137 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 138 | __sanitizer_cov_load8(); |
| 139 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 140 | __sanitizer_cov_load16(); |
| 141 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 142 | __sanitizer_cov_store1(); |
| 143 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 144 | __sanitizer_cov_store2(); |
| 145 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 146 | __sanitizer_cov_store4(); |
| 147 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 148 | __sanitizer_cov_store8(); |
| 149 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 150 | __sanitizer_cov_store16(); |
| 151 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 152 | __sanitizer_cov_trace_pc_guard(__sanitizer::u32 *); |
| 153 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 154 | __sanitizer_cov_trace_pc_guard_init(__sanitizer::u32 *, __sanitizer::u32 *); |
| 155 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 156 | __sanitizer_cov_8bit_counters_init(char *, char *); |
| 157 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 158 | __sanitizer_cov_bool_flag_init(); |
| 159 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void |
| 160 | __sanitizer_cov_pcs_init(const __sanitizer::uptr *, const __sanitizer::uptr *); |
| 161 | } // extern "C" |
| 162 | |
| 163 | #endif // SANITIZER_INTERFACE_INTERNAL_H |
| 164 | |