From 6fa386bfc61097b84f64f1bc9496dfef3ed487d4 Mon Sep 17 00:00:00 2001 From: "qsr@chromium.org" Date: Tue, 15 Oct 2013 10:24:21 +0000 Subject: Support symbol dumping for ARMV8 iOS apps. In my testing, ARM V8 object files and ARM V8 slices of universal binaries do not contain debug_frame sections (at least at this time), and hence dump_syms does not output CFI for ARM V8 even in the absence of the "-c" flag. Patch by:blundell@chromium.org BUG=542 R=qsr@chromium.org Review URL: https://breakpad.appspot.com/642002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1222 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/common/mac/arch_utilities.cc | 32 ++++++++++++++++++++++++++++++++ src/common/mac/macho_reader.cc | 5 +++++ 2 files changed, 37 insertions(+) (limited to 'src/common/mac') diff --git a/src/common/mac/arch_utilities.cc b/src/common/mac/arch_utilities.cc index 972a3dae..94e3be3b 100644 --- a/src/common/mac/arch_utilities.cc +++ b/src/common/mac/arch_utilities.cc @@ -45,8 +45,27 @@ #define CPU_SUBTYPE_ARM_V7S (static_cast(11)) #endif // CPU_SUBTYPE_ARM_V7S +#ifndef CPU_TYPE_ARM64 +#define CPU_TYPE_ARM64 (static_cast(16777228)) +#endif // CPU_TYPE_ARM64 + +#ifndef CPU_SUBTYPE_ARM64_ALL +#define CPU_SUBTYPE_ARM64_ALL (static_cast(0)) +#endif // CPU_SUBTYPE_ARM64_ALL + namespace { +const NXArchInfo* ArchInfo_arm64() { + NXArchInfo* arm64 = new NXArchInfo; + *arm64 = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM, + CPU_SUBTYPE_ARM_V7); + arm64->name = "arm64"; + arm64->cputype = CPU_TYPE_ARM64; + arm64->cpusubtype = CPU_SUBTYPE_ARM64_ALL; + arm64->description = "arm 64"; + return arm64; +} + const NXArchInfo* ArchInfo_armv7s() { NXArchInfo* armv7s = new NXArchInfo; *armv7s = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM, @@ -62,19 +81,32 @@ const NXArchInfo* ArchInfo_armv7s() { namespace google_breakpad { const NXArchInfo* BreakpadGetArchInfoFromName(const char* arch_name) { + // TODO: Remove this when the OS knows about arm64. + if (!strcmp("arm64", arch_name)) + return BreakpadGetArchInfoFromCpuType(CPU_TYPE_ARM64, + CPU_SUBTYPE_ARM64_ALL); + // TODO: Remove this when the OS knows about armv7s. if (!strcmp("armv7s", arch_name)) return BreakpadGetArchInfoFromCpuType(CPU_TYPE_ARM, CPU_SUBTYPE_ARM_V7S); + return NXGetArchInfoFromName(arch_name); } const NXArchInfo* BreakpadGetArchInfoFromCpuType(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) { + // TODO: Remove this when the OS knows about arm64. + if (cpu_type == CPU_TYPE_ARM64 && cpu_subtype == CPU_SUBTYPE_ARM64_ALL) { + static const NXArchInfo* arm64 = ArchInfo_arm64(); + return arm64; + } + // TODO: Remove this when the OS knows about armv7s. if (cpu_type == CPU_TYPE_ARM && cpu_subtype == CPU_SUBTYPE_ARM_V7S) { static const NXArchInfo* armv7s = ArchInfo_armv7s(); return armv7s; } + return NXGetArchInfoFromCpuType(cpu_type, cpu_subtype); } diff --git a/src/common/mac/macho_reader.cc b/src/common/mac/macho_reader.cc index f1f0a179..84b595a3 100644 --- a/src/common/mac/macho_reader.cc +++ b/src/common/mac/macho_reader.cc @@ -43,6 +43,10 @@ #define CPU_TYPE_ARM 12 #endif +#if !defined(CPU_TYPE_ARM_64) +#define CPU_TYPE_ARM_64 16777228 +#endif + namespace google_breakpad { namespace mach_o { @@ -242,6 +246,7 @@ bool Reader::Read(const uint8_t *buffer, case CPU_TYPE_POWERPC: expected_magic = MH_MAGIC; break; + case CPU_TYPE_ARM_64: case CPU_TYPE_X86_64: expected_magic = MH_CIGAM_64; break; -- cgit v1.2.1