diff options
Diffstat (limited to 'lldb/source/Expression/Materializer.cpp')
| -rw-r--r-- | lldb/source/Expression/Materializer.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
| 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 | 

