Author: aidandodds
Date: Fri Feb 26 11:40:50 2016
New Revision: 262041

URL: http://llvm.org/viewvc/llvm-project?rev=262041&view=rev
Log:
Fix bug with register values byte order in expression evaluation.

The evaluation of expressions containing register values was broken for targets 
for which endianness differs from host.

Committed on behalf of: mamai <marianne.mailhot.sarra...@gmail.com>

Differential revision: http://reviews.llvm.org/D17167

Modified:
    lldb/trunk/source/Expression/Materializer.cpp

Modified: lldb/trunk/source/Expression/Materializer.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/Materializer.cpp?rev=262041&r1=262040&r2=262041&view=diff
==============================================================================
--- lldb/trunk/source/Expression/Materializer.cpp (original)
+++ lldb/trunk/source/Expression/Materializer.cpp Fri Feb 26 11:40:50 2016
@@ -26,6 +26,7 @@
 #include "lldb/Target/StackFrame.h"
 #include "lldb/Target/Target.h"
 #include "lldb/Target/Thread.h"
+#include "lldb/Utility/LLDBAssert.h"
 
 using namespace lldb_private;
 
@@ -1275,9 +1276,14 @@ public:
         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);
-        
+
+        Scalar scalar;
+        reg_value.GetScalarValue(scalar);
+
+        lldbassert(scalar.GetByteSize() == register_data.GetByteSize());
+
+        map.WriteScalarToMemory(load_addr, scalar, scalar.GetByteSize(), 
write_error);
+
         if (!write_error.Success())
         {
             err.SetErrorStringWithFormat("couldn't write the contents of 
register %s: %s", m_register_info.name, write_error.AsCString());


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to