[sanitizer_common] Add arm64e module type (#166018)
This will fix some symbolication failures on arm64e machines when the
symbolicator passes the (wrong) architecture string to atos.
GitOrigin-RevId: a51d219ee7ac9ca96ade7639bff5097c8b79c130
diff --git a/lib/asan/scripts/asan_symbolize.py b/lib/asan/scripts/asan_symbolize.py
index 8ecd66c..091e9bc 100755
--- a/lib/asan/scripts/asan_symbolize.py
+++ b/lib/asan/scripts/asan_symbolize.py
@@ -59,6 +59,7 @@
"armv7s",
"armv7k",
"arm64",
+ "arm64e",
"powerpc64",
"powerpc64le",
"s390x",
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h
index ba85a0e..b515b15 100644
--- a/lib/sanitizer_common/sanitizer_common.h
+++ b/lib/sanitizer_common/sanitizer_common.h
@@ -737,6 +737,7 @@
kModuleArchARMV7S,
kModuleArchARMV7K,
kModuleArchARM64,
+ kModuleArchARM64E,
kModuleArchLoongArch64,
kModuleArchRISCV64,
kModuleArchHexagon
@@ -810,6 +811,8 @@
return "armv7k";
case kModuleArchARM64:
return "arm64";
+ case kModuleArchARM64E:
+ return "arm64e";
case kModuleArchLoongArch64:
return "loongarch64";
case kModuleArchRISCV64:
diff --git a/lib/sanitizer_common/sanitizer_procmaps_mac.cpp b/lib/sanitizer_common/sanitizer_procmaps_mac.cpp
index a9533d6..a5ec85a 100644
--- a/lib/sanitizer_common/sanitizer_procmaps_mac.cpp
+++ b/lib/sanitizer_common/sanitizer_procmaps_mac.cpp
@@ -20,18 +20,21 @@
#include <mach/mach.h>
// These are not available in older macOS SDKs.
-#ifndef CPU_SUBTYPE_X86_64_H
-#define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
-#endif
-#ifndef CPU_SUBTYPE_ARM_V7S
-#define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
-#endif
-#ifndef CPU_SUBTYPE_ARM_V7K
-#define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
-#endif
-#ifndef CPU_TYPE_ARM64
-#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
-#endif
+# ifndef CPU_SUBTYPE_X86_64_H
+# define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
+# endif
+# ifndef CPU_SUBTYPE_ARM_V7S
+# define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
+# endif
+# ifndef CPU_SUBTYPE_ARM_V7K
+# define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
+# endif
+# ifndef CPU_TYPE_ARM64
+# define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
+# endif
+# ifndef CPU_SUBTYPE_ARM64E
+# define CPU_SUBTYPE_ARM64E ((cpu_subtype_t)2)
+# endif
namespace __sanitizer {
@@ -311,18 +314,26 @@
case CPU_TYPE_I386:
return kModuleArchI386;
case CPU_TYPE_X86_64:
- if (cpusubtype == CPU_SUBTYPE_X86_64_ALL) return kModuleArchX86_64;
- if (cpusubtype == CPU_SUBTYPE_X86_64_H) return kModuleArchX86_64H;
+ if (cpusubtype == CPU_SUBTYPE_X86_64_ALL)
+ return kModuleArchX86_64;
+ if (cpusubtype == CPU_SUBTYPE_X86_64_H)
+ return kModuleArchX86_64H;
CHECK(0 && "Invalid subtype of x86_64");
return kModuleArchUnknown;
case CPU_TYPE_ARM:
- if (cpusubtype == CPU_SUBTYPE_ARM_V6) return kModuleArchARMV6;
- if (cpusubtype == CPU_SUBTYPE_ARM_V7) return kModuleArchARMV7;
- if (cpusubtype == CPU_SUBTYPE_ARM_V7S) return kModuleArchARMV7S;
- if (cpusubtype == CPU_SUBTYPE_ARM_V7K) return kModuleArchARMV7K;
+ if (cpusubtype == CPU_SUBTYPE_ARM_V6)
+ return kModuleArchARMV6;
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7)
+ return kModuleArchARMV7;
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7S)
+ return kModuleArchARMV7S;
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7K)
+ return kModuleArchARMV7K;
CHECK(0 && "Invalid subtype of ARM");
return kModuleArchUnknown;
case CPU_TYPE_ARM64:
+ if (cpusubtype == CPU_SUBTYPE_ARM64E)
+ return kModuleArchARM64E;
return kModuleArchARM64;
default:
CHECK(0 && "Invalid CPU type");
diff --git a/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp b/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp
index 00542b9..c18e5bd 100644
--- a/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp
+++ b/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp
@@ -70,7 +70,7 @@
EXPECT_EQ(arch, kModuleArchI386);
} else if (SANITIZER_WORDSIZE == 64) {
EXPECT_TRUE(arch == kModuleArchX86_64 || arch == kModuleArchX86_64H ||
- arch == kModuleArchARM64);
+ arch == kModuleArchARM64 || arch == kModuleArchARM64E);
}
const u8 *uuid = modules[i].uuid();
u8 null_uuid[kModuleUUIDSize] = {0};