Skip to content

Commit 0989130

Browse files
committed
Added RISCV reg test for the ServerTargetXML
1 parent 0265d7e commit 0989130

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,155 @@ def haltReason(self):
652652
)
653653
self.match("register read s31", ["s31 = 128"])
654654

655+
@skipIfXmlSupportMissing
656+
@skipIfRemote
657+
@skipIfLLVMTargetMissing("RISCV")
658+
def test_riscv64_regs(self):
659+
"""Test grabbing various riscv64 registers from gdbserver."""
660+
661+
class MyResponder(MockGDBServerResponder):
662+
reg_data = (
663+
(
664+
"0102030405060708" # zero
665+
"0102030405060708" # ra
666+
"0102030405060708" # sp
667+
"0102030405060708" # gp
668+
"0102030405060708" # tp
669+
"0102030405060708" # t0
670+
"0102030405060708" # t1
671+
"0102030405060708" # t2
672+
"0102030405060708" # fp
673+
"0102030405060708" # s1
674+
"0102030405060708" # a0
675+
"0102030405060708" # a1
676+
"0102030405060708" # a2
677+
"0102030405060708" # a3
678+
"0102030405060708" # a4
679+
"0102030405060708" # a5
680+
"0102030405060708" # a6
681+
"0102030405060708" # a7
682+
"0102030405060708" # s2
683+
"0102030405060708" # s3
684+
"0102030405060708" # s4
685+
"0102030405060708" # s5
686+
"0102030405060708" # s6
687+
"0102030405060708" # s7
688+
"0102030405060708" # s8
689+
"0102030405060708" # s9
690+
"0102030405060708" # s10
691+
"0102030405060708" # s11
692+
"0102030405060708" # t3
693+
"0102030405060708" # t4
694+
"0102030405060708" # t5
695+
"0102030405060708" # t6
696+
)
697+
)
698+
699+
def qXferRead(self, obj, annex, offset, length):
700+
if annex == "target.xml":
701+
return (
702+
"""<?xml version="1.0"?>
703+
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
704+
<target>
705+
<architecture>riscv</architecture>
706+
<feature name="org.gnu.gdb.riscv.cpu">
707+
<reg name="zero" bitsize="64" type="int"/>
708+
<reg name="ra" bitsize="64" type="code_ptr"/>
709+
<reg name="sp" bitsize="64" type="data_ptr"/>
710+
<reg name="gp" bitsize="64" type="data_ptr"/>
711+
<reg name="tp" bitsize="64" type="data_ptr"/>
712+
<reg name="t0" bitsize="64" type="int"/>
713+
<reg name="t1" bitsize="64" type="int"/>
714+
<reg name="t2" bitsize="64" type="int"/>
715+
<reg name="fp" bitsize="64" type="data_ptr"/>
716+
<reg name="s1" bitsize="64" type="int"/>
717+
<reg name="a0" bitsize="64" type="int"/>
718+
<reg name="a1" bitsize="64" type="int"/>
719+
<reg name="a2" bitsize="64" type="int"/>
720+
<reg name="a3" bitsize="64" type="int"/>
721+
<reg name="a4" bitsize="64" type="int"/>
722+
<reg name="a5" bitsize="64" type="int"/>
723+
<reg name="a6" bitsize="64" type="int"/>
724+
<reg name="a7" bitsize="64" type="int"/>
725+
<reg name="s2" bitsize="64" type="int"/>
726+
<reg name="s3" bitsize="64" type="int"/>
727+
<reg name="s4" bitsize="64" type="int"/>
728+
<reg name="s5" bitsize="64" type="int"/>
729+
<reg name="s6" bitsize="64" type="int"/>
730+
<reg name="s7" bitsize="64" type="int"/>
731+
<reg name="s8" bitsize="64" type="int"/>
732+
<reg name="s9" bitsize="64" type="int"/>
733+
<reg name="s10" bitsize="64" type="int"/>
734+
<reg name="s11" bitsize="64" type="int"/>
735+
<reg name="t3" bitsize="64" type="int"/>
736+
<reg name="t4" bitsize="64" type="int"/>
737+
<reg name="t5" bitsize="64" type="int"/>
738+
<reg name="t6" bitsize="64" type="int"/>
739+
<reg name="pc" bitsize="64" type="code_ptr"/>
740+
</feature>
741+
</target>""",
742+
False,
743+
)
744+
else:
745+
return None, False
746+
747+
def readRegister(self, regnum):
748+
return ""
749+
750+
def readRegisters(self):
751+
return self.reg_data
752+
753+
def writeRegisters(self, reg_hex):
754+
self.reg_data = reg_hex
755+
return "OK"
756+
757+
def haltReason(self):
758+
return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
759+
760+
self.server.responder = MyResponder()
761+
762+
target = self.createTarget("basic_eh_frame-riscv64.yaml")
763+
process = self.connect(target)
764+
lldbutil.expect_state_changes(
765+
self, self.dbg.GetListener(), process, [lldb.eStateStopped]
766+
)
767+
768+
# test generic aliases
769+
self.match("register read x0", ["zero = 0x0807060504030201"])
770+
self.match("register read x1", ["ra = 0x0807060504030201"])
771+
self.match("register read x2", ["sp = 0x0807060504030201"])
772+
self.match("register read x3", ["gp = 0x0807060504030201"])
773+
self.match("register read x4", ["tp = 0x0807060504030201"])
774+
self.match("register read x5", ["t0 = 0x0807060504030201"])
775+
self.match("register read x6", ["t1 = 0x0807060504030201"])
776+
self.match("register read x7", ["t2 = 0x0807060504030201"])
777+
# Register x8 is probably not working because it has two aliases fp, s0
778+
# self.match("register read x8", ["fp = 0x0807060504030201"])
779+
self.match("register read x9", ["s1 = 0x0807060504030201"])
780+
self.match("register read x10", ["a0 = 0x0807060504030201"])
781+
self.match("register read x11", ["a1 = 0x0807060504030201"])
782+
self.match("register read x12", ["a2 = 0x0807060504030201"])
783+
self.match("register read x13", ["a3 = 0x0807060504030201"])
784+
self.match("register read x14", ["a4 = 0x0807060504030201"])
785+
self.match("register read x15", ["a5 = 0x0807060504030201"])
786+
self.match("register read x16", ["a6 = 0x0807060504030201"])
787+
self.match("register read x17", ["a7 = 0x0807060504030201"])
788+
self.match("register read x18", ["s2 = 0x0807060504030201"])
789+
self.match("register read x19", ["s3 = 0x0807060504030201"])
790+
self.match("register read x20", ["s4 = 0x0807060504030201"])
791+
self.match("register read x21", ["s5 = 0x0807060504030201"])
792+
self.match("register read x22", ["s6 = 0x0807060504030201"])
793+
self.match("register read x23", ["s7 = 0x0807060504030201"])
794+
self.match("register read x24", ["s8 = 0x0807060504030201"])
795+
self.match("register read x25", ["s9 = 0x0807060504030201"])
796+
self.match("register read x26", ["s10 = 0x0807060504030201"])
797+
self.match("register read x27", ["s11 = 0x0807060504030201"])
798+
self.match("register read x28", ["t3 = 0x0807060504030201"])
799+
self.match("register read x29", ["t4 = 0x0807060504030201"])
800+
self.match("register read x30", ["t5 = 0x0807060504030201"])
801+
self.match("register read x31", ["t6 = 0x0807060504030201"])
802+
803+
655804
@skipIfXmlSupportMissing
656805
@skipIfRemote
657806
@skipIfLLVMTargetMissing("X86")

0 commit comments

Comments
 (0)