brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 99a4dd9 Raw
65 lines · c
1#ifndef __SANITIZER_COMMON_SANITIZER_SPECIFIC_H__2#define __SANITIZER_COMMON_SANITIZER_SPECIFIC_H__3 4#include <sanitizer/lsan_interface.h>5 6__attribute__((weak)) int __lsan_do_recoverable_leak_check() { return 0; }7__attribute__((weak)) void __lsan_disable(void) {}8__attribute__((weak)) void __lsan_enable(void) {}9 10#ifndef __has_feature11#  define __has_feature(x) 012#endif13 14#if __has_feature(memory_sanitizer)15#  include <sanitizer/msan_interface.h>16static void check_mem_is_good(void *p, size_t s) {17  __msan_check_mem_is_initialized(p, s);18}19static void make_mem_good(void *p, size_t s) { __msan_unpoison(p, s); }20static void make_mem_bad(void *p, size_t s) { __msan_poison(p, s); }21#elif __has_feature(address_sanitizer)22#  include <sanitizer/asan_interface.h>23#  include <stdlib.h>24static void check_mem_is_good(void *p, size_t s) {25  if (__asan_region_is_poisoned(p, s))26    abort();27}28static void make_mem_good(void *p, size_t s) {29  __asan_unpoison_memory_region(p, s);30}31static void make_mem_bad(void *p, size_t s) {32  __asan_poison_memory_region(p, s);33}34#elif __has_feature(hwaddress_sanitizer)35#  include <sanitizer/hwasan_interface.h>36#  include <stdlib.h>37static void check_mem_is_good(void *p, size_t s) {38  if (__hwasan_test_shadow(p, s) != -1)39    abort();40}41static void make_mem_good(void *p, size_t s) {42  __hwasan_tag_memory(p, __hwasan_get_tag_from_pointer(p), s);43}44static void make_mem_bad(void *p, size_t s) {45  uint8_t tag = ~__hwasan_get_tag_from_pointer(p);46  if (!tag) {47    // Nothing wrong with tag zero, but non-zero tags help to detect never48    // tagged memory.49    tag = 1;50  }51  __hwasan_tag_memory(p, tag, s);52  // With misaligned `p` or short granules we can't guarantee tag mismatch.53  if (__hwasan_test_shadow(p, s) != 0)54    abort();55  if (s > 1 && __hwasan_test_shadow(((char *)p) + s - 1, 1) != 0)56    abort();57}58#else59static void check_mem_is_good(void *p, size_t s) {}60static void make_mem_good(void *p, size_t s) {}61static void make_mem_bad(void *p, size_t s) {}62#endif63 64#endif // __SANITIZER_COMMON_SANITIZER_SPECIFIC_H__65