Index: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h =================================================================== --- source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h +++ source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h @@ -102,8 +102,7 @@ uint32_t GetAddressByteSize() const override; - // virtual lldb_private::AddressClass - // GetAddressClass (lldb::addr_t file_addr); + lldb::AddressClass GetAddressClass(lldb::addr_t file_addr) override; lldb_private::Symtab *GetSymtab() override; Index: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp =================================================================== --- source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -678,6 +678,23 @@ return false; } +lldb::AddressClass ObjectFilePECOFF::GetAddressClass(lldb::addr_t file_addr) { + auto address_class = ObjectFile::GetAddressClass(file_addr); + // Some addresses (e.g. from trampolines) are marked as eAddressClassUnknown. + if (address_class == eAddressClassCode || + address_class == eAddressClassUnknown) { + ArchSpec header_arch; + GetArchitecture(header_arch); + if (header_arch.GetMachine() == llvm::Triple::arm) { + // The only PECOFF/ARM target we support, Windows Phone, requires all + // user code to be Thumb, so we can always return + // eAddressClassCodeAlternateISA. + return eAddressClassCodeAlternateISA; + } + } + return address_class; +} + void ObjectFilePECOFF::CreateSections(SectionList &unified_section_list) { if (!m_sections_ap.get()) { m_sections_ap.reset(new SectionList());