1from lldbsuite.test.lldbtest import * 2from lldbsuite.test.decorators import * 3from lldbsuite.test.gdbclientutils import * 4from textwrap import dedent 5from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 6 7class MyResponder(MockGDBServerResponder): 8 def qXferRead(self, obj, annex, offset, length): 9 if annex == "target.xml": 10 return dedent("""\ 11 <?xml version="1.0"?> 12 <target version="1.0"> 13 <architecture>aarch64</architecture> 14 <feature name="org.gnu.gdb.aarch64.core"> 15 <reg name="x0" bitsize="64"/> 16 <reg name="x1" bitsize="64"/> 17 <reg name="x2" bitsize="64"/> 18 <reg name="x3" bitsize="64"/> 19 <reg name="x4" bitsize="64"/> 20 <reg name="x5" bitsize="64"/> 21 <reg name="x6" bitsize="64"/> 22 <reg name="x7" bitsize="64"/> 23 <reg name="x8" bitsize="64"/> 24 <reg name="x9" bitsize="64"/> 25 <reg name="x10" bitsize="64"/> 26 <reg name="x11" bitsize="64"/> 27 <reg name="x12" bitsize="64"/> 28 <reg name="x13" bitsize="64"/> 29 <reg name="x14" bitsize="64"/> 30 <reg name="x15" bitsize="64"/> 31 <reg name="x16" bitsize="64"/> 32 <reg name="x17" bitsize="64"/> 33 <reg name="x18" bitsize="64"/> 34 <reg name="x19" bitsize="64"/> 35 <reg name="x20" bitsize="64"/> 36 <reg name="x21" bitsize="64"/> 37 <reg name="x22" bitsize="64"/> 38 <reg name="x23" bitsize="64"/> 39 <reg name="x24" bitsize="64"/> 40 <reg name="x25" bitsize="64"/> 41 <reg name="x26" bitsize="64"/> 42 <reg name="x27" bitsize="64"/> 43 <reg name="x28" bitsize="64"/> 44 <reg name="x29" bitsize="64"/> 45 <reg name="x30" bitsize="64"/> 46 <reg name="sp" bitsize="64"/> 47 <reg name="pc" bitsize="64"/> 48 </feature> 49 </target> 50 """), False 51 else: 52 return None, False 53 54class TestQemuAarch64TargetXml(GDBRemoteTestBase): 55 56 @skipIfXmlSupportMissing 57 @skipIfRemote 58 @skipIfLLVMTargetMissing("AArch64") 59 def test_register_augmentation(self): 60 """ 61 Test that we correctly associate the register info with the eh_frame 62 register numbers. 63 """ 64 65 target = self.createTarget("basic_eh_frame-aarch64.yaml") 66 self.server.responder = MyResponder() 67 68 process = self.connect(target) 69 lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, 70 [lldb.eStateStopped]) 71 self.filecheck("image show-unwind -n foo", __file__, 72 "--check-prefix=UNWIND") 73# UNWIND: eh_frame UnwindPlan: 74# UNWIND: row[0]: 0: CFA=x29+16 => x30=[CFA-8] 75