@@ -652,6 +652,154 @@ def haltReason(self):
652
652
)
653
653
self .match ("register read s31" , ["s31 = 128" ])
654
654
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
+ "0102030405060708" # zero
664
+ "0102030405060708" # ra
665
+ "0102030405060708" # sp
666
+ "0102030405060708" # gp
667
+ "0102030405060708" # tp
668
+ "0102030405060708" # t0
669
+ "0102030405060708" # t1
670
+ "0102030405060708" # t2
671
+ "0102030405060708" # fp
672
+ "0102030405060708" # s1
673
+ "0102030405060708" # a0
674
+ "0102030405060708" # a1
675
+ "0102030405060708" # a2
676
+ "0102030405060708" # a3
677
+ "0102030405060708" # a4
678
+ "0102030405060708" # a5
679
+ "0102030405060708" # a6
680
+ "0102030405060708" # a7
681
+ "0102030405060708" # s2
682
+ "0102030405060708" # s3
683
+ "0102030405060708" # s4
684
+ "0102030405060708" # s5
685
+ "0102030405060708" # s6
686
+ "0102030405060708" # s7
687
+ "0102030405060708" # s8
688
+ "0102030405060708" # s9
689
+ "0102030405060708" # s10
690
+ "0102030405060708" # s11
691
+ "0102030405060708" # t3
692
+ "0102030405060708" # t4
693
+ "0102030405060708" # t5
694
+ "0102030405060708" # t6
695
+ )
696
+
697
+ def qXferRead (self , obj , annex , offset , length ):
698
+ if annex == "target.xml" :
699
+ # Note that this XML does not include any aliases, LLDB must generate them itself.
700
+ return (
701
+ """<?xml version="1.0"?>
702
+ <!DOCTYPE feature SYSTEM "gdb-target.dtd">
703
+ <target>
704
+ <architecture>riscv</architecture>
705
+ <feature name="org.gnu.gdb.riscv.cpu">
706
+ <reg name="zero" bitsize="64" type="int"/>
707
+ <reg name="ra" bitsize="64" type="code_ptr"/>
708
+ <reg name="sp" bitsize="64" type="data_ptr"/>
709
+ <reg name="gp" bitsize="64" type="data_ptr"/>
710
+ <reg name="tp" bitsize="64" type="data_ptr"/>
711
+ <reg name="t0" bitsize="64" type="int"/>
712
+ <reg name="t1" bitsize="64" type="int"/>
713
+ <reg name="t2" bitsize="64" type="int"/>
714
+ <reg name="fp" bitsize="64" type="data_ptr"/>
715
+ <reg name="s1" bitsize="64" type="int"/>
716
+ <reg name="a0" bitsize="64" type="int"/>
717
+ <reg name="a1" bitsize="64" type="int"/>
718
+ <reg name="a2" bitsize="64" type="int"/>
719
+ <reg name="a3" bitsize="64" type="int"/>
720
+ <reg name="a4" bitsize="64" type="int"/>
721
+ <reg name="a5" bitsize="64" type="int"/>
722
+ <reg name="a6" bitsize="64" type="int"/>
723
+ <reg name="a7" bitsize="64" type="int"/>
724
+ <reg name="s2" bitsize="64" type="int"/>
725
+ <reg name="s3" bitsize="64" type="int"/>
726
+ <reg name="s4" bitsize="64" type="int"/>
727
+ <reg name="s5" bitsize="64" type="int"/>
728
+ <reg name="s6" bitsize="64" type="int"/>
729
+ <reg name="s7" bitsize="64" type="int"/>
730
+ <reg name="s8" bitsize="64" type="int"/>
731
+ <reg name="s9" bitsize="64" type="int"/>
732
+ <reg name="s10" bitsize="64" type="int"/>
733
+ <reg name="s11" bitsize="64" type="int"/>
734
+ <reg name="t3" bitsize="64" type="int"/>
735
+ <reg name="t4" bitsize="64" type="int"/>
736
+ <reg name="t5" bitsize="64" type="int"/>
737
+ <reg name="t6" bitsize="64" type="int"/>
738
+ <reg name="pc" bitsize="64" type="code_ptr"/>
739
+ </feature>
740
+ </target>""" ,
741
+ False ,
742
+ )
743
+ else :
744
+ return None , False
745
+
746
+ def readRegister (self , regnum ):
747
+ return ""
748
+
749
+ def readRegisters (self ):
750
+ return self .reg_data
751
+
752
+ def writeRegisters (self , reg_hex ):
753
+ self .reg_data = reg_hex
754
+ return "OK"
755
+
756
+ def haltReason (self ):
757
+ return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
758
+
759
+ self .server .responder = MyResponder ()
760
+
761
+ target = self .createTarget ("basic_eh_frame-riscv64.yaml" )
762
+ process = self .connect (target )
763
+ lldbutil .expect_state_changes (
764
+ self , self .dbg .GetListener (), process , [lldb .eStateStopped ]
765
+ )
766
+
767
+ # test generic aliases
768
+ self .match ("register read x0" , ["zero = 0x0807060504030201" ])
769
+ self .match ("register read x1" , ["ra = 0x0807060504030201" ])
770
+ self .match ("register read x2" , ["sp = 0x0807060504030201" ])
771
+ self .match ("register read x3" , ["gp = 0x0807060504030201" ])
772
+ self .match ("register read x4" , ["tp = 0x0807060504030201" ])
773
+ self .match ("register read x5" , ["t0 = 0x0807060504030201" ])
774
+ self .match ("register read x6" , ["t1 = 0x0807060504030201" ])
775
+ self .match ("register read x7" , ["t2 = 0x0807060504030201" ])
776
+ # Register x8 is probably not working because it has two aliases fp, s0
777
+ # See issue #127900
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
+
655
803
@skipIfXmlSupportMissing
656
804
@skipIfRemote
657
805
@skipIfLLVMTargetMissing ("X86" )
0 commit comments