Index: source/Core/Module.cpp =================================================================== --- source/Core/Module.cpp +++ source/Core/Module.cpp @@ -1306,8 +1306,19 @@ { // Once we get the object file, update our module with the object file's // architecture since it might differ in vendor/os if some parts were - // unknown. - m_objfile_sp->GetArchitecture (m_arch); + // unknown. But since the matching arch might already be more specific + // than the generic COFF architecture, only overwrite those fields that + // are unknown. + ArchSpec new_arch; + m_objfile_sp->GetArchitecture (new_arch); + if (m_arch.GetTriple().getVendor() == llvm::Triple::UnknownVendor) + m_arch.GetTriple().setVendor(new_arch.GetTriple().getVendor()); + if (m_arch.GetTriple().getOS() == llvm::Triple::UnknownOS) + m_arch.GetTriple().setOS(new_arch.GetTriple().getOS()); + if (m_arch.GetTriple().getArch() == llvm::Triple::UnknownArch) + m_arch.GetTriple().setArch(new_arch.GetTriple().getArch()); + if (m_arch.GetTriple().getEnvironment() == llvm::Triple::UnknownEnvironment) + m_arch.GetTriple().setEnvironment(new_arch.GetTriple().getEnvironment()); } else { Index: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp =================================================================== --- source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -130,10 +130,17 @@ { ArchSpec spec; if (coff_header.machine == MachineAmd64) + { spec.SetTriple("x86_64-pc-windows"); + specs.Append(ModuleSpec(file, spec)); + } else if (coff_header.machine == MachineX86) + { spec.SetTriple("i386-pc-windows"); - specs.Append(ModuleSpec(file, spec)); + specs.Append(ModuleSpec(file, spec)); + spec.SetTriple("i686-pc-windows"); + specs.Append(ModuleSpec(file, spec)); + } } } }