1 | //===-- hwasan_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 a part of HWAddressSanitizer. |
10 | // |
11 | // Private Hwasan interface header. |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #ifndef HWASAN_INTERFACE_INTERNAL_H |
15 | #define HWASAN_INTERFACE_INTERNAL_H |
16 | |
17 | #include "sanitizer_common/sanitizer_internal_defs.h" |
18 | #include "sanitizer_common/sanitizer_platform_limits_posix.h" |
19 | #include <link.h> |
20 | |
21 | extern "C" { |
22 | |
23 | SANITIZER_INTERFACE_ATTRIBUTE |
24 | void __hwasan_init_static(); |
25 | |
26 | SANITIZER_INTERFACE_ATTRIBUTE |
27 | void __hwasan_init(); |
28 | |
29 | SANITIZER_INTERFACE_ATTRIBUTE |
30 | void __hwasan_library_loaded(ElfW(Addr) base, const ElfW(Phdr) * phdr, |
31 | ElfW(Half) phnum); |
32 | |
33 | SANITIZER_INTERFACE_ATTRIBUTE |
34 | void __hwasan_library_unloaded(ElfW(Addr) base, const ElfW(Phdr) * phdr, |
35 | ElfW(Half) phnum); |
36 | |
37 | using __sanitizer::uptr; |
38 | using __sanitizer::sptr; |
39 | using __sanitizer::uu64; |
40 | using __sanitizer::uu32; |
41 | using __sanitizer::uu16; |
42 | using __sanitizer::u64; |
43 | using __sanitizer::u32; |
44 | using __sanitizer::u16; |
45 | using __sanitizer::u8; |
46 | |
47 | SANITIZER_INTERFACE_ATTRIBUTE |
48 | void __hwasan_init_frames(uptr, uptr); |
49 | |
50 | SANITIZER_INTERFACE_ATTRIBUTE |
51 | extern uptr __hwasan_shadow_memory_dynamic_address; |
52 | |
53 | SANITIZER_INTERFACE_ATTRIBUTE |
54 | void __hwasan_loadN(uptr, uptr); |
55 | SANITIZER_INTERFACE_ATTRIBUTE |
56 | void __hwasan_load1(uptr); |
57 | SANITIZER_INTERFACE_ATTRIBUTE |
58 | void __hwasan_load2(uptr); |
59 | SANITIZER_INTERFACE_ATTRIBUTE |
60 | void __hwasan_load4(uptr); |
61 | SANITIZER_INTERFACE_ATTRIBUTE |
62 | void __hwasan_load8(uptr); |
63 | SANITIZER_INTERFACE_ATTRIBUTE |
64 | void __hwasan_load16(uptr); |
65 | |
66 | SANITIZER_INTERFACE_ATTRIBUTE |
67 | void __hwasan_loadN_noabort(uptr, uptr); |
68 | SANITIZER_INTERFACE_ATTRIBUTE |
69 | void __hwasan_load1_noabort(uptr); |
70 | SANITIZER_INTERFACE_ATTRIBUTE |
71 | void __hwasan_load2_noabort(uptr); |
72 | SANITIZER_INTERFACE_ATTRIBUTE |
73 | void __hwasan_load4_noabort(uptr); |
74 | SANITIZER_INTERFACE_ATTRIBUTE |
75 | void __hwasan_load8_noabort(uptr); |
76 | SANITIZER_INTERFACE_ATTRIBUTE |
77 | void __hwasan_load16_noabort(uptr); |
78 | |
79 | SANITIZER_INTERFACE_ATTRIBUTE |
80 | void __hwasan_loadN_match_all(uptr, uptr, u8); |
81 | SANITIZER_INTERFACE_ATTRIBUTE |
82 | void __hwasan_load1_match_all(uptr, u8); |
83 | SANITIZER_INTERFACE_ATTRIBUTE |
84 | void __hwasan_load2_match_all(uptr, u8); |
85 | SANITIZER_INTERFACE_ATTRIBUTE |
86 | void __hwasan_load4_match_all(uptr, u8); |
87 | SANITIZER_INTERFACE_ATTRIBUTE |
88 | void __hwasan_load8_match_all(uptr, u8); |
89 | SANITIZER_INTERFACE_ATTRIBUTE |
90 | void __hwasan_load16_match_all(uptr, u8); |
91 | |
92 | SANITIZER_INTERFACE_ATTRIBUTE |
93 | void __hwasan_loadN_match_all_noabort(uptr, uptr, u8); |
94 | SANITIZER_INTERFACE_ATTRIBUTE |
95 | void __hwasan_load1_match_all_noabort(uptr, u8); |
96 | SANITIZER_INTERFACE_ATTRIBUTE |
97 | void __hwasan_load2_match_all_noabort(uptr, u8); |
98 | SANITIZER_INTERFACE_ATTRIBUTE |
99 | void __hwasan_load4_match_all_noabort(uptr, u8); |
100 | SANITIZER_INTERFACE_ATTRIBUTE |
101 | void __hwasan_load8_match_all_noabort(uptr, u8); |
102 | SANITIZER_INTERFACE_ATTRIBUTE |
103 | void __hwasan_load16_match_all_noabort(uptr, u8); |
104 | |
105 | SANITIZER_INTERFACE_ATTRIBUTE |
106 | void __hwasan_storeN(uptr, uptr); |
107 | SANITIZER_INTERFACE_ATTRIBUTE |
108 | void __hwasan_store1(uptr); |
109 | SANITIZER_INTERFACE_ATTRIBUTE |
110 | void __hwasan_store2(uptr); |
111 | SANITIZER_INTERFACE_ATTRIBUTE |
112 | void __hwasan_store4(uptr); |
113 | SANITIZER_INTERFACE_ATTRIBUTE |
114 | void __hwasan_store8(uptr); |
115 | SANITIZER_INTERFACE_ATTRIBUTE |
116 | void __hwasan_store16(uptr); |
117 | |
118 | SANITIZER_INTERFACE_ATTRIBUTE |
119 | void __hwasan_storeN_noabort(uptr, uptr); |
120 | SANITIZER_INTERFACE_ATTRIBUTE |
121 | void __hwasan_store1_noabort(uptr); |
122 | SANITIZER_INTERFACE_ATTRIBUTE |
123 | void __hwasan_store2_noabort(uptr); |
124 | SANITIZER_INTERFACE_ATTRIBUTE |
125 | void __hwasan_store4_noabort(uptr); |
126 | SANITIZER_INTERFACE_ATTRIBUTE |
127 | void __hwasan_store8_noabort(uptr); |
128 | SANITIZER_INTERFACE_ATTRIBUTE |
129 | void __hwasan_store16_noabort(uptr); |
130 | |
131 | SANITIZER_INTERFACE_ATTRIBUTE |
132 | void __hwasan_storeN_match_all(uptr, uptr, u8); |
133 | SANITIZER_INTERFACE_ATTRIBUTE |
134 | void __hwasan_store1_match_all(uptr, u8); |
135 | SANITIZER_INTERFACE_ATTRIBUTE |
136 | void __hwasan_store2_match_all(uptr, u8); |
137 | SANITIZER_INTERFACE_ATTRIBUTE |
138 | void __hwasan_store4_match_all(uptr, u8); |
139 | SANITIZER_INTERFACE_ATTRIBUTE |
140 | void __hwasan_store8_match_all(uptr, u8); |
141 | SANITIZER_INTERFACE_ATTRIBUTE |
142 | void __hwasan_store16_match_all(uptr, u8); |
143 | |
144 | SANITIZER_INTERFACE_ATTRIBUTE |
145 | void __hwasan_storeN_match_all_noabort(uptr, uptr, u8); |
146 | SANITIZER_INTERFACE_ATTRIBUTE |
147 | void __hwasan_store1_match_all_noabort(uptr, u8); |
148 | SANITIZER_INTERFACE_ATTRIBUTE |
149 | void __hwasan_store2_match_all_noabort(uptr, u8); |
150 | SANITIZER_INTERFACE_ATTRIBUTE |
151 | void __hwasan_store4_match_all_noabort(uptr, u8); |
152 | SANITIZER_INTERFACE_ATTRIBUTE |
153 | void __hwasan_store8_match_all_noabort(uptr, u8); |
154 | SANITIZER_INTERFACE_ATTRIBUTE |
155 | void __hwasan_store16_match_all_noabort(uptr, u8); |
156 | |
157 | SANITIZER_INTERFACE_ATTRIBUTE |
158 | void __hwasan_tag_memory(uptr p, u8 tag, uptr sz); |
159 | |
160 | SANITIZER_INTERFACE_ATTRIBUTE |
161 | uptr __hwasan_tag_pointer(uptr p, u8 tag); |
162 | |
163 | SANITIZER_INTERFACE_ATTRIBUTE |
164 | u8 __hwasan_get_tag_from_pointer(uptr p); |
165 | |
166 | SANITIZER_INTERFACE_ATTRIBUTE |
167 | void __hwasan_tag_mismatch(uptr addr, u8 ts); |
168 | |
169 | SANITIZER_INTERFACE_ATTRIBUTE |
170 | void __hwasan_tag_mismatch4(uptr addr, uptr access_info, uptr *registers_frame, |
171 | size_t outsize); |
172 | |
173 | SANITIZER_INTERFACE_ATTRIBUTE |
174 | u8 __hwasan_generate_tag(); |
175 | |
176 | // Returns the offset of the first tag mismatch or -1 if the whole range is |
177 | // good. |
178 | SANITIZER_INTERFACE_ATTRIBUTE |
179 | sptr __hwasan_test_shadow(const void *x, uptr size); |
180 | |
181 | SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE |
182 | /* OPTIONAL */ const char* __hwasan_default_options(); |
183 | |
184 | SANITIZER_INTERFACE_ATTRIBUTE |
185 | void __hwasan_print_shadow(const void *x, uptr size); |
186 | |
187 | SANITIZER_INTERFACE_ATTRIBUTE |
188 | void __hwasan_handle_longjmp(const void *sp_dst); |
189 | |
190 | SANITIZER_INTERFACE_ATTRIBUTE |
191 | void __hwasan_handle_vfork(const void *sp_dst); |
192 | |
193 | SANITIZER_INTERFACE_ATTRIBUTE |
194 | u16 __sanitizer_unaligned_load16(const uu16 *p); |
195 | |
196 | SANITIZER_INTERFACE_ATTRIBUTE |
197 | u32 __sanitizer_unaligned_load32(const uu32 *p); |
198 | |
199 | SANITIZER_INTERFACE_ATTRIBUTE |
200 | u64 __sanitizer_unaligned_load64(const uu64 *p); |
201 | |
202 | SANITIZER_INTERFACE_ATTRIBUTE |
203 | void __sanitizer_unaligned_store16(uu16 *p, u16 x); |
204 | |
205 | SANITIZER_INTERFACE_ATTRIBUTE |
206 | void __sanitizer_unaligned_store32(uu32 *p, u32 x); |
207 | |
208 | SANITIZER_INTERFACE_ATTRIBUTE |
209 | void __sanitizer_unaligned_store64(uu64 *p, u64 x); |
210 | |
211 | SANITIZER_INTERFACE_ATTRIBUTE |
212 | void __hwasan_enable_allocator_tagging(); |
213 | |
214 | SANITIZER_INTERFACE_ATTRIBUTE |
215 | void __hwasan_disable_allocator_tagging(); |
216 | |
217 | SANITIZER_INTERFACE_ATTRIBUTE |
218 | void __hwasan_thread_enter(); |
219 | |
220 | SANITIZER_INTERFACE_ATTRIBUTE |
221 | void __hwasan_thread_exit(); |
222 | |
223 | SANITIZER_INTERFACE_ATTRIBUTE |
224 | void __hwasan_print_memory_usage(); |
225 | |
226 | // The compiler will generate this when |
227 | // `-hwasan-record-stack-history-with-calls` is added as a flag, which will add |
228 | // frame record information to the stack ring buffer. This is an alternative to |
229 | // the compiler emitting instructions in the prologue for doing the same thing |
230 | // by accessing the ring buffer directly. |
231 | SANITIZER_INTERFACE_ATTRIBUTE |
232 | void __hwasan_add_frame_record(u64 frame_record_info); |
233 | |
234 | SANITIZER_INTERFACE_ATTRIBUTE |
235 | void *__hwasan_memcpy(void *dst, const void *src, uptr size); |
236 | SANITIZER_INTERFACE_ATTRIBUTE |
237 | void *__hwasan_memset(void *s, int c, uptr n); |
238 | SANITIZER_INTERFACE_ATTRIBUTE |
239 | void *__hwasan_memmove(void *dest, const void *src, uptr n); |
240 | |
241 | SANITIZER_INTERFACE_ATTRIBUTE |
242 | void *__hwasan_memcpy_match_all(void *dst, const void *src, uptr size, u8); |
243 | SANITIZER_INTERFACE_ATTRIBUTE |
244 | void *__hwasan_memset_match_all(void *s, int c, uptr n, u8); |
245 | SANITIZER_INTERFACE_ATTRIBUTE |
246 | void *__hwasan_memmove_match_all(void *dest, const void *src, uptr n, u8); |
247 | |
248 | SANITIZER_INTERFACE_ATTRIBUTE |
249 | void __hwasan_set_error_report_callback(void (*callback)(const char *)); |
250 | } // extern "C" |
251 | |
252 | #endif // HWASAN_INTERFACE_INTERNAL_H |
253 | |