diff --git a/lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp b/lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp --- a/lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp +++ b/lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp @@ -19,6 +19,7 @@ #include "llvm/DebugInfo/PDB/Native/PDBFile.h" #include "llvm/DebugInfo/PDB/PDB.h" #include "llvm/Support/BinaryByteStream.h" +#include "llvm/Support/Host.h" using namespace lldb; using namespace lldb_private; @@ -128,24 +129,38 @@ lldb_private::UUID &uuid = module_spec.GetUUID(); uuid = GetPDBUUID(*info_stream); + static llvm::Triple::EnvironmentType default_env = [] { + auto def_target = llvm::Triple( + llvm::Triple::normalize(llvm::sys::getDefaultTargetTriple())); + if (def_target.getOS() == llvm::Triple::Win32 && + def_target.getEnvironment() != llvm::Triple::UnknownEnvironment) + return def_target.getEnvironment(); + return llvm::Triple::MSVC; + }(); + ArchSpec &module_arch = module_spec.GetArchitecture(); switch (dbi_stream->getMachineType()) { case PDB_Machine::Amd64: module_arch.SetTriple("x86_64-pc-windows"); + module_arch.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case PDB_Machine::x86: module_arch.SetTriple("i386-pc-windows"); + module_arch.GetTriple().setEnvironment(default_env); specs.Append(module_spec); module_arch.SetTriple("i686-pc-windows"); + module_arch.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case PDB_Machine::ArmNT: module_arch.SetTriple("armv7-pc-windows"); + module_arch.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case PDB_Machine::Arm64: module_arch.SetTriple("aarch64-pc-windows"); + module_arch.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; default: diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp --- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -32,6 +32,7 @@ #include "llvm/Object/COFFImportFile.h" #include "llvm/Support/Error.h" +#include "llvm/Support/Host.h" #include "llvm/Support/MemoryBuffer.h" #define IMAGE_DOS_SIGNATURE 0x5A4D // MZ @@ -155,23 +156,37 @@ if (!uuid.IsValid()) uuid = GetCoffUUID(*COFFObj); + static llvm::Triple::EnvironmentType default_env = [] { + auto def_target = llvm::Triple( + llvm::Triple::normalize(llvm::sys::getDefaultTargetTriple())); + if (def_target.getOS() == llvm::Triple::Win32 && + def_target.getEnvironment() != llvm::Triple::UnknownEnvironment) + return def_target.getEnvironment(); + return llvm::Triple::MSVC; + }(); + switch (COFFObj->getMachine()) { case MachineAmd64: spec.SetTriple("x86_64-pc-windows"); + spec.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case MachineX86: spec.SetTriple("i386-pc-windows"); + spec.GetTriple().setEnvironment(default_env); specs.Append(module_spec); spec.SetTriple("i686-pc-windows"); + spec.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case MachineArmNt: spec.SetTriple("armv7-pc-windows"); + spec.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; case MachineArm64: spec.SetTriple("aarch64-pc-windows"); + spec.GetTriple().setEnvironment(default_env); specs.Append(module_spec); break; default: