199451b44SJordan Rupprecht"""Test the SBData APIs.""" 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtfrom math import fabs 699451b44SJordan Rupprechtimport lldb 799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass SBDataAPICase(TestBase): 1399451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht def setUp(self): 1699451b44SJordan Rupprecht # Call super's setUp(). 1799451b44SJordan Rupprecht TestBase.setUp(self) 1899451b44SJordan Rupprecht # Find the line number to break on inside main.cpp. 1999451b44SJordan Rupprecht self.line = line_number('main.cpp', '// set breakpoint here') 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht def test_byte_order_and_address_byte_size(self): 2299451b44SJordan Rupprecht """Test the SBData::SetData() to ensure the byte order and address 2399451b44SJordan Rupprecht byte size are obeyed""" 2499451b44SJordan Rupprecht addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88' 2599451b44SJordan Rupprecht error = lldb.SBError() 2699451b44SJordan Rupprecht data = lldb.SBData() 2799451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 4) 2899451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 29619e2e09SDave Lee self.assertEqual(addr, 0x11223344); 3099451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 8) 3199451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 32619e2e09SDave Lee self.assertEqual(addr, 0x1122334455667788); 3399451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 4) 3499451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 35619e2e09SDave Lee self.assertEqual(addr, 0x44332211); 3699451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 8) 3799451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 38619e2e09SDave Lee self.assertEqual(addr, 0x8877665544332211); 3999451b44SJordan Rupprecht 4072e25978SMed Ismail Bennani def test_byte_order_and_address_byte_size_with_ownership(self): 4172e25978SMed Ismail Bennani """Test the SBData::SetDataWithOwnership() to ensure the byte order 4272e25978SMed Ismail Bennani and address byte size are obeyed even when source date is released""" 4372e25978SMed Ismail Bennani addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88' 4472e25978SMed Ismail Bennani error = lldb.SBError() 4572e25978SMed Ismail Bennani data = lldb.SBData() 4672e25978SMed Ismail Bennani data.SetDataWithOwnership(error, addr_data, lldb.eByteOrderBig, 8) 4772e25978SMed Ismail Bennani del addr_data 4872e25978SMed Ismail Bennani addr = data.GetAddress(error, 0) 4972e25978SMed Ismail Bennani self.assertEqual(addr, 0x1122334455667788); 5072e25978SMed Ismail Bennani 5199451b44SJordan Rupprecht def test_with_run_command(self): 5299451b44SJordan Rupprecht """Test the SBData APIs.""" 5399451b44SJordan Rupprecht self.build() 5499451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 5799451b44SJordan Rupprecht self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True) 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 6299451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 6399451b44SJordan Rupprecht substrs=['stopped', 6499451b44SJordan Rupprecht 'stop reason = breakpoint']) 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht target = self.dbg.GetSelectedTarget() 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht process = target.GetProcess() 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 7199451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 7299451b44SJordan Rupprecht self.assertIsNotNone(thread) 7399451b44SJordan Rupprecht 7499451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 7599451b44SJordan Rupprecht foobar = frame.FindVariable('foobar') 7699451b44SJordan Rupprecht self.assertTrue(foobar.IsValid()) 7799451b44SJordan Rupprecht data = foobar.GetPointeeData(0, 2) 7899451b44SJordan Rupprecht offset = 0 7999451b44SJordan Rupprecht error = lldb.SBError() 8099451b44SJordan Rupprecht 8199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 8299451b44SJordan Rupprecht offset += 4 8399451b44SJordan Rupprecht low = data.GetSignedInt16(error, offset) 84*779bbbf2SDave Lee self.assertSuccess(error) 8599451b44SJordan Rupprecht offset += 2 8699451b44SJordan Rupprecht high = data.GetSignedInt16(error, offset) 87*779bbbf2SDave Lee self.assertSuccess(error) 8899451b44SJordan Rupprecht offset += 2 8999451b44SJordan Rupprecht self.assertTrue( 9099451b44SJordan Rupprecht (low == 9 and high == 0) or ( 9199451b44SJordan Rupprecht low == 0 and high == 9), 9299451b44SJordan Rupprecht 'foo[0].b == 9') 9399451b44SJordan Rupprecht self.assertTrue( 9499451b44SJordan Rupprecht fabs( 9599451b44SJordan Rupprecht data.GetFloat( 9699451b44SJordan Rupprecht error, 9799451b44SJordan Rupprecht offset) - 9899451b44SJordan Rupprecht 3.14) < 1, 9999451b44SJordan Rupprecht 'foo[0].c == 3.14') 100*779bbbf2SDave Lee self.assertSuccess(error) 10199451b44SJordan Rupprecht offset += 4 10299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 10399451b44SJordan Rupprecht offset += 4 10499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 10599451b44SJordan Rupprecht offset += 4 10699451b44SJordan Rupprecht 10799451b44SJordan Rupprecht self.runCmd("n") 10899451b44SJordan Rupprecht 10999451b44SJordan Rupprecht offset = 16 11099451b44SJordan Rupprecht 11199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 11299451b44SJordan Rupprecht 11399451b44SJordan Rupprecht data = foobar.GetPointeeData(1, 1) 11499451b44SJordan Rupprecht 11599451b44SJordan Rupprecht offset = 0 11699451b44SJordan Rupprecht 11799451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 8) 11899451b44SJordan Rupprecht offset += 4 11999451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 7) 12099451b44SJordan Rupprecht offset += 8 12199451b44SJordan Rupprecht self.assertTrue( 12299451b44SJordan Rupprecht data.GetUnsignedInt32( 12399451b44SJordan Rupprecht error, 12499451b44SJordan Rupprecht offset) == 0, 12599451b44SJordan Rupprecht 'do not read beyond end') 12699451b44SJordan Rupprecht self.assertTrue(not error.Success()) 12799451b44SJordan Rupprecht error.Clear() # clear the error for the next test 12899451b44SJordan Rupprecht 12999451b44SJordan Rupprecht star_foobar = foobar.Dereference() 13099451b44SJordan Rupprecht self.assertTrue(star_foobar.IsValid()) 13199451b44SJordan Rupprecht 13299451b44SJordan Rupprecht data = star_foobar.GetData() 13399451b44SJordan Rupprecht 13499451b44SJordan Rupprecht offset = 0 13599451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 13699451b44SJordan Rupprecht offset += 4 13799451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 9) 13899451b44SJordan Rupprecht 13999451b44SJordan Rupprecht foobar_addr = star_foobar.GetLoadAddress() 14099451b44SJordan Rupprecht foobar_addr += 12 14199451b44SJordan Rupprecht 14299451b44SJordan Rupprecht # http://llvm.org/bugs/show_bug.cgi?id=11579 14399451b44SJordan Rupprecht # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds 14499451b44SJordan Rupprecht # This should not crash LLDB. 14599451b44SJordan Rupprecht nothing = foobar.CreateValueFromAddress( 14699451b44SJordan Rupprecht "nothing", foobar_addr, star_foobar.GetType().GetBasicType( 14799451b44SJordan Rupprecht lldb.eBasicTypeInvalid)) 14899451b44SJordan Rupprecht 14999451b44SJordan Rupprecht new_foobar = foobar.CreateValueFromAddress( 15099451b44SJordan Rupprecht "f00", foobar_addr, star_foobar.GetType()) 15199451b44SJordan Rupprecht self.assertTrue(new_foobar.IsValid()) 15299451b44SJordan Rupprecht data = new_foobar.GetData() 15399451b44SJordan Rupprecht 154619e2e09SDave Lee self.assertEqual(data.uint32[0], 8, 'then foo[1].a == 8') 155619e2e09SDave Lee self.assertEqual(data.uint32[1], 7, 'then foo[1].b == 7') 15699451b44SJordan Rupprecht # exploiting that sizeof(uint32) == sizeof(float) 15799451b44SJordan Rupprecht self.assertTrue(fabs(data.float[2] - 3.14) < 1, 'foo[1].c == 3.14') 15899451b44SJordan Rupprecht 15999451b44SJordan Rupprecht self.runCmd("n") 16099451b44SJordan Rupprecht 16199451b44SJordan Rupprecht offset = 0 16299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 16399451b44SJordan Rupprecht offset += 4 16499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 16599451b44SJordan Rupprecht offset += 4 16699451b44SJordan Rupprecht self.assertTrue( 16799451b44SJordan Rupprecht fabs( 16899451b44SJordan Rupprecht data.GetFloat( 16999451b44SJordan Rupprecht error, 17099451b44SJordan Rupprecht offset) - 17199451b44SJordan Rupprecht 3.14) < 1, 17299451b44SJordan Rupprecht 'foo[1].c == 3.14') 173*779bbbf2SDave Lee self.assertSuccess(error) 17499451b44SJordan Rupprecht 17599451b44SJordan Rupprecht data = new_foobar.GetData() 17699451b44SJordan Rupprecht 17799451b44SJordan Rupprecht offset = 0 17899451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 17999451b44SJordan Rupprecht offset += 4 18099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 18199451b44SJordan Rupprecht offset += 4 18299451b44SJordan Rupprecht self.assertTrue( 18399451b44SJordan Rupprecht fabs( 18499451b44SJordan Rupprecht data.GetFloat( 18599451b44SJordan Rupprecht error, 18699451b44SJordan Rupprecht offset) - 18799451b44SJordan Rupprecht 6.28) < 1, 18899451b44SJordan Rupprecht 'foo[1].c == 6.28') 189*779bbbf2SDave Lee self.assertSuccess(error) 19099451b44SJordan Rupprecht 19199451b44SJordan Rupprecht self.runCmd("n") 19299451b44SJordan Rupprecht 19399451b44SJordan Rupprecht barfoo = frame.FindVariable('barfoo') 19499451b44SJordan Rupprecht 19599451b44SJordan Rupprecht data = barfoo.GetData() 19699451b44SJordan Rupprecht offset = 0 19799451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 19899451b44SJordan Rupprecht offset += 4 19999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 2) 20099451b44SJordan Rupprecht offset += 4 20199451b44SJordan Rupprecht self.assertTrue( 20299451b44SJordan Rupprecht fabs( 20399451b44SJordan Rupprecht data.GetFloat( 20499451b44SJordan Rupprecht error, 20599451b44SJordan Rupprecht offset) - 20699451b44SJordan Rupprecht 3) < 1, 20799451b44SJordan Rupprecht 'barfoo[0].c == 3') 208*779bbbf2SDave Lee self.assertSuccess(error) 20999451b44SJordan Rupprecht offset += 4 21099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 4) 21199451b44SJordan Rupprecht offset += 4 21299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 21399451b44SJordan Rupprecht offset += 4 21499451b44SJordan Rupprecht self.assertTrue( 21599451b44SJordan Rupprecht fabs( 21699451b44SJordan Rupprecht data.GetFloat( 21799451b44SJordan Rupprecht error, 21899451b44SJordan Rupprecht offset) - 21999451b44SJordan Rupprecht 6) < 1, 22099451b44SJordan Rupprecht 'barfoo[1].c == 6') 221*779bbbf2SDave Lee self.assertSuccess(error) 22299451b44SJordan Rupprecht 22399451b44SJordan Rupprecht new_object = barfoo.CreateValueFromData( 22499451b44SJordan Rupprecht "new_object", data, barfoo.GetType().GetBasicType( 22599451b44SJordan Rupprecht lldb.eBasicTypeInt)) 226619e2e09SDave Lee self.assertEqual(new_object.GetValue(), "1", 'new_object == 1') 22799451b44SJordan Rupprecht 22899451b44SJordan Rupprecht if data.GetByteOrder() == lldb.eByteOrderBig: 22999451b44SJordan Rupprecht data.SetData( 23099451b44SJordan Rupprecht error, 23199451b44SJordan Rupprecht '\0\0\0A', 23299451b44SJordan Rupprecht data.GetByteOrder(), 23399451b44SJordan Rupprecht data.GetAddressByteSize()) 23499451b44SJordan Rupprecht else: 23599451b44SJordan Rupprecht data.SetData( 23699451b44SJordan Rupprecht error, 23799451b44SJordan Rupprecht 'A\0\0\0', 23899451b44SJordan Rupprecht data.GetByteOrder(), 23999451b44SJordan Rupprecht data.GetAddressByteSize()) 240*779bbbf2SDave Lee self.assertSuccess(error) 24199451b44SJordan Rupprecht 24299451b44SJordan Rupprecht data2 = lldb.SBData() 24399451b44SJordan Rupprecht data2.SetData( 24499451b44SJordan Rupprecht error, 24599451b44SJordan Rupprecht 'BCD', 24699451b44SJordan Rupprecht data.GetByteOrder(), 24799451b44SJordan Rupprecht data.GetAddressByteSize()) 248*779bbbf2SDave Lee self.assertSuccess(error) 24999451b44SJordan Rupprecht 25099451b44SJordan Rupprecht data.Append(data2) 25199451b44SJordan Rupprecht 25299451b44SJordan Rupprecht # this breaks on EBCDIC 25399451b44SJordan Rupprecht offset = 0 25499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 65) 25599451b44SJordan Rupprecht offset += 4 25699451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 66) 25799451b44SJordan Rupprecht offset += 1 25899451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 67) 25999451b44SJordan Rupprecht offset += 1 26099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 68) 26199451b44SJordan Rupprecht offset += 1 26299451b44SJordan Rupprecht 26399451b44SJordan Rupprecht # check the new API calls introduced per LLVM llvm.org/prenhancement request 26499451b44SJordan Rupprecht # 11619 (Allow creating SBData values from arrays or primitives in 26599451b44SJordan Rupprecht # Python) 26699451b44SJordan Rupprecht 26799451b44SJordan Rupprecht hello_str = "hello!" 26899451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromCString( 26999451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), hello_str) 270619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 271619e2e09SDave Lee self.assertEqual(data2.uint8[0], 104, 'h == 104') 272619e2e09SDave Lee self.assertEqual(data2.uint8[1], 101, 'e == 101') 273619e2e09SDave Lee self.assertEqual(data2.uint8[2], 108, 'l == 108') 27499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) # l 275619e2e09SDave Lee self.assertEqual(data2.uint8[4], 111, 'o == 111') 27699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) # ! 27799451b44SJordan Rupprecht 27899451b44SJordan Rupprecht uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]] 27999451b44SJordan Rupprecht int_lists = [[2, -2], [int(i) for i in [2, -2]]] 28099451b44SJordan Rupprecht 28199451b44SJordan Rupprecht for l in uint_lists: 28299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 28399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 28499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 28599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 28699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 28799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 28899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 28999451b44SJordan Rupprecht 29099451b44SJordan Rupprecht self.assertTrue( 29199451b44SJordan Rupprecht data2.uint64s == [ 29299451b44SJordan Rupprecht 1, 29399451b44SJordan Rupprecht 2, 29499451b44SJordan Rupprecht 3, 29599451b44SJordan Rupprecht 4, 29699451b44SJordan Rupprecht 5], 29799451b44SJordan Rupprecht 'read_data_helper failure: data2 == [1,2,3,4,5]') 29899451b44SJordan Rupprecht 29999451b44SJordan Rupprecht for l in int_lists: 30099451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 30199451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 30299451b44SJordan Rupprecht self.assertTrue( 30399451b44SJordan Rupprecht data2.sint32[ 30499451b44SJordan Rupprecht 0:2] == [ 30599451b44SJordan Rupprecht 2, -2], 'signed32 data2 = [2,-2]') 30699451b44SJordan Rupprecht 30799451b44SJordan Rupprecht data2.Append( 30899451b44SJordan Rupprecht lldb.SBData.CreateDataFromSInt64Array( 30999451b44SJordan Rupprecht process.GetByteOrder(), 31099451b44SJordan Rupprecht process.GetAddressByteSize(), 31199451b44SJordan Rupprecht int_lists[0])) 31299451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 31399451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 31499451b44SJordan Rupprecht self.assertTrue( 31599451b44SJordan Rupprecht data2.sint64[ 31699451b44SJordan Rupprecht 1:3] == [ 31799451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 31899451b44SJordan Rupprecht 31999451b44SJordan Rupprecht for l in int_lists: 32099451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 32199451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 32299451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 32399451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 32499451b44SJordan Rupprecht self.assertTrue( 32599451b44SJordan Rupprecht data2.sint64[ 32699451b44SJordan Rupprecht 0:2] == [ 32799451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 32899451b44SJordan Rupprecht 32999451b44SJordan Rupprecht for l in uint_lists: 33099451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 33199451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 33299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 33399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 33499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 33599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 33699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 33799451b44SJordan Rupprecht 33899451b44SJordan Rupprecht bool_list = [True, True, False, False, True, False] 33999451b44SJordan Rupprecht 34099451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 34199451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 34299451b44SJordan Rupprecht self.assertTrue( 34399451b44SJordan Rupprecht data2.sint32[ 34499451b44SJordan Rupprecht 0:6] == [ 34599451b44SJordan Rupprecht 1, 34699451b44SJordan Rupprecht 1, 34799451b44SJordan Rupprecht 0, 34899451b44SJordan Rupprecht 0, 34999451b44SJordan Rupprecht 1, 35099451b44SJordan Rupprecht 0], 35199451b44SJordan Rupprecht 'signed32 data2 = [1, 1, 0, 0, 1, 0]') 35299451b44SJordan Rupprecht 35399451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 35499451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 35599451b44SJordan Rupprecht self.assertTrue( 35699451b44SJordan Rupprecht data2.uint32[ 35799451b44SJordan Rupprecht 0:6] == [ 35899451b44SJordan Rupprecht 1, 35999451b44SJordan Rupprecht 1, 36099451b44SJordan Rupprecht 0, 36199451b44SJordan Rupprecht 0, 36299451b44SJordan Rupprecht 1, 36399451b44SJordan Rupprecht 0], 36499451b44SJordan Rupprecht 'unsigned32 data2 = [1, 1, 0, 0, 1, 0]') 36599451b44SJordan Rupprecht 36699451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 36799451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 36899451b44SJordan Rupprecht self.assertTrue( 36999451b44SJordan Rupprecht data2.sint64[ 37099451b44SJordan Rupprecht 0:6] == [ 37199451b44SJordan Rupprecht 1, 37299451b44SJordan Rupprecht 1, 37399451b44SJordan Rupprecht 0, 37499451b44SJordan Rupprecht 0, 37599451b44SJordan Rupprecht 1, 37699451b44SJordan Rupprecht 0], 37799451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 37899451b44SJordan Rupprecht 37999451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 38099451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 38199451b44SJordan Rupprecht self.assertTrue( 38299451b44SJordan Rupprecht data2.uint64[ 38399451b44SJordan Rupprecht 0:6] == [ 38499451b44SJordan Rupprecht 1, 38599451b44SJordan Rupprecht 1, 38699451b44SJordan Rupprecht 0, 38799451b44SJordan Rupprecht 0, 38899451b44SJordan Rupprecht 1, 38999451b44SJordan Rupprecht 0], 39099451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 39199451b44SJordan Rupprecht 39299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromDoubleArray( 39399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), [ 39499451b44SJordan Rupprecht 3.14, 6.28, 2.71]) 39599451b44SJordan Rupprecht self.assertTrue( 39699451b44SJordan Rupprecht fabs( 39799451b44SJordan Rupprecht data2.GetDouble( 39899451b44SJordan Rupprecht error, 39999451b44SJordan Rupprecht 0) - 40099451b44SJordan Rupprecht 3.14) < 0.5, 40199451b44SJordan Rupprecht 'double data2[0] = 3.14') 402*779bbbf2SDave Lee self.assertSuccess(error) 40399451b44SJordan Rupprecht self.assertTrue( 40499451b44SJordan Rupprecht fabs( 40599451b44SJordan Rupprecht data2.GetDouble( 40699451b44SJordan Rupprecht error, 40799451b44SJordan Rupprecht 8) - 40899451b44SJordan Rupprecht 6.28) < 0.5, 40999451b44SJordan Rupprecht 'double data2[1] = 6.28') 410*779bbbf2SDave Lee self.assertSuccess(error) 41199451b44SJordan Rupprecht self.assertTrue( 41299451b44SJordan Rupprecht fabs( 41399451b44SJordan Rupprecht data2.GetDouble( 41499451b44SJordan Rupprecht error, 41599451b44SJordan Rupprecht 16) - 41699451b44SJordan Rupprecht 2.71) < 0.5, 41799451b44SJordan Rupprecht 'double data2[2] = 2.71') 418*779bbbf2SDave Lee self.assertSuccess(error) 41999451b44SJordan Rupprecht 42099451b44SJordan Rupprecht data2 = lldb.SBData() 42199451b44SJordan Rupprecht 42299451b44SJordan Rupprecht data2.SetDataFromCString(hello_str) 423619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 42499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 0, 104) 42599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 1, 101) 42699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 2, 108) 42799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) 42899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 4, 111) 42999451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) 43099451b44SJordan Rupprecht 43199451b44SJordan Rupprecht data2.SetDataFromUInt64Array([1, 2, 3, 4, 5]) 43299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 43399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 43499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 43599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 43699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 43799451b44SJordan Rupprecht 4380ed758b2SDave Lee self.assertEqual( 4390ed758b2SDave Lee data2.uint64[0], 1, 44099451b44SJordan Rupprecht 'read_data_helper failure: set data2[0] = 1') 4410ed758b2SDave Lee self.assertEqual( 4420ed758b2SDave Lee data2.uint64[1], 2, 44399451b44SJordan Rupprecht 'read_data_helper failure: set data2[1] = 2') 4440ed758b2SDave Lee self.assertEqual( 4450ed758b2SDave Lee data2.uint64[2], 3, 44699451b44SJordan Rupprecht 'read_data_helper failure: set data2[2] = 3') 4470ed758b2SDave Lee self.assertEqual( 4480ed758b2SDave Lee data2.uint64[3], 4, 44999451b44SJordan Rupprecht 'read_data_helper failure: set data2[3] = 4') 4500ed758b2SDave Lee self.assertEqual( 4510ed758b2SDave Lee data2.uint64[4], 5, 45299451b44SJordan Rupprecht 'read_data_helper failure: set data2[4] = 5') 45399451b44SJordan Rupprecht 45499451b44SJordan Rupprecht self.assertTrue( 45599451b44SJordan Rupprecht data2.uint64[ 45699451b44SJordan Rupprecht 0:2] == [ 45799451b44SJordan Rupprecht 1, 45899451b44SJordan Rupprecht 2], 45999451b44SJordan Rupprecht 'read_data_helper failure: set data2[0:2] = [1,2]') 46099451b44SJordan Rupprecht 46199451b44SJordan Rupprecht data2.SetDataFromSInt32Array([2, -2]) 46299451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 46399451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 46499451b44SJordan Rupprecht 46599451b44SJordan Rupprecht data2.SetDataFromSInt64Array([2, -2]) 46699451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 46799451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 46899451b44SJordan Rupprecht 46999451b44SJordan Rupprecht data2.SetDataFromUInt32Array([1, 2, 3, 4, 5]) 47099451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 47199451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 47299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 47399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 47499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 47599451b44SJordan Rupprecht 4760ed758b2SDave Lee self.assertEqual( 4770ed758b2SDave Lee data2.uint32[0], 1, 47899451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[0] = 1') 4790ed758b2SDave Lee self.assertEqual( 4800ed758b2SDave Lee data2.uint32[1], 2, 48199451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[1] = 2') 4820ed758b2SDave Lee self.assertEqual( 4830ed758b2SDave Lee data2.uint32[2], 3, 48499451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[2] = 3') 4850ed758b2SDave Lee self.assertEqual( 4860ed758b2SDave Lee data2.uint32[3], 4, 48799451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[3] = 4') 4880ed758b2SDave Lee self.assertEqual( 4890ed758b2SDave Lee data2.uint32[4], 5, 49099451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[4] = 5') 49199451b44SJordan Rupprecht 49299451b44SJordan Rupprecht data2.SetDataFromDoubleArray([3.14, 6.28, 2.71]) 49399451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 0) - 3.14) 49499451b44SJordan Rupprecht < 0.5, 'set double data2[0] = 3.14') 49599451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 8) - 6.28) 49699451b44SJordan Rupprecht < 0.5, 'set double data2[1] = 6.28') 49799451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 16) - 2.71) 49899451b44SJordan Rupprecht < 0.5, 'set double data2[2] = 2.71') 49999451b44SJordan Rupprecht 50099451b44SJordan Rupprecht self.assertTrue( 50199451b44SJordan Rupprecht fabs( 50299451b44SJordan Rupprecht data2.double[0] - 50399451b44SJordan Rupprecht 3.14) < 0.5, 50499451b44SJordan Rupprecht 'read_data_helper failure: set double data2[0] = 3.14') 50599451b44SJordan Rupprecht self.assertTrue( 50699451b44SJordan Rupprecht fabs( 50799451b44SJordan Rupprecht data2.double[1] - 50899451b44SJordan Rupprecht 6.28) < 0.5, 50999451b44SJordan Rupprecht 'read_data_helper failure: set double data2[1] = 6.28') 51099451b44SJordan Rupprecht self.assertTrue( 51199451b44SJordan Rupprecht fabs( 51299451b44SJordan Rupprecht data2.double[2] - 51399451b44SJordan Rupprecht 2.71) < 0.5, 51499451b44SJordan Rupprecht 'read_data_helper failure: set double data2[2] = 2.71') 51599451b44SJordan Rupprecht 51699451b44SJordan Rupprecht def assert_data(self, func, arg, expected): 51799451b44SJordan Rupprecht """ Asserts func(SBError error, arg) == expected. """ 51899451b44SJordan Rupprecht error = lldb.SBError() 51999451b44SJordan Rupprecht result = func(error, arg) 52099451b44SJordan Rupprecht if not error.Success(): 52199451b44SJordan Rupprecht stream = lldb.SBStream() 52299451b44SJordan Rupprecht error.GetDescription(stream) 52399451b44SJordan Rupprecht self.assertTrue( 52499451b44SJordan Rupprecht error.Success(), "%s(error, %s) did not succeed: %s" % 52599451b44SJordan Rupprecht (func.__name__, arg, stream.GetData())) 52699451b44SJordan Rupprecht self.assertTrue( 52799451b44SJordan Rupprecht expected == result, "%s(error, %s) == %s != %s" % 52899451b44SJordan Rupprecht (func.__name__, arg, result, expected)) 529