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