import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test.gdbclientutils import *
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
class MyResponder(MockGDBServerResponder):
def qXferRead(self, obj, annex, offset, length):
if annex == "target.xml":
return (
"""
i386:x86-64
""",
False,
)
else:
return None, False
def qC(self):
return "QC1"
def haltReason(self):
return "T05thread:00000001;06:9038d60f00700000;07:98b4062680ffffff;10:c0d7bf1b80ffffff;"
def readRegister(self, register):
regs = {
0x0: "00b0060000610000",
0xA: "68fe471c80ffffff",
0xC: "60574a1c80ffffff",
0xD: "18f3042680ffffff",
0xE: "be8a4d7142000000",
0xF: "50df471c80ffffff",
0x10: "c0d7bf1b80ffffff",
}
if register in regs:
return regs[register]
else:
return "0000000000000000"
class TestTargetXMLArch(GDBRemoteTestBase):
@skipIfXmlSupportMissing
@expectedFailureAll(archs=["i386"])
@skipIfRemote
def test(self):
"""
Test lldb's parsing of the tag in the target.xml register
description packet.
"""
self.server.responder = MyResponder()
interp = self.dbg.GetCommandInterpreter()
result = lldb.SBCommandReturnObject()
if self.TraceOn():
self.runCmd("log enable gdb-remote packets")
self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets"))
target = self.dbg.CreateTarget("")
self.assertEqual("", target.GetTriple())
process = self.connect(target)
if self.TraceOn():
interp.HandleCommand("target list", result)
print(result.GetOutput())
self.assertTrue(target.GetTriple().startswith("x86_64-unknown-unknown"))
@skipIfXmlSupportMissing
@skipIfRemote
@skipIfLLVMTargetMissing("X86")
def test_register_augmentation(self):
"""
Test that we correctly associate the register info with the eh_frame
register numbers.
"""
target = self.createTarget("basic_eh_frame.yaml")
self.server.responder = MyResponder()
process = self.connect(target)
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), process, [lldb.eStateStopped]
)
self.filecheck("image show-unwind -n foo", __file__, "--check-prefix=UNWIND")
# UNWIND: eh_frame UnwindPlan:
# UNWIND: row[0]: 0: CFA=rsp+128 => rip=[CFA-8]