hwasan_interface_internal.h revision 360784
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
21extern "C" {
22
23SANITIZER_INTERFACE_ATTRIBUTE
24void __hwasan_init_static();
25
26SANITIZER_INTERFACE_ATTRIBUTE
27void __hwasan_init();
28
29SANITIZER_INTERFACE_ATTRIBUTE
30void __hwasan_library_loaded(ElfW(Addr) base, const ElfW(Phdr) * phdr,
31                             ElfW(Half) phnum);
32
33SANITIZER_INTERFACE_ATTRIBUTE
34void __hwasan_library_unloaded(ElfW(Addr) base, const ElfW(Phdr) * phdr,
35                               ElfW(Half) phnum);
36
37using __sanitizer::uptr;
38using __sanitizer::sptr;
39using __sanitizer::uu64;
40using __sanitizer::uu32;
41using __sanitizer::uu16;
42using __sanitizer::u64;
43using __sanitizer::u32;
44using __sanitizer::u16;
45using __sanitizer::u8;
46
47SANITIZER_INTERFACE_ATTRIBUTE
48void __hwasan_init_frames(uptr, uptr);
49
50SANITIZER_INTERFACE_ATTRIBUTE
51extern uptr __hwasan_shadow_memory_dynamic_address;
52
53SANITIZER_INTERFACE_ATTRIBUTE
54void __hwasan_loadN(uptr, uptr);
55SANITIZER_INTERFACE_ATTRIBUTE
56void __hwasan_load1(uptr);
57SANITIZER_INTERFACE_ATTRIBUTE
58void __hwasan_load2(uptr);
59SANITIZER_INTERFACE_ATTRIBUTE
60void __hwasan_load4(uptr);
61SANITIZER_INTERFACE_ATTRIBUTE
62void __hwasan_load8(uptr);
63SANITIZER_INTERFACE_ATTRIBUTE
64void __hwasan_load16(uptr);
65
66SANITIZER_INTERFACE_ATTRIBUTE
67void __hwasan_loadN_noabort(uptr, uptr);
68SANITIZER_INTERFACE_ATTRIBUTE
69void __hwasan_load1_noabort(uptr);
70SANITIZER_INTERFACE_ATTRIBUTE
71void __hwasan_load2_noabort(uptr);
72SANITIZER_INTERFACE_ATTRIBUTE
73void __hwasan_load4_noabort(uptr);
74SANITIZER_INTERFACE_ATTRIBUTE
75void __hwasan_load8_noabort(uptr);
76SANITIZER_INTERFACE_ATTRIBUTE
77void __hwasan_load16_noabort(uptr);
78
79SANITIZER_INTERFACE_ATTRIBUTE
80void __hwasan_storeN(uptr, uptr);
81SANITIZER_INTERFACE_ATTRIBUTE
82void __hwasan_store1(uptr);
83SANITIZER_INTERFACE_ATTRIBUTE
84void __hwasan_store2(uptr);
85SANITIZER_INTERFACE_ATTRIBUTE
86void __hwasan_store4(uptr);
87SANITIZER_INTERFACE_ATTRIBUTE
88void __hwasan_store8(uptr);
89SANITIZER_INTERFACE_ATTRIBUTE
90void __hwasan_store16(uptr);
91
92SANITIZER_INTERFACE_ATTRIBUTE
93void __hwasan_storeN_noabort(uptr, uptr);
94SANITIZER_INTERFACE_ATTRIBUTE
95void __hwasan_store1_noabort(uptr);
96SANITIZER_INTERFACE_ATTRIBUTE
97void __hwasan_store2_noabort(uptr);
98SANITIZER_INTERFACE_ATTRIBUTE
99void __hwasan_store4_noabort(uptr);
100SANITIZER_INTERFACE_ATTRIBUTE
101void __hwasan_store8_noabort(uptr);
102SANITIZER_INTERFACE_ATTRIBUTE
103void __hwasan_store16_noabort(uptr);
104
105SANITIZER_INTERFACE_ATTRIBUTE
106void __hwasan_tag_memory(uptr p, u8 tag, uptr sz);
107
108SANITIZER_INTERFACE_ATTRIBUTE
109uptr __hwasan_tag_pointer(uptr p, u8 tag);
110
111SANITIZER_INTERFACE_ATTRIBUTE
112void __hwasan_tag_mismatch(uptr addr, u8 ts);
113
114SANITIZER_INTERFACE_ATTRIBUTE
115void __hwasan_tag_mismatch4(uptr addr, uptr access_info, uptr *registers_frame,
116                            size_t outsize);
117
118SANITIZER_INTERFACE_ATTRIBUTE
119u8 __hwasan_generate_tag();
120
121// Returns the offset of the first tag mismatch or -1 if the whole range is
122// good.
123SANITIZER_INTERFACE_ATTRIBUTE
124sptr __hwasan_test_shadow(const void *x, uptr size);
125
126SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
127/* OPTIONAL */ const char* __hwasan_default_options();
128
129SANITIZER_INTERFACE_ATTRIBUTE
130void __hwasan_print_shadow(const void *x, uptr size);
131
132SANITIZER_INTERFACE_ATTRIBUTE
133void __hwasan_handle_longjmp(const void *sp_dst);
134
135SANITIZER_INTERFACE_ATTRIBUTE
136void __hwasan_handle_vfork(const void *sp_dst);
137
138SANITIZER_INTERFACE_ATTRIBUTE
139u16 __sanitizer_unaligned_load16(const uu16 *p);
140
141SANITIZER_INTERFACE_ATTRIBUTE
142u32 __sanitizer_unaligned_load32(const uu32 *p);
143
144SANITIZER_INTERFACE_ATTRIBUTE
145u64 __sanitizer_unaligned_load64(const uu64 *p);
146
147SANITIZER_INTERFACE_ATTRIBUTE
148void __sanitizer_unaligned_store16(uu16 *p, u16 x);
149
150SANITIZER_INTERFACE_ATTRIBUTE
151void __sanitizer_unaligned_store32(uu32 *p, u32 x);
152
153SANITIZER_INTERFACE_ATTRIBUTE
154void __sanitizer_unaligned_store64(uu64 *p, u64 x);
155
156SANITIZER_INTERFACE_ATTRIBUTE
157void __hwasan_enable_allocator_tagging();
158
159SANITIZER_INTERFACE_ATTRIBUTE
160void __hwasan_disable_allocator_tagging();
161
162SANITIZER_INTERFACE_ATTRIBUTE
163void __hwasan_thread_enter();
164
165SANITIZER_INTERFACE_ATTRIBUTE
166void __hwasan_thread_exit();
167
168SANITIZER_INTERFACE_ATTRIBUTE
169void __hwasan_print_memory_usage();
170
171SANITIZER_INTERFACE_ATTRIBUTE
172int __sanitizer_posix_memalign(void **memptr, uptr alignment, uptr size);
173
174SANITIZER_INTERFACE_ATTRIBUTE
175void * __sanitizer_memalign(uptr alignment, uptr size);
176
177SANITIZER_INTERFACE_ATTRIBUTE
178void * __sanitizer_aligned_alloc(uptr alignment, uptr size);
179
180SANITIZER_INTERFACE_ATTRIBUTE
181void * __sanitizer___libc_memalign(uptr alignment, uptr size);
182
183SANITIZER_INTERFACE_ATTRIBUTE
184void * __sanitizer_valloc(uptr size);
185
186SANITIZER_INTERFACE_ATTRIBUTE
187void * __sanitizer_pvalloc(uptr size);
188
189SANITIZER_INTERFACE_ATTRIBUTE
190void __sanitizer_free(void *ptr);
191
192SANITIZER_INTERFACE_ATTRIBUTE
193void __sanitizer_cfree(void *ptr);
194
195SANITIZER_INTERFACE_ATTRIBUTE
196uptr __sanitizer_malloc_usable_size(const void *ptr);
197
198SANITIZER_INTERFACE_ATTRIBUTE
199__hwasan::__sanitizer_struct_mallinfo __sanitizer_mallinfo();
200
201SANITIZER_INTERFACE_ATTRIBUTE
202int __sanitizer_mallopt(int cmd, int value);
203
204SANITIZER_INTERFACE_ATTRIBUTE
205void __sanitizer_malloc_stats(void);
206
207SANITIZER_INTERFACE_ATTRIBUTE
208void * __sanitizer_calloc(uptr nmemb, uptr size);
209
210SANITIZER_INTERFACE_ATTRIBUTE
211void * __sanitizer_realloc(void *ptr, uptr size);
212
213SANITIZER_INTERFACE_ATTRIBUTE
214void * __sanitizer_reallocarray(void *ptr, uptr nmemb, uptr size);
215
216SANITIZER_INTERFACE_ATTRIBUTE
217void * __sanitizer_malloc(uptr size);
218
219SANITIZER_INTERFACE_ATTRIBUTE
220void *__hwasan_memcpy(void *dst, const void *src, uptr size);
221SANITIZER_INTERFACE_ATTRIBUTE
222void *__hwasan_memset(void *s, int c, uptr n);
223SANITIZER_INTERFACE_ATTRIBUTE
224void *__hwasan_memmove(void *dest, const void *src, uptr n);
225}  // extern "C"
226
227#endif  // HWASAN_INTERFACE_INTERNAL_H
228