#include "sanitizer_common/sanitizer_atomic.h"
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#ifdef KERNEL_USE
extern "C" void ubsan_message(const char *msg);
static void message(const char *msg) { ubsan_message(msg); }
#else
static void message(const char *msg) { … }
#endif
static const int kMaxCallerPcs = …;
static __sanitizer::atomic_uintptr_t caller_pcs[kMaxCallerPcs];
static __sanitizer::atomic_uint32_t caller_pcs_sz;
__attribute__((noinline)) static bool report_this_error(uintptr_t caller) { … }
__attribute__((noinline)) static void decorate_msg(char *buf,
uintptr_t caller) { … }
#if defined(__ANDROID__)
extern "C" __attribute__((weak)) void android_set_abort_message(const char *);
static void abort_with_message(const char *msg) {
if (&android_set_abort_message) android_set_abort_message(msg);
abort();
}
#else
static void abort_with_message(const char *) { … }
#endif
#if SANITIZER_DEBUG
namespace __sanitizer {
void NORETURN CheckFailed(const char *file, int, const char *cond, u64, u64) {
message("Sanitizer CHECK failed: ");
message(file);
message(":?? : ");
message(cond);
abort();
}
}
#endif
#define INTERFACE …
constexpr unsigned kAddrBuf = …;
#define MSG_TMPL(msg) …
#define MSG_TMPL_END(buf, msg) …
#define MSG_BUF_LEN(msg) …
#define HANDLER_RECOVER(name, msg) …
#define HANDLER_NORECOVER(name, msg) …
#define HANDLER(name, msg) …
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER_RECOVER(…)
HANDLER_RECOVER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)
HANDLER(…)