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