diff options
Diffstat (limited to 'lldb/source')
-rw-r--r-- | lldb/source/Core/ArchSpec.cpp | 10 | ||||
-rw-r--r-- | lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 25 |
2 files changed, 32 insertions, 3 deletions
diff --git a/lldb/source/Core/ArchSpec.cpp b/lldb/source/Core/ArchSpec.cpp index 97ae4971239..bfe8b62f5eb 100644 --- a/lldb/source/Core/ArchSpec.cpp +++ b/lldb/source/Core/ArchSpec.cpp @@ -905,6 +905,10 @@ cores_match (const ArchSpec::Core core1, const ArchSpec::Core core2, bool try_in case ArchSpec::kCore_any: return true; + case ArchSpec::eCore_arm_generic: + if (enforce_exact_match) + break; + // Fall through to case below case ArchSpec::kCore_arm_any: if (core2 >= ArchSpec::kCore_arm_first && core2 <= ArchSpec::kCore_arm_last) return true; @@ -932,6 +936,8 @@ cores_match (const ArchSpec::Core core1, const ArchSpec::Core core2, bool try_in case ArchSpec::eCore_arm_armv6m: if (!enforce_exact_match) { + if (core2 == ArchSpec::eCore_arm_generic) + return true; try_inverse = false; if (core2 == ArchSpec::eCore_arm_armv7) return true; @@ -949,9 +955,11 @@ cores_match (const ArchSpec::Core core1, const ArchSpec::Core core2, bool try_in case ArchSpec::eCore_arm_armv7s: if (!enforce_exact_match) { - try_inverse = false; + if (core2 == ArchSpec::eCore_arm_generic) + return true; if (core2 == ArchSpec::eCore_arm_armv7) return true; + try_inverse = false; } break; diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp index e7266d2776d..50cdd18a8fb 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -1251,8 +1251,29 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl §ion_headers, if (arch_spec.GetTriple ().getOS () == llvm::Triple::OSType::UnknownOS) { arch_spec.SetArchitecture (eArchTypeELF, header.e_machine, LLDB_INVALID_CPUTYPE); - arch_spec.GetTriple().setOSName (Host::GetOSString().GetCString()); - arch_spec.GetTriple().setVendorName(Host::GetVendorString().GetCString()); + switch (arch_spec.GetAddressByteSize()) + { + case 4: + { + const ArchSpec host_arch32 = Host::GetArchitecture (Host::eSystemDefaultArchitecture32); + if (host_arch32.GetCore() == arch_spec.GetCore()) + { + arch_spec.GetTriple().setOSName (Host::GetOSString().GetCString()); + arch_spec.GetTriple().setVendorName(Host::GetVendorString().GetCString()); + } + } + break; + case 8: + { + const ArchSpec host_arch64 = Host::GetArchitecture (Host::eSystemDefaultArchitecture64); + if (host_arch64.GetCore() == arch_spec.GetCore()) + { + arch_spec.GetTriple().setOSName (Host::GetOSString().GetCString()); + arch_spec.GetTriple().setVendorName(Host::GetVendorString().GetCString()); + } + } + break; + } } // If there are no section headers we are done. |