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
22extern "C" {
23// Tell the tools to write their reports to "path.<pid>" instead of stderr.
24// The special values are "stdout" and "stderr".
25SANITIZER_INTERFACE_ATTRIBUTE
26void __sanitizer_set_report_path(const char *path);
27// Tell the tools to write their reports to the provided file descriptor
28// (casted to void *).
29SANITIZER_INTERFACE_ATTRIBUTE
30void __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.
33SANITIZER_INTERFACE_ATTRIBUTE
34const char *__sanitizer_get_report_path();
35
36typedef 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.
43SANITIZER_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.
49SANITIZER_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.
54SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE __sanitizer::uptr
55__sanitizer_get_dtls_size(const void *tls_begin);
56
57SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump();
58SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage(
59 const __sanitizer::uptr *pcs, const __sanitizer::uptr len);
60SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage();
61
62SANITIZER_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.
67SANITIZER_INTERFACE_ATTRIBUTE int __sanitizer_acquire_crash_state();
68
69SANITIZER_INTERFACE_ATTRIBUTE
70void __sanitizer_annotate_contiguous_container(const void *beg, const void *end,
71 const void *old_mid,
72 const void *new_mid);
73SANITIZER_INTERFACE_ATTRIBUTE
74void __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);
78SANITIZER_INTERFACE_ATTRIBUTE
79void __sanitizer_copy_contiguous_container_annotations(const void *src_begin,
80 const void *src_end,
81 const void *dst_begin,
82 const void *dst_end);
83SANITIZER_INTERFACE_ATTRIBUTE
84int __sanitizer_verify_contiguous_container(const void *beg, const void *mid,
85 const void *end);
86SANITIZER_INTERFACE_ATTRIBUTE
87int __sanitizer_verify_double_ended_contiguous_container(
88 const void *storage_beg, const void *container_beg,
89 const void *container_end, const void *storage_end);
90SANITIZER_INTERFACE_ATTRIBUTE
91const void *__sanitizer_contiguous_container_find_bad_address(const void *beg,
92 const void *mid,
93 const void *end);
94SANITIZER_INTERFACE_ATTRIBUTE
95const 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
99SANITIZER_INTERFACE_ATTRIBUTE
100int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path,
101 __sanitizer::uptr module_path_len,
102 void **pc_offset);
103SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
104__sanitizer_cov_trace_cmp();
105SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
106__sanitizer_cov_trace_cmp1();
107SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
108__sanitizer_cov_trace_cmp2();
109SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
110__sanitizer_cov_trace_cmp4();
111SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
112__sanitizer_cov_trace_cmp8();
113SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
114__sanitizer_cov_trace_const_cmp1();
115SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
116__sanitizer_cov_trace_const_cmp2();
117SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
118__sanitizer_cov_trace_const_cmp4();
119SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
120__sanitizer_cov_trace_const_cmp8();
121SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
122__sanitizer_cov_trace_switch();
123SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
124__sanitizer_cov_trace_div4();
125SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
126__sanitizer_cov_trace_div8();
127SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
128__sanitizer_cov_trace_gep();
129SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
130__sanitizer_cov_trace_pc_indir();
131SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
132__sanitizer_cov_load1();
133SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
134__sanitizer_cov_load2();
135SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
136__sanitizer_cov_load4();
137SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
138__sanitizer_cov_load8();
139SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
140__sanitizer_cov_load16();
141SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
142__sanitizer_cov_store1();
143SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
144__sanitizer_cov_store2();
145SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
146__sanitizer_cov_store4();
147SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
148__sanitizer_cov_store8();
149SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
150__sanitizer_cov_store16();
151SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
152__sanitizer_cov_trace_pc_guard(__sanitizer::u32 *);
153SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
154__sanitizer_cov_trace_pc_guard_init(__sanitizer::u32 *, __sanitizer::u32 *);
155SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
156__sanitizer_cov_8bit_counters_init(char *, char *);
157SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
158__sanitizer_cov_bool_flag_init();
159SANITIZER_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