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
52SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump();
53SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage(
54 const __sanitizer::uptr *pcs, const __sanitizer::uptr len);
55SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage();
56
57SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(__sanitizer::u32 *guard);
58
59// Returns 1 on the first call, then returns 0 thereafter. Called by the tool
60// to ensure only one report is printed when multiple errors occur
61// simultaneously.
62SANITIZER_INTERFACE_ATTRIBUTE int __sanitizer_acquire_crash_state();
63
64SANITIZER_INTERFACE_ATTRIBUTE
65void __sanitizer_annotate_contiguous_container(const void *beg, const void *end,
66 const void *old_mid,
67 const void *new_mid);
68SANITIZER_INTERFACE_ATTRIBUTE
69void __sanitizer_annotate_double_ended_contiguous_container(
70 const void *storage_beg, const void *storage_end,
71 const void *old_container_beg, const void *old_container_end,
72 const void *new_container_beg, const void *new_container_end);
73SANITIZER_INTERFACE_ATTRIBUTE
74int __sanitizer_verify_contiguous_container(const void *beg, const void *mid,
75 const void *end);
76SANITIZER_INTERFACE_ATTRIBUTE
77int __sanitizer_verify_double_ended_contiguous_container(
78 const void *storage_beg, const void *container_beg,
79 const void *container_end, const void *storage_end);
80SANITIZER_INTERFACE_ATTRIBUTE
81const void *__sanitizer_contiguous_container_find_bad_address(const void *beg,
82 const void *mid,
83 const void *end);
84SANITIZER_INTERFACE_ATTRIBUTE
85const void *__sanitizer_double_ended_contiguous_container_find_bad_address(
86 const void *storage_beg, const void *container_beg,
87 const void *container_end, const void *storage_end);
88
89SANITIZER_INTERFACE_ATTRIBUTE
90int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path,
91 __sanitizer::uptr module_path_len,
92 void **pc_offset);
93SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
94__sanitizer_cov_trace_cmp();
95SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
96__sanitizer_cov_trace_cmp1();
97SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
98__sanitizer_cov_trace_cmp2();
99SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
100__sanitizer_cov_trace_cmp4();
101SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
102__sanitizer_cov_trace_cmp8();
103SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
104__sanitizer_cov_trace_const_cmp1();
105SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
106__sanitizer_cov_trace_const_cmp2();
107SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
108__sanitizer_cov_trace_const_cmp4();
109SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
110__sanitizer_cov_trace_const_cmp8();
111SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
112__sanitizer_cov_trace_switch();
113SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
114__sanitizer_cov_trace_div4();
115SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
116__sanitizer_cov_trace_div8();
117SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
118__sanitizer_cov_trace_gep();
119SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
120__sanitizer_cov_trace_pc_indir();
121SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
122__sanitizer_cov_load1();
123SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
124__sanitizer_cov_load2();
125SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
126__sanitizer_cov_load4();
127SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
128__sanitizer_cov_load8();
129SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
130__sanitizer_cov_load16();
131SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
132__sanitizer_cov_store1();
133SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
134__sanitizer_cov_store2();
135SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
136__sanitizer_cov_store4();
137SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
138__sanitizer_cov_store8();
139SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
140__sanitizer_cov_store16();
141SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
142__sanitizer_cov_trace_pc_guard(__sanitizer::u32 *);
143SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
144__sanitizer_cov_trace_pc_guard_init(__sanitizer::u32 *, __sanitizer::u32 *);
145SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
146__sanitizer_cov_8bit_counters_init(char *, char *);
147SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
148__sanitizer_cov_bool_flag_init();
149SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
150__sanitizer_cov_pcs_init(const __sanitizer::uptr *, const __sanitizer::uptr *);
151} // extern "C"
152
153#endif // SANITIZER_INTERFACE_INTERNAL_H
154