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