#include "platform.h"
#if SCUDO_LINUX
#include "common.h"
#include "internal_defs.h"
#include "linux.h"
#include "mutex.h"
#include "report_linux.h"
#include "string_utils.h"
#include <errno.h>
#include <fcntl.h>
#include <linux/futex.h>
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#if SCUDO_ANDROID
#include <sys/prctl.h>
#define ANDROID_PR_SET_VMA …
#define ANDROID_PR_SET_VMA_ANON_NAME …
#endif
namespace scudo {
#if !defined(SCUDO_PAGE_SIZE)
uptr getPageSize() { … }
#endif
void NORETURN die() { … }
void *map(void *Addr, uptr Size, UNUSED const char *Name, uptr Flags,
UNUSED MapPlatformData *Data) { … }
void unmap(void *Addr, uptr Size, UNUSED uptr Flags,
UNUSED MapPlatformData *Data) { … }
void setMemoryPermission(uptr Addr, uptr Size, uptr Flags,
UNUSED MapPlatformData *Data) { … }
void releasePagesToOS(uptr BaseAddress, uptr Offset, uptr Size,
UNUSED MapPlatformData *Data) { … }
const char *getEnv(const char *Name) { … }
namespace {
enum State : u32 { … };
}
bool HybridMutex::tryLock() { … }
void HybridMutex::lockSlow() { … }
void HybridMutex::unlock() { … }
void HybridMutex::assertHeldImpl() { … }
u64 getMonotonicTime() { … }
u64 getMonotonicTimeFast() { … }
u32 getNumberOfCPUs() { … }
u32 getThreadID() { … }
bool getRandom(void *Buffer, uptr Length, UNUSED bool Blocking) { … }
extern "C" WEAK int async_safe_write_log(int pri, const char *tag,
const char *msg);
void outputRaw(const char *Buffer) { … }
extern "C" WEAK void android_set_abort_message(const char *);
void setAbortMessage(const char *Message) { … }
}
#endif