Fix SBData::SetData() so that it always sets the address byte size correctly and added a test.

llvm-svn: 293102
This commit is contained in:
Greg Clayton 2017-01-25 21:50:28 +00:00
parent 7b5b7c7444
commit 896b4513e1
2 changed files with 24 additions and 0 deletions

View File

@ -21,6 +21,26 @@ class SBDataAPICase(TestBase):
# Find the line number to break on inside main.cpp.
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."""

View File

@ -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) => "