diff options
| -rw-r--r-- | lldb/source/Expression/ClangUserExpression.cpp | 7 | ||||
| -rw-r--r-- | lldb/source/Expression/Materializer.cpp | 13 |
2 files changed, 15 insertions, 5 deletions
diff --git a/lldb/source/Expression/ClangUserExpression.cpp b/lldb/source/Expression/ClangUserExpression.cpp index 18f7a8daaa1..7f09f6fa094 100644 --- a/lldb/source/Expression/ClangUserExpression.cpp +++ b/lldb/source/Expression/ClangUserExpression.cpp @@ -753,8 +753,6 @@ ClangUserExpression::FinalizeJITExecution (Stream &error_stream, lldb::addr_t function_stack_bottom, lldb::addr_t function_stack_top) { - Error expr_error; - Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); if (log) @@ -762,7 +760,7 @@ ClangUserExpression::FinalizeJITExecution (Stream &error_stream, if (!m_dematerializer_sp) { - error_stream.Printf ("Couldn't dematerialize struct : no dematerializer is present"); + error_stream.Printf ("Couldn't apply expression side effects : no dematerializer is present"); return false; } @@ -772,7 +770,7 @@ ClangUserExpression::FinalizeJITExecution (Stream &error_stream, if (!dematerialize_error.Success()) { - error_stream.Printf ("Couldn't dematerialize struct : %s\n", expr_error.AsCString("unknown error")); + error_stream.Printf ("Couldn't apply expression side effects : %s\n", dematerialize_error.AsCString("unknown error")); return false; } @@ -937,7 +935,6 @@ ClangUserExpression::Execute (Stream &error_stream, } else { - error_stream.Printf("Errored out in %s: Couldn't FinalizeJITExpression", __FUNCTION__); return eExecutionSetupError; } } diff --git a/lldb/source/Expression/Materializer.cpp b/lldb/source/Expression/Materializer.cpp index 6236eda1a86..8a1900ebb73 100644 --- a/lldb/source/Expression/Materializer.cpp +++ b/lldb/source/Expression/Materializer.cpp @@ -1164,6 +1164,8 @@ public: return; } + m_register_contents.reset(new DataBufferHeap(register_data.GetDataStart(), register_data.GetByteSize())); + Error write_error; map.WriteMemory(load_addr, register_data.GetDataStart(), register_data.GetByteSize(), write_error); @@ -1213,6 +1215,16 @@ public: return; } + if (!memcmp(register_data.GetDataStart(), m_register_contents->GetBytes(), register_data.GetByteSize())) + { + // No write required, and in particular we avoid errors if the register wasn't writable + + m_register_contents.reset(); + return; + } + + m_register_contents.reset(); + RegisterValue register_value (const_cast<uint8_t*>(register_data.GetDataStart()), register_data.GetByteSize(), register_data.GetByteOrder()); if (!reg_context_sp->WriteRegister(&m_register_info, register_value)) @@ -1262,6 +1274,7 @@ public: } private: RegisterInfo m_register_info; + lldb::DataBufferSP m_register_contents; }; uint32_t |

