summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py20
-rw-r--r--lldb/source/API/SBData.cpp4
2 files changed, 24 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py b/lldb/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
index e853d6567e7..0560ac502dc 100644
--- a/lldb/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
+++ b/lldb/packages/Python/lldbsuite/test/python_api/sbdata/TestSBData.py
@@ -22,6 +22,26 @@ class SBDataAPICase(TestBase):
self.line = line_number('main.cpp', '// set breakpoint here')
@add_test_categories(['pyapi'])
+ def test_byte_order_and_address_byte_size(self):
+ """Test the SBData::SetData() to ensure the byte order and address
+ byte size are obeyed"""
+ addr_data = '\x11\x22\x33\x44\x55\x66\x77\x88'
+ error = lldb.SBError()
+ data = lldb.SBData()
+ data.SetData(error, addr_data, lldb.eByteOrderBig, 4)
+ addr = data.GetAddress(error, 0)
+ self.assertTrue(addr == 0x11223344);
+ data.SetData(error, addr_data, lldb.eByteOrderBig, 8)
+ addr = data.GetAddress(error, 0)
+ self.assertTrue(addr == 0x1122334455667788);
+ data.SetData(error, addr_data, lldb.eByteOrderLittle, 4)
+ addr = data.GetAddress(error, 0)
+ self.assertTrue(addr == 0x44332211);
+ data.SetData(error, addr_data, lldb.eByteOrderLittle, 8)
+ addr = data.GetAddress(error, 0)
+ self.assertTrue(addr == 0x8877665544332211);
+
+ @add_test_categories(['pyapi'])
def test_with_run_command(self):
"""Test the SBData APIs."""
self.build()
diff --git a/lldb/source/API/SBData.cpp b/lldb/source/API/SBData.cpp
index d905d3f272f..301495e520a 100644
--- a/lldb/source/API/SBData.cpp
+++ b/lldb/source/API/SBData.cpp
@@ -383,7 +383,11 @@ void SBData::SetData(lldb::SBError &error, const void *buf, size_t size,
if (!m_opaque_sp.get())
m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
else
+ {
m_opaque_sp->SetData(buf, size, endian);
+ m_opaque_sp->SetAddressByteSize(addr_size);
+ }
+
if (log)
log->Printf("SBData::SetData (error=%p,buf=%p,size=%" PRIu64
",endian=%d,addr_size=%c) => "
OpenPOWER on IntegriCloud