10b57cec5SDimitry Andric //===-- sanitizer_interface_internal.h --------------------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file is shared between run-time libraries of sanitizers. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric // This header declares the sanitizer runtime interface functions. 120b57cec5SDimitry Andric // The runtime library has to define these functions so the instrumented program 130b57cec5SDimitry Andric // could call them. 140b57cec5SDimitry Andric // 150b57cec5SDimitry Andric // See also include/sanitizer/common_interface_defs.h 160b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 170b57cec5SDimitry Andric #ifndef SANITIZER_INTERFACE_INTERNAL_H 180b57cec5SDimitry Andric #define SANITIZER_INTERFACE_INTERNAL_H 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric #include "sanitizer_internal_defs.h" 210b57cec5SDimitry Andric 220b57cec5SDimitry Andric extern "C" { 230b57cec5SDimitry Andric // Tell the tools to write their reports to "path.<pid>" instead of stderr. 240b57cec5SDimitry Andric // The special values are "stdout" and "stderr". 250b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 260b57cec5SDimitry Andric void __sanitizer_set_report_path(const char *path); 270b57cec5SDimitry Andric // Tell the tools to write their reports to the provided file descriptor 280b57cec5SDimitry Andric // (casted to void *). 290b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 300b57cec5SDimitry Andric void __sanitizer_set_report_fd(void *fd); 31e8d8bef9SDimitry Andric // Get the current full report file path, if a path was specified by 32e8d8bef9SDimitry Andric // an earlier call to __sanitizer_set_report_path. Returns null otherwise. 33e8d8bef9SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 34e8d8bef9SDimitry Andric const char *__sanitizer_get_report_path(); 350b57cec5SDimitry Andric 360b57cec5SDimitry Andric typedef struct { 370b57cec5SDimitry Andric int coverage_sandboxed; 380b57cec5SDimitry Andric __sanitizer::sptr coverage_fd; 390b57cec5SDimitry Andric unsigned int coverage_max_block_size; 400b57cec5SDimitry Andric } __sanitizer_sandbox_arguments; 410b57cec5SDimitry Andric 420b57cec5SDimitry Andric // Notify the tools that the sandbox is going to be turned on. 430b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 440b57cec5SDimitry Andric __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args); 450b57cec5SDimitry Andric 460b57cec5SDimitry Andric // This function is called by the tool when it has just finished reporting 470b57cec5SDimitry Andric // an error. 'error_summary' is a one-line string that summarizes 480b57cec5SDimitry Andric // the error message. This function can be overridden by the client. 4981ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 5081ad6265SDimitry Andric __sanitizer_report_error_summary(const char *error_summary); 510b57cec5SDimitry Andric 520b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump(); 530b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage( 540b57cec5SDimitry Andric const __sanitizer::uptr *pcs, const __sanitizer::uptr len); 550b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage(); 560b57cec5SDimitry Andric 570b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(__sanitizer::u32 *guard); 580b57cec5SDimitry Andric 590b57cec5SDimitry Andric // Returns 1 on the first call, then returns 0 thereafter. Called by the tool 600b57cec5SDimitry Andric // to ensure only one report is printed when multiple errors occur 610b57cec5SDimitry Andric // simultaneously. 620b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE int __sanitizer_acquire_crash_state(); 630b57cec5SDimitry Andric 640b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 6581ad6265SDimitry Andric void __sanitizer_annotate_contiguous_container(const void *beg, const void *end, 660b57cec5SDimitry Andric const void *old_mid, 670b57cec5SDimitry Andric const void *new_mid); 680b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 69*bdd1243dSDimitry Andric void __sanitizer_annotate_double_ended_contiguous_container( 70*bdd1243dSDimitry Andric const void *storage_beg, const void *storage_end, 71*bdd1243dSDimitry Andric const void *old_container_beg, const void *old_container_end, 72*bdd1243dSDimitry Andric const void *new_container_beg, const void *new_container_end); 73*bdd1243dSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 740b57cec5SDimitry Andric int __sanitizer_verify_contiguous_container(const void *beg, const void *mid, 750b57cec5SDimitry Andric const void *end); 760b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 77*bdd1243dSDimitry Andric int __sanitizer_verify_double_ended_contiguous_container( 78*bdd1243dSDimitry Andric const void *storage_beg, const void *container_beg, 79*bdd1243dSDimitry Andric const void *container_end, const void *storage_end); 80*bdd1243dSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 8181ad6265SDimitry Andric const void *__sanitizer_contiguous_container_find_bad_address(const void *beg, 8281ad6265SDimitry Andric const void *mid, 8381ad6265SDimitry Andric const void *end); 84*bdd1243dSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 85*bdd1243dSDimitry Andric const void *__sanitizer_double_ended_contiguous_container_find_bad_address( 86*bdd1243dSDimitry Andric const void *storage_beg, const void *container_beg, 87*bdd1243dSDimitry Andric const void *container_end, const void *storage_end); 880b57cec5SDimitry Andric 890b57cec5SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE 9081ad6265SDimitry Andric int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path, 9181ad6265SDimitry Andric __sanitizer::uptr module_path_len, 9281ad6265SDimitry Andric void **pc_offset); 9381ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 9481ad6265SDimitry Andric __sanitizer_cov_trace_cmp(); 9581ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 9681ad6265SDimitry Andric __sanitizer_cov_trace_cmp1(); 9781ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 9881ad6265SDimitry Andric __sanitizer_cov_trace_cmp2(); 9981ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 10081ad6265SDimitry Andric __sanitizer_cov_trace_cmp4(); 10181ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 10281ad6265SDimitry Andric __sanitizer_cov_trace_cmp8(); 10381ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 10481ad6265SDimitry Andric __sanitizer_cov_trace_const_cmp1(); 10581ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 10681ad6265SDimitry Andric __sanitizer_cov_trace_const_cmp2(); 10781ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 10881ad6265SDimitry Andric __sanitizer_cov_trace_const_cmp4(); 10981ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 11081ad6265SDimitry Andric __sanitizer_cov_trace_const_cmp8(); 11181ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 11281ad6265SDimitry Andric __sanitizer_cov_trace_switch(); 11381ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 11481ad6265SDimitry Andric __sanitizer_cov_trace_div4(); 11581ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 11681ad6265SDimitry Andric __sanitizer_cov_trace_div8(); 11781ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 11881ad6265SDimitry Andric __sanitizer_cov_trace_gep(); 11981ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 12081ad6265SDimitry Andric __sanitizer_cov_trace_pc_indir(); 12181ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 122fcaf7f86SDimitry Andric __sanitizer_cov_load1(); 123fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 124fcaf7f86SDimitry Andric __sanitizer_cov_load2(); 125fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 126fcaf7f86SDimitry Andric __sanitizer_cov_load4(); 127fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 128fcaf7f86SDimitry Andric __sanitizer_cov_load8(); 129fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 130fcaf7f86SDimitry Andric __sanitizer_cov_load16(); 131fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 132fcaf7f86SDimitry Andric __sanitizer_cov_store1(); 133fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 134fcaf7f86SDimitry Andric __sanitizer_cov_store2(); 135fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 136fcaf7f86SDimitry Andric __sanitizer_cov_store4(); 137fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 138fcaf7f86SDimitry Andric __sanitizer_cov_store8(); 139fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 140fcaf7f86SDimitry Andric __sanitizer_cov_store16(); 141fcaf7f86SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 14281ad6265SDimitry Andric __sanitizer_cov_trace_pc_guard(__sanitizer::u32 *); 14381ad6265SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 14481ad6265SDimitry Andric __sanitizer_cov_trace_pc_guard_init(__sanitizer::u32 *, __sanitizer::u32 *); 145349cc55cSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 146349cc55cSDimitry Andric __sanitizer_cov_8bit_counters_init(char *, char *); 1475ffd83dbSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 1485ffd83dbSDimitry Andric __sanitizer_cov_bool_flag_init(); 1495ffd83dbSDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void 15081ad6265SDimitry Andric __sanitizer_cov_pcs_init(const __sanitizer::uptr *, const __sanitizer::uptr *); 1510b57cec5SDimitry Andric } // extern "C" 1520b57cec5SDimitry Andric 1530b57cec5SDimitry Andric #endif // SANITIZER_INTERFACE_INTERNAL_H 154