2021-02-01 11:33:13 +00:00
|
|
|
#ifndef COSMOPOLITAN_LIBC_INTRIN_ASAN_H_
|
|
|
|
#define COSMOPOLITAN_LIBC_INTRIN_ASAN_H_
|
2021-05-14 12:36:58 +00:00
|
|
|
#include "libc/calls/struct/iovec.h"
|
2021-02-01 11:33:13 +00:00
|
|
|
|
|
|
|
#define kAsanScale 3
|
|
|
|
#define kAsanMagic 0x7fff8000
|
2021-09-28 05:58:51 +00:00
|
|
|
#define kAsanHeapFree -1 /* F */
|
|
|
|
#define kAsanStackFree -2 /* F */
|
|
|
|
#define kAsanRelocated -3 /* R */
|
|
|
|
#define kAsanHeapUnderrun -4 /* U */
|
|
|
|
#define kAsanHeapOverrun -5 /* O */
|
|
|
|
#define kAsanGlobalOverrun -6 /* O */
|
|
|
|
#define kAsanGlobalUnregistered -7 /* G */
|
|
|
|
#define kAsanStackUnderrun -8 /* U */
|
|
|
|
#define kAsanStackOverrun -9 /* O */
|
|
|
|
#define kAsanAllocaUnderrun -10 /* U */
|
|
|
|
#define kAsanAllocaOverrun -11 /* O */
|
|
|
|
#define kAsanUnscoped -12 /* S */
|
|
|
|
#define kAsanUnmapped -13 /* M */
|
|
|
|
#define kAsanProtected -14 /* P */
|
|
|
|
#define kAsanStackGuard -15 /* _ */
|
2021-02-01 11:33:13 +00:00
|
|
|
|
2021-09-28 05:58:51 +00:00
|
|
|
#define SHADOW(x) ((signed char *)(((uintptr_t)(x) >> kAsanScale) + kAsanMagic))
|
|
|
|
#define UNSHADOW(x) ((void *)(((uintptr_t)(x) + 0x7fff8000) << 3))
|
2021-02-01 11:33:13 +00:00
|
|
|
|
2021-09-28 05:58:51 +00:00
|
|
|
struct AsanFault {
|
|
|
|
char kind;
|
|
|
|
signed char *shadow;
|
|
|
|
};
|
|
|
|
|
|
|
|
void __asan_unpoison(uintptr_t, size_t);
|
|
|
|
void __asan_verify(const void *, size_t);
|
2021-02-01 11:33:13 +00:00
|
|
|
void __asan_map_shadow(uintptr_t, size_t);
|
|
|
|
void __asan_poison(uintptr_t, size_t, int);
|
2021-05-14 12:36:58 +00:00
|
|
|
bool __asan_is_valid(const void *, size_t);
|
2021-08-22 22:02:18 +00:00
|
|
|
bool __asan_is_valid_strlist(char *const *);
|
2021-09-28 05:58:51 +00:00
|
|
|
bool __asan_is_valid_iov(const struct iovec *, int);
|
|
|
|
struct AsanFault __asan_check(const void *, size_t);
|
|
|
|
void __asan_report_memory_fault(void *, int, const char *) wontreturn;
|
|
|
|
void __asan_report(void *, int, const char *, char) wontreturn;
|
|
|
|
void *__asan_memalign(size_t, size_t);
|
|
|
|
void __asan_free(void *);
|
|
|
|
void *__asan_malloc(size_t);
|
|
|
|
void *__asan_calloc(size_t, size_t);
|
|
|
|
void *__asan_realloc(void *, size_t);
|
|
|
|
void *__asan_realloc_in_place(void *, size_t);
|
|
|
|
void *__asan_valloc(size_t);
|
|
|
|
void *__asan_pvalloc(size_t);
|
|
|
|
int __asan_malloc_trim(size_t);
|
|
|
|
void __asan_die(const char *) wontreturn;
|
2021-02-01 11:33:13 +00:00
|
|
|
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_INTRIN_ASAN_H_ */
|