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 def test_byte_order_and_address_byte_size(self): 2499451b44SJordan Rupprecht """Test the SBData::SetData() to ensure the byte order and address 2599451b44SJordan Rupprecht byte size are obeyed""" 2699451b44SJordan Rupprecht addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88' 2799451b44SJordan Rupprecht error = lldb.SBError() 2899451b44SJordan Rupprecht data = lldb.SBData() 2999451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 4) 3099451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 31619e2e09SDave Lee self.assertEqual(addr, 0x11223344); 3299451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderBig, 8) 3399451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 34619e2e09SDave Lee self.assertEqual(addr, 0x1122334455667788); 3599451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 4) 3699451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 37619e2e09SDave Lee self.assertEqual(addr, 0x44332211); 3899451b44SJordan Rupprecht data.SetData(error, addr_data, lldb.eByteOrderLittle, 8) 3999451b44SJordan Rupprecht addr = data.GetAddress(error, 0) 40619e2e09SDave Lee self.assertEqual(addr, 0x8877665544332211); 4199451b44SJordan Rupprecht 4272e25978SMed Ismail Bennani def test_byte_order_and_address_byte_size_with_ownership(self): 4372e25978SMed Ismail Bennani """Test the SBData::SetDataWithOwnership() to ensure the byte order 4472e25978SMed Ismail Bennani and address byte size are obeyed even when source date is released""" 4572e25978SMed Ismail Bennani addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88' 4672e25978SMed Ismail Bennani error = lldb.SBError() 4772e25978SMed Ismail Bennani data = lldb.SBData() 4872e25978SMed Ismail Bennani data.SetDataWithOwnership(error, addr_data, lldb.eByteOrderBig, 8) 4972e25978SMed Ismail Bennani del addr_data 5072e25978SMed Ismail Bennani addr = data.GetAddress(error, 0) 5172e25978SMed Ismail Bennani self.assertEqual(addr, 0x1122334455667788); 5272e25978SMed Ismail Bennani 5399451b44SJordan Rupprecht def test_with_run_command(self): 5499451b44SJordan Rupprecht """Test the SBData APIs.""" 5599451b44SJordan Rupprecht self.build() 5699451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 5999451b44SJordan Rupprecht self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 6299451b44SJordan Rupprecht 6399451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 6499451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 6599451b44SJordan Rupprecht substrs=['stopped', 6699451b44SJordan Rupprecht 'stop reason = breakpoint']) 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht target = self.dbg.GetSelectedTarget() 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht process = target.GetProcess() 7199451b44SJordan Rupprecht 7299451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 7399451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 7499451b44SJordan Rupprecht self.assertIsNotNone(thread) 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht frame = thread.GetSelectedFrame() 7799451b44SJordan Rupprecht foobar = frame.FindVariable('foobar') 7899451b44SJordan Rupprecht self.assertTrue(foobar.IsValid()) 7999451b44SJordan Rupprecht data = foobar.GetPointeeData(0, 2) 8099451b44SJordan Rupprecht offset = 0 8199451b44SJordan Rupprecht error = lldb.SBError() 8299451b44SJordan Rupprecht 8399451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 8499451b44SJordan Rupprecht offset += 4 8599451b44SJordan Rupprecht low = data.GetSignedInt16(error, offset) 86*779bbbf2SDave Lee self.assertSuccess(error) 8799451b44SJordan Rupprecht offset += 2 8899451b44SJordan Rupprecht high = data.GetSignedInt16(error, offset) 89*779bbbf2SDave Lee self.assertSuccess(error) 9099451b44SJordan Rupprecht offset += 2 9199451b44SJordan Rupprecht self.assertTrue( 9299451b44SJordan Rupprecht (low == 9 and high == 0) or ( 9399451b44SJordan Rupprecht low == 0 and high == 9), 9499451b44SJordan Rupprecht 'foo[0].b == 9') 9599451b44SJordan Rupprecht self.assertTrue( 9699451b44SJordan Rupprecht fabs( 9799451b44SJordan Rupprecht data.GetFloat( 9899451b44SJordan Rupprecht error, 9999451b44SJordan Rupprecht offset) - 10099451b44SJordan Rupprecht 3.14) < 1, 10199451b44SJordan Rupprecht 'foo[0].c == 3.14') 102*779bbbf2SDave Lee self.assertSuccess(error) 10399451b44SJordan Rupprecht offset += 4 10499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 10599451b44SJordan Rupprecht offset += 4 10699451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 10799451b44SJordan Rupprecht offset += 4 10899451b44SJordan Rupprecht 10999451b44SJordan Rupprecht self.runCmd("n") 11099451b44SJordan Rupprecht 11199451b44SJordan Rupprecht offset = 16 11299451b44SJordan Rupprecht 11399451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 11499451b44SJordan Rupprecht 11599451b44SJordan Rupprecht data = foobar.GetPointeeData(1, 1) 11699451b44SJordan Rupprecht 11799451b44SJordan Rupprecht offset = 0 11899451b44SJordan Rupprecht 11999451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 8) 12099451b44SJordan Rupprecht offset += 4 12199451b44SJordan Rupprecht self.assert_data(data.GetSignedInt32, offset, 7) 12299451b44SJordan Rupprecht offset += 8 12399451b44SJordan Rupprecht self.assertTrue( 12499451b44SJordan Rupprecht data.GetUnsignedInt32( 12599451b44SJordan Rupprecht error, 12699451b44SJordan Rupprecht offset) == 0, 12799451b44SJordan Rupprecht 'do not read beyond end') 12899451b44SJordan Rupprecht self.assertTrue(not error.Success()) 12999451b44SJordan Rupprecht error.Clear() # clear the error for the next test 13099451b44SJordan Rupprecht 13199451b44SJordan Rupprecht star_foobar = foobar.Dereference() 13299451b44SJordan Rupprecht self.assertTrue(star_foobar.IsValid()) 13399451b44SJordan Rupprecht 13499451b44SJordan Rupprecht data = star_foobar.GetData() 13599451b44SJordan Rupprecht 13699451b44SJordan Rupprecht offset = 0 13799451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 13899451b44SJordan Rupprecht offset += 4 13999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 9) 14099451b44SJordan Rupprecht 14199451b44SJordan Rupprecht foobar_addr = star_foobar.GetLoadAddress() 14299451b44SJordan Rupprecht foobar_addr += 12 14399451b44SJordan Rupprecht 14499451b44SJordan Rupprecht # http://llvm.org/bugs/show_bug.cgi?id=11579 14599451b44SJordan Rupprecht # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds 14699451b44SJordan Rupprecht # This should not crash LLDB. 14799451b44SJordan Rupprecht nothing = foobar.CreateValueFromAddress( 14899451b44SJordan Rupprecht "nothing", foobar_addr, star_foobar.GetType().GetBasicType( 14999451b44SJordan Rupprecht lldb.eBasicTypeInvalid)) 15099451b44SJordan Rupprecht 15199451b44SJordan Rupprecht new_foobar = foobar.CreateValueFromAddress( 15299451b44SJordan Rupprecht "f00", foobar_addr, star_foobar.GetType()) 15399451b44SJordan Rupprecht self.assertTrue(new_foobar.IsValid()) 15499451b44SJordan Rupprecht data = new_foobar.GetData() 15599451b44SJordan Rupprecht 156619e2e09SDave Lee self.assertEqual(data.uint32[0], 8, 'then foo[1].a == 8') 157619e2e09SDave Lee self.assertEqual(data.uint32[1], 7, 'then foo[1].b == 7') 15899451b44SJordan Rupprecht # exploiting that sizeof(uint32) == sizeof(float) 15999451b44SJordan Rupprecht self.assertTrue(fabs(data.float[2] - 3.14) < 1, 'foo[1].c == 3.14') 16099451b44SJordan Rupprecht 16199451b44SJordan Rupprecht self.runCmd("n") 16299451b44SJordan Rupprecht 16399451b44SJordan Rupprecht offset = 0 16499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 16599451b44SJordan Rupprecht offset += 4 16699451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 16799451b44SJordan Rupprecht offset += 4 16899451b44SJordan Rupprecht self.assertTrue( 16999451b44SJordan Rupprecht fabs( 17099451b44SJordan Rupprecht data.GetFloat( 17199451b44SJordan Rupprecht error, 17299451b44SJordan Rupprecht offset) - 17399451b44SJordan Rupprecht 3.14) < 1, 17499451b44SJordan Rupprecht 'foo[1].c == 3.14') 175*779bbbf2SDave Lee self.assertSuccess(error) 17699451b44SJordan Rupprecht 17799451b44SJordan Rupprecht data = new_foobar.GetData() 17899451b44SJordan Rupprecht 17999451b44SJordan Rupprecht offset = 0 18099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 8) 18199451b44SJordan Rupprecht offset += 4 18299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 7) 18399451b44SJordan Rupprecht offset += 4 18499451b44SJordan Rupprecht self.assertTrue( 18599451b44SJordan Rupprecht fabs( 18699451b44SJordan Rupprecht data.GetFloat( 18799451b44SJordan Rupprecht error, 18899451b44SJordan Rupprecht offset) - 18999451b44SJordan Rupprecht 6.28) < 1, 19099451b44SJordan Rupprecht 'foo[1].c == 6.28') 191*779bbbf2SDave Lee self.assertSuccess(error) 19299451b44SJordan Rupprecht 19399451b44SJordan Rupprecht self.runCmd("n") 19499451b44SJordan Rupprecht 19599451b44SJordan Rupprecht barfoo = frame.FindVariable('barfoo') 19699451b44SJordan Rupprecht 19799451b44SJordan Rupprecht data = barfoo.GetData() 19899451b44SJordan Rupprecht offset = 0 19999451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 1) 20099451b44SJordan Rupprecht offset += 4 20199451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 2) 20299451b44SJordan Rupprecht offset += 4 20399451b44SJordan Rupprecht self.assertTrue( 20499451b44SJordan Rupprecht fabs( 20599451b44SJordan Rupprecht data.GetFloat( 20699451b44SJordan Rupprecht error, 20799451b44SJordan Rupprecht offset) - 20899451b44SJordan Rupprecht 3) < 1, 20999451b44SJordan Rupprecht 'barfoo[0].c == 3') 210*779bbbf2SDave Lee self.assertSuccess(error) 21199451b44SJordan Rupprecht offset += 4 21299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 4) 21399451b44SJordan Rupprecht offset += 4 21499451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 5) 21599451b44SJordan Rupprecht offset += 4 21699451b44SJordan Rupprecht self.assertTrue( 21799451b44SJordan Rupprecht fabs( 21899451b44SJordan Rupprecht data.GetFloat( 21999451b44SJordan Rupprecht error, 22099451b44SJordan Rupprecht offset) - 22199451b44SJordan Rupprecht 6) < 1, 22299451b44SJordan Rupprecht 'barfoo[1].c == 6') 223*779bbbf2SDave Lee self.assertSuccess(error) 22499451b44SJordan Rupprecht 22599451b44SJordan Rupprecht new_object = barfoo.CreateValueFromData( 22699451b44SJordan Rupprecht "new_object", data, barfoo.GetType().GetBasicType( 22799451b44SJordan Rupprecht lldb.eBasicTypeInt)) 228619e2e09SDave Lee self.assertEqual(new_object.GetValue(), "1", 'new_object == 1') 22999451b44SJordan Rupprecht 23099451b44SJordan Rupprecht if data.GetByteOrder() == lldb.eByteOrderBig: 23199451b44SJordan Rupprecht data.SetData( 23299451b44SJordan Rupprecht error, 23399451b44SJordan Rupprecht '\0\0\0A', 23499451b44SJordan Rupprecht data.GetByteOrder(), 23599451b44SJordan Rupprecht data.GetAddressByteSize()) 23699451b44SJordan Rupprecht else: 23799451b44SJordan Rupprecht data.SetData( 23899451b44SJordan Rupprecht error, 23999451b44SJordan Rupprecht 'A\0\0\0', 24099451b44SJordan Rupprecht data.GetByteOrder(), 24199451b44SJordan Rupprecht data.GetAddressByteSize()) 242*779bbbf2SDave Lee self.assertSuccess(error) 24399451b44SJordan Rupprecht 24499451b44SJordan Rupprecht data2 = lldb.SBData() 24599451b44SJordan Rupprecht data2.SetData( 24699451b44SJordan Rupprecht error, 24799451b44SJordan Rupprecht 'BCD', 24899451b44SJordan Rupprecht data.GetByteOrder(), 24999451b44SJordan Rupprecht data.GetAddressByteSize()) 250*779bbbf2SDave Lee self.assertSuccess(error) 25199451b44SJordan Rupprecht 25299451b44SJordan Rupprecht data.Append(data2) 25399451b44SJordan Rupprecht 25499451b44SJordan Rupprecht # this breaks on EBCDIC 25599451b44SJordan Rupprecht offset = 0 25699451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt32, offset, 65) 25799451b44SJordan Rupprecht offset += 4 25899451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 66) 25999451b44SJordan Rupprecht offset += 1 26099451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 67) 26199451b44SJordan Rupprecht offset += 1 26299451b44SJordan Rupprecht self.assert_data(data.GetUnsignedInt8, offset, 68) 26399451b44SJordan Rupprecht offset += 1 26499451b44SJordan Rupprecht 26599451b44SJordan Rupprecht # check the new API calls introduced per LLVM llvm.org/prenhancement request 26699451b44SJordan Rupprecht # 11619 (Allow creating SBData values from arrays or primitives in 26799451b44SJordan Rupprecht # Python) 26899451b44SJordan Rupprecht 26999451b44SJordan Rupprecht hello_str = "hello!" 27099451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromCString( 27199451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), hello_str) 272619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 273619e2e09SDave Lee self.assertEqual(data2.uint8[0], 104, 'h == 104') 274619e2e09SDave Lee self.assertEqual(data2.uint8[1], 101, 'e == 101') 275619e2e09SDave Lee self.assertEqual(data2.uint8[2], 108, 'l == 108') 27699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) # l 277619e2e09SDave Lee self.assertEqual(data2.uint8[4], 111, 'o == 111') 27899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) # ! 27999451b44SJordan Rupprecht 28099451b44SJordan Rupprecht uint_lists = [[1, 2, 3, 4, 5], [int(i) for i in [1, 2, 3, 4, 5]]] 28199451b44SJordan Rupprecht int_lists = [[2, -2], [int(i) for i in [2, -2]]] 28299451b44SJordan Rupprecht 28399451b44SJordan Rupprecht for l in uint_lists: 28499451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 28599451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 28699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 28799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 28899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 28999451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 29099451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 29199451b44SJordan Rupprecht 29299451b44SJordan Rupprecht self.assertTrue( 29399451b44SJordan Rupprecht data2.uint64s == [ 29499451b44SJordan Rupprecht 1, 29599451b44SJordan Rupprecht 2, 29699451b44SJordan Rupprecht 3, 29799451b44SJordan Rupprecht 4, 29899451b44SJordan Rupprecht 5], 29999451b44SJordan Rupprecht 'read_data_helper failure: data2 == [1,2,3,4,5]') 30099451b44SJordan Rupprecht 30199451b44SJordan Rupprecht for l in int_lists: 30299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 30399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 30499451b44SJordan Rupprecht self.assertTrue( 30599451b44SJordan Rupprecht data2.sint32[ 30699451b44SJordan Rupprecht 0:2] == [ 30799451b44SJordan Rupprecht 2, -2], 'signed32 data2 = [2,-2]') 30899451b44SJordan Rupprecht 30999451b44SJordan Rupprecht data2.Append( 31099451b44SJordan Rupprecht lldb.SBData.CreateDataFromSInt64Array( 31199451b44SJordan Rupprecht process.GetByteOrder(), 31299451b44SJordan Rupprecht process.GetAddressByteSize(), 31399451b44SJordan Rupprecht int_lists[0])) 31499451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 31599451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 31699451b44SJordan Rupprecht self.assertTrue( 31799451b44SJordan Rupprecht data2.sint64[ 31899451b44SJordan Rupprecht 1:3] == [ 31999451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 32099451b44SJordan Rupprecht 32199451b44SJordan Rupprecht for l in int_lists: 32299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 32399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 32499451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 32599451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 32699451b44SJordan Rupprecht self.assertTrue( 32799451b44SJordan Rupprecht data2.sint64[ 32899451b44SJordan Rupprecht 0:2] == [ 32999451b44SJordan Rupprecht 2, -2], 'signed64 data2 = [2,-2]') 33099451b44SJordan Rupprecht 33199451b44SJordan Rupprecht for l in uint_lists: 33299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 33399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), l) 33499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 33599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 33699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 33799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 33899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 33999451b44SJordan Rupprecht 34099451b44SJordan Rupprecht bool_list = [True, True, False, False, True, False] 34199451b44SJordan Rupprecht 34299451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt32Array( 34399451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 34499451b44SJordan Rupprecht self.assertTrue( 34599451b44SJordan Rupprecht data2.sint32[ 34699451b44SJordan Rupprecht 0:6] == [ 34799451b44SJordan Rupprecht 1, 34899451b44SJordan Rupprecht 1, 34999451b44SJordan Rupprecht 0, 35099451b44SJordan Rupprecht 0, 35199451b44SJordan Rupprecht 1, 35299451b44SJordan Rupprecht 0], 35399451b44SJordan Rupprecht 'signed32 data2 = [1, 1, 0, 0, 1, 0]') 35499451b44SJordan Rupprecht 35599451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt32Array( 35699451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 35799451b44SJordan Rupprecht self.assertTrue( 35899451b44SJordan Rupprecht data2.uint32[ 35999451b44SJordan Rupprecht 0:6] == [ 36099451b44SJordan Rupprecht 1, 36199451b44SJordan Rupprecht 1, 36299451b44SJordan Rupprecht 0, 36399451b44SJordan Rupprecht 0, 36499451b44SJordan Rupprecht 1, 36599451b44SJordan Rupprecht 0], 36699451b44SJordan Rupprecht 'unsigned32 data2 = [1, 1, 0, 0, 1, 0]') 36799451b44SJordan Rupprecht 36899451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromSInt64Array( 36999451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 37099451b44SJordan Rupprecht self.assertTrue( 37199451b44SJordan Rupprecht data2.sint64[ 37299451b44SJordan Rupprecht 0:6] == [ 37399451b44SJordan Rupprecht 1, 37499451b44SJordan Rupprecht 1, 37599451b44SJordan Rupprecht 0, 37699451b44SJordan Rupprecht 0, 37799451b44SJordan Rupprecht 1, 37899451b44SJordan Rupprecht 0], 37999451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 38099451b44SJordan Rupprecht 38199451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromUInt64Array( 38299451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), bool_list) 38399451b44SJordan Rupprecht self.assertTrue( 38499451b44SJordan Rupprecht data2.uint64[ 38599451b44SJordan Rupprecht 0:6] == [ 38699451b44SJordan Rupprecht 1, 38799451b44SJordan Rupprecht 1, 38899451b44SJordan Rupprecht 0, 38999451b44SJordan Rupprecht 0, 39099451b44SJordan Rupprecht 1, 39199451b44SJordan Rupprecht 0], 39299451b44SJordan Rupprecht 'signed64 data2 = [1, 1, 0, 0, 1, 0]') 39399451b44SJordan Rupprecht 39499451b44SJordan Rupprecht data2 = lldb.SBData.CreateDataFromDoubleArray( 39599451b44SJordan Rupprecht process.GetByteOrder(), process.GetAddressByteSize(), [ 39699451b44SJordan Rupprecht 3.14, 6.28, 2.71]) 39799451b44SJordan Rupprecht self.assertTrue( 39899451b44SJordan Rupprecht fabs( 39999451b44SJordan Rupprecht data2.GetDouble( 40099451b44SJordan Rupprecht error, 40199451b44SJordan Rupprecht 0) - 40299451b44SJordan Rupprecht 3.14) < 0.5, 40399451b44SJordan Rupprecht 'double data2[0] = 3.14') 404*779bbbf2SDave Lee self.assertSuccess(error) 40599451b44SJordan Rupprecht self.assertTrue( 40699451b44SJordan Rupprecht fabs( 40799451b44SJordan Rupprecht data2.GetDouble( 40899451b44SJordan Rupprecht error, 40999451b44SJordan Rupprecht 8) - 41099451b44SJordan Rupprecht 6.28) < 0.5, 41199451b44SJordan Rupprecht 'double data2[1] = 6.28') 412*779bbbf2SDave Lee self.assertSuccess(error) 41399451b44SJordan Rupprecht self.assertTrue( 41499451b44SJordan Rupprecht fabs( 41599451b44SJordan Rupprecht data2.GetDouble( 41699451b44SJordan Rupprecht error, 41799451b44SJordan Rupprecht 16) - 41899451b44SJordan Rupprecht 2.71) < 0.5, 41999451b44SJordan Rupprecht 'double data2[2] = 2.71') 420*779bbbf2SDave Lee self.assertSuccess(error) 42199451b44SJordan Rupprecht 42299451b44SJordan Rupprecht data2 = lldb.SBData() 42399451b44SJordan Rupprecht 42499451b44SJordan Rupprecht data2.SetDataFromCString(hello_str) 425619e2e09SDave Lee self.assertEqual(len(data2.uint8), len(hello_str)) 42699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 0, 104) 42799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 1, 101) 42899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 2, 108) 42999451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 3, 108) 43099451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 4, 111) 43199451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt8, 5, 33) 43299451b44SJordan Rupprecht 43399451b44SJordan Rupprecht data2.SetDataFromUInt64Array([1, 2, 3, 4, 5]) 43499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 0, 1) 43599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 8, 2) 43699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 16, 3) 43799451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 24, 4) 43899451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt64, 32, 5) 43999451b44SJordan Rupprecht 4400ed758b2SDave Lee self.assertEqual( 4410ed758b2SDave Lee data2.uint64[0], 1, 44299451b44SJordan Rupprecht 'read_data_helper failure: set data2[0] = 1') 4430ed758b2SDave Lee self.assertEqual( 4440ed758b2SDave Lee data2.uint64[1], 2, 44599451b44SJordan Rupprecht 'read_data_helper failure: set data2[1] = 2') 4460ed758b2SDave Lee self.assertEqual( 4470ed758b2SDave Lee data2.uint64[2], 3, 44899451b44SJordan Rupprecht 'read_data_helper failure: set data2[2] = 3') 4490ed758b2SDave Lee self.assertEqual( 4500ed758b2SDave Lee data2.uint64[3], 4, 45199451b44SJordan Rupprecht 'read_data_helper failure: set data2[3] = 4') 4520ed758b2SDave Lee self.assertEqual( 4530ed758b2SDave Lee data2.uint64[4], 5, 45499451b44SJordan Rupprecht 'read_data_helper failure: set data2[4] = 5') 45599451b44SJordan Rupprecht 45699451b44SJordan Rupprecht self.assertTrue( 45799451b44SJordan Rupprecht data2.uint64[ 45899451b44SJordan Rupprecht 0:2] == [ 45999451b44SJordan Rupprecht 1, 46099451b44SJordan Rupprecht 2], 46199451b44SJordan Rupprecht 'read_data_helper failure: set data2[0:2] = [1,2]') 46299451b44SJordan Rupprecht 46399451b44SJordan Rupprecht data2.SetDataFromSInt32Array([2, -2]) 46499451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 0, 2) 46599451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt32, 4, -2) 46699451b44SJordan Rupprecht 46799451b44SJordan Rupprecht data2.SetDataFromSInt64Array([2, -2]) 46899451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 0, 2) 46999451b44SJordan Rupprecht self.assert_data(data2.GetSignedInt64, 8, -2) 47099451b44SJordan Rupprecht 47199451b44SJordan Rupprecht data2.SetDataFromUInt32Array([1, 2, 3, 4, 5]) 47299451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 0, 1) 47399451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 4, 2) 47499451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 8, 3) 47599451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 12, 4) 47699451b44SJordan Rupprecht self.assert_data(data2.GetUnsignedInt32, 16, 5) 47799451b44SJordan Rupprecht 4780ed758b2SDave Lee self.assertEqual( 4790ed758b2SDave Lee data2.uint32[0], 1, 48099451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[0] = 1') 4810ed758b2SDave Lee self.assertEqual( 4820ed758b2SDave Lee data2.uint32[1], 2, 48399451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[1] = 2') 4840ed758b2SDave Lee self.assertEqual( 4850ed758b2SDave Lee data2.uint32[2], 3, 48699451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[2] = 3') 4870ed758b2SDave Lee self.assertEqual( 4880ed758b2SDave Lee data2.uint32[3], 4, 48999451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[3] = 4') 4900ed758b2SDave Lee self.assertEqual( 4910ed758b2SDave Lee data2.uint32[4], 5, 49299451b44SJordan Rupprecht 'read_data_helper failure: set 32-bit data2[4] = 5') 49399451b44SJordan Rupprecht 49499451b44SJordan Rupprecht data2.SetDataFromDoubleArray([3.14, 6.28, 2.71]) 49599451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 0) - 3.14) 49699451b44SJordan Rupprecht < 0.5, 'set double data2[0] = 3.14') 49799451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 8) - 6.28) 49899451b44SJordan Rupprecht < 0.5, 'set double data2[1] = 6.28') 49999451b44SJordan Rupprecht self.assertTrue(fabs(data2.GetDouble(error, 16) - 2.71) 50099451b44SJordan Rupprecht < 0.5, 'set double data2[2] = 2.71') 50199451b44SJordan Rupprecht 50299451b44SJordan Rupprecht self.assertTrue( 50399451b44SJordan Rupprecht fabs( 50499451b44SJordan Rupprecht data2.double[0] - 50599451b44SJordan Rupprecht 3.14) < 0.5, 50699451b44SJordan Rupprecht 'read_data_helper failure: set double data2[0] = 3.14') 50799451b44SJordan Rupprecht self.assertTrue( 50899451b44SJordan Rupprecht fabs( 50999451b44SJordan Rupprecht data2.double[1] - 51099451b44SJordan Rupprecht 6.28) < 0.5, 51199451b44SJordan Rupprecht 'read_data_helper failure: set double data2[1] = 6.28') 51299451b44SJordan Rupprecht self.assertTrue( 51399451b44SJordan Rupprecht fabs( 51499451b44SJordan Rupprecht data2.double[2] - 51599451b44SJordan Rupprecht 2.71) < 0.5, 51699451b44SJordan Rupprecht 'read_data_helper failure: set double data2[2] = 2.71') 51799451b44SJordan Rupprecht 51899451b44SJordan Rupprecht def assert_data(self, func, arg, expected): 51999451b44SJordan Rupprecht """ Asserts func(SBError error, arg) == expected. """ 52099451b44SJordan Rupprecht error = lldb.SBError() 52199451b44SJordan Rupprecht result = func(error, arg) 52299451b44SJordan Rupprecht if not error.Success(): 52399451b44SJordan Rupprecht stream = lldb.SBStream() 52499451b44SJordan Rupprecht error.GetDescription(stream) 52599451b44SJordan Rupprecht self.assertTrue( 52699451b44SJordan Rupprecht error.Success(), "%s(error, %s) did not succeed: %s" % 52799451b44SJordan Rupprecht (func.__name__, arg, stream.GetData())) 52899451b44SJordan Rupprecht self.assertTrue( 52999451b44SJordan Rupprecht expected == result, "%s(error, %s) == %s != %s" % 53099451b44SJordan Rupprecht (func.__name__, arg, result, expected)) 531