#ifndef CANGJIERUNTIME_SANITIZERINTERFACE_H
#define CANGJIERUNTIME_SANITIZERINTERFACE_H
#include <cstdint>
#include "Base/Macros.h"
#include "Common/TypeDef.h"
#include "SanitizerMacros.h"
#ifdef CANGJIE_ASAN_SUPPORT
#include "Sanitizer/AddressSanitizer/AsanInterface.h"
#endif
#ifdef CANGJIE_TSAN_SUPPORT
#include "Sanitizer/ThreadSanitizer/TsanInterface.h"
#endif
#ifdef CANGJIE_HWASAN_SUPPORT
#include "Sanitizer/HwAddressSanitizer/HwasanInterface.h"
#endif
#ifdef CANGJIE_GWPASAN_SUPPORT
#include "Sanitizer/GwpAddressSanitizer/GwpAsanInterface.h"
#endif
#ifndef SANITIZER_NAME
#error "sanitizer name not defined, please check corresponding sanitizer interface header."
#endif
#ifndef SANITIZER_SHORTEN_NAME
#error "sanitizer shorten name not defined, please check corresponding sanitizer interface header."
#endif
namespace MapleRuntime {
namespace Sanitizer {
void OnHeapAllocated(void* addr, size_t size);
void OnHeapDeallocated(void* addr, size_t size);
#if defined(GENERAL_ASAN_SUPPORT_INTERFACE) || defined(CANGJIE_GWPASAN_SUPPORT)
void* ArrayAcquireMemoryRegion(ArrayRef array, void* addr, size_t size);
void* ArrayReleaseMemoryRegion(ArrayRef array, void* alias, size_t size);
#endif
#ifdef GENERAL_ASAN_SUPPORT_INTERFACE
void AsanRead(volatile const void* addr, uintptr_t size);
void AsanWrite(volatile const void* addr, uintptr_t size);
void HandleNoReturn(uint64_t from, uint64_t to);
#endif
}
}
#endif