summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Expression/ClangUserExpression.cpp7
-rw-r--r--lldb/source/Expression/Materializer.cpp13
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
OpenPOWER on IntegriCloud