Skip to content

Commit a51d219

Browse files
authored
[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.
1 parent d4222bf commit a51d219

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed

compiler-rt/lib/asan/scripts/asan_symbolize.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ def is_valid_arch(s):
5959
"armv7s",
6060
"armv7k",
6161
"arm64",
62+
"arm64e",
6263
"powerpc64",
6364
"powerpc64le",
6465
"s390x",

compiler-rt/lib/sanitizer_common/sanitizer_common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ enum ModuleArch {
737737
kModuleArchARMV7S,
738738
kModuleArchARMV7K,
739739
kModuleArchARM64,
740+
kModuleArchARM64E,
740741
kModuleArchLoongArch64,
741742
kModuleArchRISCV64,
742743
kModuleArchHexagon
@@ -810,6 +811,8 @@ inline const char *ModuleArchToString(ModuleArch arch) {
810811
return "armv7k";
811812
case kModuleArchARM64:
812813
return "arm64";
814+
case kModuleArchARM64E:
815+
return "arm64e";
813816
case kModuleArchLoongArch64:
814817
return "loongarch64";
815818
case kModuleArchRISCV64:

compiler-rt/lib/sanitizer_common/sanitizer_procmaps_mac.cpp

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@
2020
#include <mach/mach.h>
2121

2222
// These are not available in older macOS SDKs.
23-
#ifndef CPU_SUBTYPE_X86_64_H
24-
#define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
25-
#endif
26-
#ifndef CPU_SUBTYPE_ARM_V7S
27-
#define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
28-
#endif
29-
#ifndef CPU_SUBTYPE_ARM_V7K
30-
#define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
31-
#endif
32-
#ifndef CPU_TYPE_ARM64
33-
#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
34-
#endif
23+
# ifndef CPU_SUBTYPE_X86_64_H
24+
# define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
25+
# endif
26+
# ifndef CPU_SUBTYPE_ARM_V7S
27+
# define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
28+
# endif
29+
# ifndef CPU_SUBTYPE_ARM_V7K
30+
# define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
31+
# endif
32+
# ifndef CPU_TYPE_ARM64
33+
# define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
34+
# endif
35+
# ifndef CPU_SUBTYPE_ARM64E
36+
# define CPU_SUBTYPE_ARM64E ((cpu_subtype_t)2)
37+
# endif
3538

3639
namespace __sanitizer {
3740

@@ -311,18 +314,26 @@ ModuleArch ModuleArchFromCpuType(cpu_type_t cputype, cpu_subtype_t cpusubtype) {
311314
case CPU_TYPE_I386:
312315
return kModuleArchI386;
313316
case CPU_TYPE_X86_64:
314-
if (cpusubtype == CPU_SUBTYPE_X86_64_ALL) return kModuleArchX86_64;
315-
if (cpusubtype == CPU_SUBTYPE_X86_64_H) return kModuleArchX86_64H;
317+
if (cpusubtype == CPU_SUBTYPE_X86_64_ALL)
318+
return kModuleArchX86_64;
319+
if (cpusubtype == CPU_SUBTYPE_X86_64_H)
320+
return kModuleArchX86_64H;
316321
CHECK(0 && "Invalid subtype of x86_64");
317322
return kModuleArchUnknown;
318323
case CPU_TYPE_ARM:
319-
if (cpusubtype == CPU_SUBTYPE_ARM_V6) return kModuleArchARMV6;
320-
if (cpusubtype == CPU_SUBTYPE_ARM_V7) return kModuleArchARMV7;
321-
if (cpusubtype == CPU_SUBTYPE_ARM_V7S) return kModuleArchARMV7S;
322-
if (cpusubtype == CPU_SUBTYPE_ARM_V7K) return kModuleArchARMV7K;
324+
if (cpusubtype == CPU_SUBTYPE_ARM_V6)
325+
return kModuleArchARMV6;
326+
if (cpusubtype == CPU_SUBTYPE_ARM_V7)
327+
return kModuleArchARMV7;
328+
if (cpusubtype == CPU_SUBTYPE_ARM_V7S)
329+
return kModuleArchARMV7S;
330+
if (cpusubtype == CPU_SUBTYPE_ARM_V7K)
331+
return kModuleArchARMV7K;
323332
CHECK(0 && "Invalid subtype of ARM");
324333
return kModuleArchUnknown;
325334
case CPU_TYPE_ARM64:
335+
if (cpusubtype == CPU_SUBTYPE_ARM64E)
336+
return kModuleArchARM64E;
326337
return kModuleArchARM64;
327338
default:
328339
CHECK(0 && "Invalid CPU type");

compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ TEST(MemoryMapping, LoadedModuleArchAndUUID) {
7070
EXPECT_EQ(arch, kModuleArchI386);
7171
} else if (SANITIZER_WORDSIZE == 64) {
7272
EXPECT_TRUE(arch == kModuleArchX86_64 || arch == kModuleArchX86_64H ||
73-
arch == kModuleArchARM64);
73+
arch == kModuleArchARM64 || arch == kModuleArchARM64E);
7474
}
7575
const u8 *uuid = modules[i].uuid();
7676
u8 null_uuid[kModuleUUIDSize] = {0};

0 commit comments

Comments
 (0)