diff --git a/compiler-rt/lib/scudo/standalone/linux.cpp b/compiler-rt/lib/scudo/standalone/linux.cpp --- a/compiler-rt/lib/scudo/standalone/linux.cpp +++ b/compiler-rt/lib/scudo/standalone/linux.cpp @@ -35,10 +35,6 @@ #define ANDROID_PR_SET_VMA_ANON_NAME 0 #endif -#ifdef ANDROID_EXPERIMENTAL_MTE -#include -#endif - namespace scudo { uptr getPageSize() { return static_cast(sysconf(_SC_PAGESIZE)); } @@ -54,7 +50,10 @@ MmapProt = PROT_NONE; } else { MmapProt = PROT_READ | PROT_WRITE; -#if defined(__aarch64__) && defined(ANDROID_EXPERIMENTAL_MTE) +#if defined(__aarch64__) +#ifndef PROT_MTE +#define PROT_MTE 0x20 +#endif if (Flags & MAP_MEMTAG) MmapProt |= PROT_MTE; #endif diff --git a/compiler-rt/lib/scudo/standalone/memtag.h b/compiler-rt/lib/scudo/standalone/memtag.h --- a/compiler-rt/lib/scudo/standalone/memtag.h +++ b/compiler-rt/lib/scudo/standalone/memtag.h @@ -14,9 +14,6 @@ #if SCUDO_LINUX #include #include -#if defined(ANDROID_EXPERIMENTAL_MTE) -#include -#endif #endif namespace scudo { @@ -56,20 +53,28 @@ #if defined(__aarch64__) inline bool systemSupportsMemoryTagging() { -#if defined(ANDROID_EXPERIMENTAL_MTE) - return getauxval(AT_HWCAP2) & HWCAP2_MTE; -#else - return false; +#ifndef HWCAP2_MTE +#define HWCAP2_MTE (1 << 18) #endif + return getauxval(AT_HWCAP2) & HWCAP2_MTE; } inline bool systemDetectsMemoryTagFaultsTestOnly() { -#if defined(ANDROID_EXPERIMENTAL_MTE) - return (prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0) & PR_MTE_TCF_MASK) != - PR_MTE_TCF_NONE; -#else - return false; +#ifndef PR_GET_TAGGED_ADDR_CTRL +#define PR_GET_TAGGED_ADDR_CTRL 56 +#endif +#ifndef PR_MTE_TCF_SHIFT +#define PR_MTE_TCF_SHIFT 1 +#endif +#ifndef PR_MTE_TCF_NONE +#define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT) +#endif +#ifndef PR_MTE_TCF_MASK +#define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT) #endif + return (static_cast( + prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0)) & + PR_MTE_TCF_MASK) != PR_MTE_TCF_NONE; } inline void disableMemoryTagChecksTestOnly() {