diff options
author | Sagar Thakur <sagar.thakur@imgtec.com> | 2016-05-13 11:04:47 +0000 |
---|---|---|
committer | Sagar Thakur <sagar.thakur@imgtec.com> | 2016-05-13 11:04:47 +0000 |
commit | adc1abe77ef8f582c81e7df653a0ab3411de38fe (patch) | |
tree | 67e07f365f4d45eddd475dea6eb504f1cc710613 /lldb/source/Plugins/ExpressionParser | |
parent | 6ec636d21e61ed4b9f2d2b4b357e220d398b8e64 (diff) | |
download | bcm5719-llvm-adc1abe77ef8f582c81e7df653a0ab3411de38fe.tar.gz bcm5719-llvm-adc1abe77ef8f582c81e7df653a0ab3411de38fe.zip |
[LLDB][MIPS] Provide ABI string to compiler for appropriate code generation for MIPS
Patch by Nitesh Jain.
Summary: These patch will set clang::TargetOptions::ABI and accordingly code will be generated for MIPS target.
Reviewers: ovyalov, clayborg
Subscribers: lldb-commits, mohit.bhakkad, sagar, jaydeep, bhushan
Differential: D18638
llvm-svn: 269407
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser')
-rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp | 31 | ||||
-rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h | 14 |
2 files changed, 43 insertions, 2 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp index ac48898a556..7c4d2275a89 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -286,7 +286,8 @@ ClangExpressionParser::ClangExpressionParser (ExecutionContextScope *exe_scope, lldb::LanguageType frame_lang = expr.Language(); // defaults to lldb::eLanguageTypeUnknown bool overridden_target_opts = false; lldb_private::LanguageRuntime *lang_rt = nullptr; - + + std::string abi; ArchSpec target_arch; target_arch = target_sp->GetArchitecture(); @@ -350,6 +351,11 @@ ClangExpressionParser::ClangExpressionParser (ExecutionContextScope *exe_scope, // This will be empty for any CPU that doesn't really need to make a special CPU string. m_compiler->getTargetOpts().CPU = target_arch.GetClangTargetCPU(); + // Set the target ABI + abi = GetClangTargetABI(target_arch); + if (!abi.empty()) + m_compiler->getTargetOpts().ABI = abi; + // 3. Now allow the runtime to provide custom configuration options for the target. // In this case, a specialized language runtime is available and we can query it for extra options. // For 99% of use cases, this will not be needed and should be provided when basic platform detection is not enough. @@ -658,6 +664,29 @@ ClangExpressionParser::Parse(DiagnosticManager &diagnostic_manager) return num_errors; } +std::string +ClangExpressionParser::GetClangTargetABI (const ArchSpec &target_arch) +{ + std::string abi; + const llvm::Triple::ArchType machine = target_arch.GetMachine(); + + if(target_arch.IsMIPS()) + { + switch (target_arch.GetFlags () & ArchSpec::eMIPSABI_mask) + { + case ArchSpec::eMIPSABI_N64: + abi = "n64"; break; + case ArchSpec::eMIPSABI_N32: + abi = "n32"; break; + case ArchSpec::eMIPSABI_O32: + abi = "o32"; break; + default: + break; + } + } + return abi; +} + bool ClangExpressionParser::RewriteExpression(DiagnosticManager &diagnostic_manager) { diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h index 115067b4307..34c0212b73a 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h @@ -137,7 +137,19 @@ public: Error RunStaticInitializers (lldb::IRExecutionUnitSP &execution_unit_sp, ExecutionContext &exe_ctx); - + + //------------------------------------------------------------------ + /// Returns a string representing current ABI. + /// + /// @param[in] target_arch + /// The target architecture. + /// + /// @return + /// A string representing target ABI for the current architecture. + //------------------------------------------------------------------- + std::string + GetClangTargetABI (const ArchSpec &target_arch); + private: std::unique_ptr<llvm::LLVMContext> m_llvm_context; ///< The LLVM context to generate IR into std::unique_ptr<clang::FileManager> m_file_manager; ///< The Clang file manager object used by the compiler |