mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:58:11 +08:00
[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.
This commit is contained in:
committed by
GitHub
parent
d4222bf9e2
commit
a51d219ee7
@@ -59,6 +59,7 @@ def is_valid_arch(s):
|
||||
"armv7s",
|
||||
"armv7k",
|
||||
"arm64",
|
||||
"arm64e",
|
||||
"powerpc64",
|
||||
"powerpc64le",
|
||||
"s390x",
|
||||
|
||||
@@ -737,6 +737,7 @@ enum ModuleArch {
|
||||
kModuleArchARMV7S,
|
||||
kModuleArchARMV7K,
|
||||
kModuleArchARM64,
|
||||
kModuleArchARM64E,
|
||||
kModuleArchLoongArch64,
|
||||
kModuleArchRISCV64,
|
||||
kModuleArchHexagon
|
||||
@@ -810,6 +811,8 @@ inline const char *ModuleArchToString(ModuleArch arch) {
|
||||
return "armv7k";
|
||||
case kModuleArchARM64:
|
||||
return "arm64";
|
||||
case kModuleArchARM64E:
|
||||
return "arm64e";
|
||||
case kModuleArchLoongArch64:
|
||||
return "loongarch64";
|
||||
case kModuleArchRISCV64:
|
||||
|
||||
@@ -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 @@ ModuleArch ModuleArchFromCpuType(cpu_type_t cputype, cpu_subtype_t cpusubtype) {
|
||||
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");
|
||||
|
||||
@@ -70,7 +70,7 @@ TEST(MemoryMapping, LoadedModuleArchAndUUID) {
|
||||
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};
|
||||
|
||||
Reference in New Issue
Block a user