diff options
Diffstat (limited to 'source/Target/ABI.cpp')
-rw-r--r-- | source/Target/ABI.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/Target/ABI.cpp b/source/Target/ABI.cpp index 28cd9aec665cb..005261e0ddee0 100644 --- a/source/Target/ABI.cpp +++ b/source/Target/ABI.cpp @@ -15,6 +15,8 @@ #include "lldb/Symbol/TypeSystem.h" #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" +#include "lldb/Utility/Log.h" +#include "llvm/Support/TargetRegistry.h" using namespace lldb; using namespace lldb_private; @@ -210,3 +212,20 @@ bool ABI::GetFallbackRegisterLocation( return false; } + +std::unique_ptr<llvm::MCRegisterInfo> ABI::MakeMCRegisterInfo(const ArchSpec &arch) { + std::string triple = arch.GetTriple().getTriple(); + std::string lookup_error; + const llvm::Target *target = + llvm::TargetRegistry::lookupTarget(triple, lookup_error); + if (!target) { + LLDB_LOG(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS), + "Failed to create an llvm target for {0}: {1}", triple, + lookup_error); + return nullptr; + } + std::unique_ptr<llvm::MCRegisterInfo> info_up( + target->createMCRegInfo(triple)); + assert(info_up); + return info_up; +} |